亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? PB 熟悉的哥們希望大家可以互相學習一下
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************
 *                                                             *
 * Copyright (c) 2001-2007 McObject LLC. All Right Reserved.   *
 *                                                             *
 ***************************************************************/
#include "platform.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include "nvram_db.h"

#define REGISTRY_SIZE     (3000)
#define DB_SIZE		 ( 1 * 1024 * 1024) // ( 32 * 1024)

DEFINE_PROCESS_MASKS(set);

static char mem__[DB_SIZE + REGISTRY_SIZE + 32];

#define NVRAM_BEGIN   ((long)(& mem__[0]))
#define NVRAM_END     (NVRAM_BEGIN + sizeof(mem__))

#define STRINGS_DIM   10
#define STRINGS_STEP  100
#define MAX_VECT_LEN  10

#define LOG_PERIOD 10000

#define REGISTRY_ADDRESS  ((char*) NVRAM_BEGIN )
#define DB_ADDRESS        ((char*) ( NVRAM_BEGIN + REGISTRY_SIZE ) )
#define CHECKSUM_ADDR   ((char*) ( NVRAM_BEGIN + REGISTRY_SIZE + DB_SIZE) )

#ifndef MCO_PLATFORM_X64
    #define PAGESIZE 96
#else 
    #define PAGESIZE 192
#endif 

THREAD_ID thWorkThread;
THREAD_ID thStartStop;
THREAD_ID thCheckRes;

mco_db_h db = 0;
mco_db_h* pdb;
int startflag = 0;
int stopflag = 0;
int CheckTime = 1000;
int idx = 0;
int short_loop =  - 1;
int long_loop =  - 1;
int count = 0;
int test_Mode = 0;

static char* strings[STRINGS_DIM];

typedef struct CheckSum_t
{
    int checksum_before_commit;
    int checksum_after_commit;
} CheckSums;

static const char* dbName = "nvram_db";

void usage(void)
{

    Printf("Usage: \n\trecovery\t[-t][timeout_value] | \n");
    Printf("\t\t\t[-h]\n");
    Printf("\t\t\t[-e]\n");
}

void _SH_(void)
{

    Printf("\n\t This test demonstrates database recovery after the hardware reset.\n"
           "\tThe working thread creates a database in the local memory buffer\n"
           "\tand updates it in an infinite loop.\n"
           "\t When the Enter key is pressed, the working thread is first cancelled\n"
           "\tand then restarted. After the thread is restarted, it connects to\n"
           "\tthe database and performs the recovery if necessary.\n\n"
           "\t The sample uses  mco_db_check_resources() function, that is called\n"
           "\tfrom the \"watchdog\" thread in order to detect hanging on the resource\n""\tand repair it.\n\n");

    Printf("\tCopyright (c) 2001-2007 McObject LLC. All Right Reserved.\n");

    Printf("\n\teXtremeDB runtime version %d.%d, build %d\n\n", MCO_COMP_VER_MAJOR, MCO_COMP_VER_MINOR,
           MCO_COMP_BUILD_NUM);

    usage();
    if (test_Mode == 0)
    {
        Printf("\n\tPress Enter to start");
        getchar();
    }
}

void help(void)
{

    Printf("Usage: \trecovery [OPTIONS]\n");

    Printf("Options:\n\n");
    Printf("-t[N]    Resource timeout value. N is timeout value in milliseconds,\n""         default is 1000 ms\n");
    Printf("-e       Exit from the program\n");

    Printf("-h            help\n");

}

short rand2(short lowlimit, short uplimit)
{
    int n = rand();
    return (short)((n % (uplimit - lowlimit + 1)) + lowlimit);
}

void make_strings(void)
{
    int i, j, strsz;

    for (j = 0; j < STRINGS_DIM; j++)
    {
        strsz = STRINGS_STEP *(j + 1);
        strings[j] = (char*)malloc(strsz + 1);
        for (i = 0; i < strsz; i++)
        {
            strings[j][i] = (char)rand2('a', 'z');
        }
        strings[j][strsz] = 0;
    }
}

char* get_random_string()
{
    return strings[rand2(0, STRINGS_DIM - 1)];
}

static int starting_create_new_db(mco_db_h* pdb)
{

    if (mco_db_connect(dbName, pdb) != MCO_S_OK)
    {
        *pdb = 0;
        return 1;
    }
    else
    {
        mco_db_disconnect(*pdb);
        *pdb = 0;
        return 0;
    }
}

static void errhandler(int n)
{
    printf("\neXtremeDB runtime fatal error: %d", n);
    for (;;)
        ;

}

static const char* sKind(int k)
{
    switch (k)
    {
        case MCO_REPORT_DB_TOTAL:
            return "Database Instance  ";
        case MCO_REPORT_TREE_TOTAL:
            return "All  Tree Indexes  ";
        case MCO_REPORT_HASH_TOTAL:
            return "All  Hash Indexes  ";
        case MCO_REPORT_LIST_TOTAL:
            return "All  Lists         ";
        case MCO_REPORT_TREE:
            return "Tree Index         ";
        case MCO_REPORT_HASH:
            return "Hash Index         ";
        case MCO_REPORT_LIST:
            return "List               ";
        case MCO_REPORT_OID:
            return "OID  Index         ";
    }
    return "??? ";
}


static void detailed_mem_report(mco_db_h db)
{
    int i;
    #define maxItems 10
    mco_report_item_t v[maxItems];
    int nitm;
    mco_db_report(db, MCO_REPORT_DB_ALL, v, maxItems, &nitm);
    #undef maxItems

    printf("\n********** Memory report ****************************");
    for (i = 0; i < nitm; i++)
    {
        mco_report_item_h itm = v + i;
        const char* itm_name = itm->name ? itm->name: "";
        const char* kindstr = sKind(itm->flag);

        printf("\n%s [%2d] %3d pages (%3d Kb) %5d items h=%2d --%s", kindstr, (int)(itm->id), (int)(itm->used_pages), 
               (int)(itm->used_pages* PAGESIZE / 1024), (int)(itm->objects_num), (int)(itm->tree_height), itm_name);
    }
    printf("\n*****************************************************\n");
}


static void classStat0(mco_trans_h t, mco_db_h db)
{
    mco_class_stat_t stat;

    detailed_mem_report(db);

    mco_class_stat_get(t, Rec_code, &stat);

    printf("\nstat: obj=%d corep=%d  blobp=%d  corespace=%d\n", stat.objects_num, stat.core_pages, stat.blob_pages,
           stat.core_space);

}

static int nRecords(mco_db_h db)
{
    int ret = 0;
    mco_trans_h t;
    mco_class_stat_t stat;

    mco_trans_start(db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t);
    mco_class_stat_get(t, Rec_code, &stat);
    ret = (int)stat.objects_num;
    mco_trans_commit(t);
    return ret;
}


static void classStat(mco_db_h db)
{
    mco_trans_h t;
    mco_trans_start(db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t);

    classStat0(t, db);

    mco_trans_commit(t);
}



int check_task(uint4 task_id, void* user_data)
{
    return 0; // all tasks being checked already dead
}

static int str_checksum(const char* s, uint2 len)
{
    int sum = 11;
    uint2 j;
    for (j = 0; j < len; j++)
    {
        sum += (17* s[j]) % 9003;
    }
    return sum;
}

static int record_checksum(int key, const char* str, uint2 str_len)
{
    return str_checksum(str, str_len);
}

static int record_checksum_byhandle(Rec* rec)
{
    uint4 key;
    uint2 len;
    MCO_RET rc = 0;
    int chksum;
    uint2 vl;
    int i;
    mco_time tim;
    uint4 u4;
    Svalue sv;
    char str[STRINGS_STEP* STRINGS_DIM + 10] = 
    {
        0
    };

    for (;;)
    {

        if ((rc |= Rec_key_get(rec, &key)))
        {
            break;
        }
        if ((rc |= Rec_str_get(rec, str, sizeof(str), &len)))
        {
            break;
        }
        chksum = str_checksum(str, len);
        if ((rc |= Rec_valuev_size(rec, &vl)))
        {
            break;
        }

        for (i = 0; i < vl; i++)
        {
            if ((rc |= Rec_valuev_at(rec, (uint2)i, &sv)))
            {
                break;
            }
            if ((rc |= Svalue_tm_get(&sv, &tim)))
            {
                break;
            }
            chksum += (17* tim) % 9003;
            if ((rc |= Svalue_u4_get(&sv, &u4)))
            {
                break;
            }
            chksum += (17* u4) % 9003;
            if ((rc |= Svalue_bytes_get(&sv, str, sizeof(str))))
            {
                break;
            }
            chksum += str_checksum(str, (uint2)strlen(str));
        }

        break;
    }

    if (rc)
    {
        return 0;
    }

    return chksum;
}


static int calculate_checksum(mco_db_h db)
{
    MCO_RET rc;
    mco_trans_h t;
    mco_cursor_t csr;
    Rec rec;
    int sum = 0;

    rc = mco_trans_start(db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &t);
    if (MCO_S_OK != rc)
    {
        printf("\nError starting trn\n");
        goto Err;
    }

    Rec_tkey_index_cursor(t, &csr);
    rc = mco_cursor_first(t, &csr);
    while (rc == MCO_S_OK)
    {
        rc = Rec_from_cursor(t, &csr, &rec);
        if (rc)
        {
            goto Err;
        }
        sum ^= record_checksum_byhandle(&rec);
        rc = mco_cursor_next(t, &csr);
    }

    mco_trans_commit(t);

    return sum;

    Err: mco_trans_rollback(t);
    return  - 1;

}

// returns 0 if OK
static int connect_to_db(mco_db_h* pdb, int create_it)
{
    MCO_RET rc;

    if (create_it)
    {
        printf("\nCreating database instance\n");

        // first, clean registry in NVRAM:
        printf("\nCleaning registry:\n");
        memset(REGISTRY_ADDRESS, REGISTRY_SIZE, 0);

        printf("\nstart runtime\n");

        mco_runtime_start(); // after cleaning nvram, not before!

        printf("\nopen databasee\n");

        rc = mco_db_open(dbName, nvram_db_get_dictionary(), DB_ADDRESS, DB_SIZE, (uint2)PAGESIZE);

        if (rc)
        {
            printf("\nerror %d creating database", rc);
            goto ErrExit;
        }

        // Initialize Checksum:
        {
            CheckSums* chk = (CheckSums*)CHECKSUM_ADDR;
            chk->checksum_after_commit = 0;
            chk->checksum_before_commit = 0;
            printf("\nChecksums initialized (%d, %d)\n", chk->checksum_after_commit, chk->checksum_before_commit);
        }
    }
    else
    {
        mco_runtime_start();
    }

    /* connect to the database, obtain a database handle */
    rc = mco_db_connect(dbName, pdb);
    if (rc)
    {
        printf("\nerror %d connecting database", rc);
        goto ErrExit;
    }

    /* verify that current checksum equals to one of 
    the 2 possible stored in NVRAM @ CheckSums
     */
    {
        CheckSums* chk = (CheckSums*)CHECKSUM_ADDR;
        int curr_sum = calculate_checksum(db);
        if (curr_sum != chk->checksum_after_commit && curr_sum != chk->checksum_before_commit)
        {
            printf("\nFailed recovery !!!\n""\nChecksum is %d, expected %d or %d\n", 


            curr_sum, chk->checksum_after_commit, chk->checksum_before_commit);
            goto ErrExit;
        }
        chk->checksum_after_commit = curr_sum;

    }

    return 0;
    ErrExit: return  - 1;

}

static int get_random_val(void)
{
    /*
    static int num = 3;
    num = (num *19 + 25) % 3037;
    return num;
     */
    return rand();
}

static MCO_RET insertTrn(mco_db_h db)
{
    MCO_RET rc;
    mco_trans_h t;
    Rec rec;
    uint4 key;
    char buf[100];
    CheckSums* chk = (CheckSums*)CHECKSUM_ADDR;
    int recsum;
    uint2 buflen;
    uint2 vl = 0, i;
    Svalue sv;
    char* str;
    uint2 len;

    // Insert 1 record

    key = get_random_val() + idx;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臂av日日欢夜夜爽一区| 国产精品资源在线看| 久久精品国产在热久久| 国产sm精品调教视频网站| 欧美亚洲国产bt| 国产片一区二区| 日本成人中文字幕| av综合在线播放| 久久色视频免费观看| 午夜精品福利在线| 91免费在线播放| 久久久高清一区二区三区| 日韩精品亚洲一区二区三区免费| 99久久伊人网影院| 国产婷婷色一区二区三区| 秋霞影院一区二区| 欧美视频第二页| 夜夜精品视频一区二区 | 午夜国产不卡在线观看视频| 处破女av一区二区| 亚洲精品一区二区在线观看| 亚洲二区在线视频| 色婷婷综合五月| 亚洲欧美偷拍另类a∨色屁股| 国产精品系列在线播放| 337p日本欧洲亚洲大胆色噜噜| 亚洲国产另类av| 91福利在线播放| 亚洲制服丝袜av| 欧洲视频一区二区| 亚洲一区二区黄色| 欧美在线啊v一区| 亚洲午夜免费福利视频| 在线看国产一区| 亚洲视频资源在线| 欧美高清视频一二三区| 1000部国产精品成人观看| 日韩欧美一区二区三区在线| 国产亚洲美州欧州综合国| 精品无人区卡一卡二卡三乱码免费卡 | 精品久久久久99| 午夜久久电影网| 在线不卡欧美精品一区二区三区| 亚洲成人午夜影院| 欧美日韩高清一区二区三区| 午夜精品成人在线| 欧美一级欧美三级| 国产综合色精品一区二区三区| 久久日韩粉嫩一区二区三区| 成人福利视频在线看| 尤物视频一区二区| 欧美精品乱码久久久久久按摩| 日本中文字幕不卡| 国产亚洲综合色| 99久久久久久| 日韩国产欧美在线观看| 国产精品的网站| 激情久久五月天| 国产喂奶挤奶一区二区三区 | 亚洲国产日韩在线一区模特| 欧美美女网站色| 经典三级一区二区| 1024精品合集| 欧美一级黄色大片| 成人网男人的天堂| 亚洲超丰满肉感bbw| 久久香蕉国产线看观看99| 97se亚洲国产综合在线| 日本中文字幕一区二区视频| 国产精品伦一区二区三级视频| 欧美影院一区二区三区| 国产在线一区二区| 亚洲精品va在线观看| 欧美r级电影在线观看| 色一情一伦一子一伦一区| 久久成人av少妇免费| 亚洲人快播电影网| 亚洲精品一区二区在线观看| 91精品福利视频| 国产精品1区2区3区在线观看| 亚洲欧美色一区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲欧美一区二区久久| 精品国产亚洲在线| 欧美日韩久久久久久| 成人动漫一区二区三区| 裸体一区二区三区| 亚洲欧美日韩人成在线播放| 久久精品亚洲一区二区三区浴池| 欧美中文一区二区三区| 成人看片黄a免费看在线| 看电影不卡的网站| 婷婷综合五月天| 一区二区视频免费在线观看| 日本一区二区三区免费乱视频| 51精品秘密在线观看| 色嗨嗨av一区二区三区| av电影天堂一区二区在线| 国产一区二区精品在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久精品免费观看| 五月天婷婷综合| 亚洲手机成人高清视频| 国产精品欧美久久久久一区二区| 日韩女优av电影在线观看| 欧美久久久久久久久| 欧美色图在线观看| 欧美曰成人黄网| 欧美中文字幕一区| 欧美三级一区二区| 在线亚洲一区二区| 色综合久久综合网欧美综合网| 成人av免费在线| 成人性视频网站| 丁香六月综合激情| 成人动漫在线一区| 91免费小视频| 欧美专区亚洲专区| 6080yy午夜一二三区久久| 欧美日韩精品一区二区三区 | 亚洲午夜一二三区视频| 一区二区在线免费| 亚洲福利视频一区二区| 日韩一区精品字幕| 捆绑紧缚一区二区三区视频| 国产一区在线不卡| 懂色中文一区二区在线播放| 处破女av一区二区| 一本色道**综合亚洲精品蜜桃冫 | 成人蜜臀av电影| 色老汉av一区二区三区| 欧美高清视频不卡网| 日韩欧美一二三区| 国产清纯白嫩初高生在线观看91| 中文字幕亚洲欧美在线不卡| 亚洲精品国产高清久久伦理二区| 成人av资源站| 欧洲精品视频在线观看| 欧美无人高清视频在线观看| 欧美日韩国产在线观看| 在线成人免费视频| 日韩欧美视频一区| 久久久亚洲国产美女国产盗摄| 国产午夜精品一区二区三区嫩草 | 欧美极品美女视频| 成人免费在线视频| 日本aⅴ免费视频一区二区三区| 韩国理伦片一区二区三区在线播放| 国产999精品久久| 色综合天天综合网天天狠天天| 91精品欧美一区二区三区综合在 | 欧美精品在线观看播放| 久久青草欧美一区二区三区| 怡红院av一区二区三区| 精品一区二区三区免费播放 | 国产成人小视频| 欧美午夜精品免费| 国产日本亚洲高清| 亚洲成av人片在线观看无码| 国产成人福利片| 欧美日韩免费观看一区二区三区 | 欧美激情艳妇裸体舞| 亚洲一区二三区| 国产乱妇无码大片在线观看| 日本韩国欧美在线| 国产日产欧美一区| 人人超碰91尤物精品国产| 99免费精品视频| 久久综合给合久久狠狠狠97色69| 一区二区三区**美女毛片| 久久国产精品99久久久久久老狼| 91免费观看在线| 久久先锋影音av| 日本不卡一二三| 欧美在线999| 亚洲三级在线免费观看| 国产精品12区| 日韩欧美在线影院| 亚洲成人激情社区| 成人国产电影网| 2021中文字幕一区亚洲| 日欧美一区二区| 色婷婷亚洲精品| 国产精品久久久久久久久动漫| 毛片av中文字幕一区二区| 在线免费观看视频一区| 亚洲欧美国产77777| 国模冰冰炮一区二区| 日韩一区二区精品在线观看| 五月天激情综合| 欧美色区777第一页| 一区二区三区在线视频免费| 不卡欧美aaaaa| 久久久久青草大香线综合精品| 久久国产婷婷国产香蕉| 亚洲一区在线观看免费观看电影高清| 99re66热这里只有精品3直播| 中文av字幕一区| gogo大胆日本视频一区| 国产精品黄色在线观看|