亚洲欧美第一页_禁久久精品乱码_粉嫩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| 久久久美女艺术照精彩视频福利播放| 91成人在线观看喷潮| 国产精品自拍av| 免费观看91视频大全| 亚洲美女免费在线| 国产天堂亚洲国产碰碰| 337p亚洲精品色噜噜| 94色蜜桃网一区二区三区| 国产一区二区在线视频| 丝袜美腿亚洲一区二区图片| 亚洲人成网站影音先锋播放| 久久久久久97三级| 日韩欧美中文字幕精品| 欧美日韩一本到| 色综合一个色综合亚洲| 成人动漫一区二区| 国产自产v一区二区三区c| 日韩激情在线观看| 亚洲第一二三四区| 一区二区三区91| 综合久久给合久久狠狠狠97色| 自拍偷拍亚洲欧美日韩| 久久久久久久久岛国免费| 日韩午夜在线播放| 日韩午夜激情电影| 欧美一级艳片视频免费观看| 欧美美女喷水视频| 欧美日韩精品欧美日韩精品| 欧美三级日韩三级| 欧美日韩久久久久久| 色老汉av一区二区三区| 色嗨嗨av一区二区三区| 色久综合一二码| 91黄色免费网站| 在线精品观看国产| 欧美自拍丝袜亚洲| 欧美理论在线播放| 在线播放91灌醉迷j高跟美女| 欧美精品久久一区二区三区 | 国产欧美一区二区精品婷婷| 欧美精品一区二区高清在线观看| 欧美videos大乳护士334| 欧美va亚洲va国产综合| 久久久综合精品| 国产午夜精品一区二区三区视频 | 日本vs亚洲vs韩国一区三区| 丝袜脚交一区二区| 欧美aa在线视频| 精品中文av资源站在线观看| 国产露脸91国语对白| 丰满少妇在线播放bd日韩电影| 国产成人免费视频网站 | 91蜜桃免费观看视频| 一本大道久久a久久综合| 欧美视频一区二区三区在线观看| 亚洲日本乱码在线观看| 一区二区三区精品视频| 日韩国产一二三区| 国产酒店精品激情| 91丨porny丨首页| 欧美日韩美少妇| 久久综合九色综合欧美就去吻| 中文无字幕一区二区三区| 亚洲黄色av一区| 麻豆中文一区二区| 成人黄色av网站在线| 欧美三级乱人伦电影| 久久先锋影音av鲁色资源网| 国产欧美日本一区视频| 亚洲丰满少妇videoshd| 国产一区二区0| 欧美偷拍一区二区| 精品91自产拍在线观看一区| 亚洲天堂av一区| 青青青爽久久午夜综合久久午夜 | 不卡电影一区二区三区| 欧美三级午夜理伦三级中视频| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 欧美一区二区三区在| 国产精品三级电影| 日韩不卡手机在线v区| 风间由美中文字幕在线看视频国产欧美| 91丨九色丨国产丨porny| 精品日产卡一卡二卡麻豆| 一区二区三区四区在线免费观看| 久久激五月天综合精品| 色老汉av一区二区三区| 日韩精品成人一区二区在线| 福利一区福利二区| 日韩一区二区在线观看视频| 亚洲欧美日韩系列| 国产一区二区三区观看| 88在线观看91蜜桃国自产| 国产精品另类一区| 久久精品国产亚洲a| 欧美亚洲一区二区在线观看| 国产日韩成人精品| 欧美aaaaa成人免费观看视频| 91丨九色丨尤物| 中文字幕精品一区二区三区精品| 免费视频最近日韩| 欧美日韩国产片| 亚洲精品国产a| 成人激情综合网站| 精品国偷自产国产一区| 日韩在线卡一卡二| 欧美三区免费完整视频在线观看| 亚洲天堂精品在线观看| 成人国产精品视频| 国产欧美日韩三级| 国内精品国产成人国产三级粉色| 欧美精品第一页| 亚洲五月六月丁香激情| 色偷偷一区二区三区| 国产精品乱码一区二区三区软件| 国产精品18久久久久久久久| 久久人人超碰精品| 韩日av一区二区| 日韩欧美一区二区不卡| 裸体一区二区三区| 日韩一区二区视频| 日韩av在线发布| 91精品国产综合久久精品性色| 亚洲午夜久久久久久久久电影网 | 欧美亚洲国产bt| 亚洲欧美偷拍另类a∨色屁股| 99综合电影在线视频| 国产亚洲精品资源在线26u| 国产精品一区免费视频| 国产亚洲精品aa| 不卡视频在线观看| 亚洲婷婷综合色高清在线| 92精品国产成人观看免费| 亚洲免费观看在线视频| 色哟哟一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在| 91蜜桃网址入口| 亚洲图片欧美视频| 欧美一卡二卡在线| 韩国精品在线观看| 久久精品亚洲国产奇米99| 成人激情校园春色| 亚洲精选免费视频| 欧美日韩在线播| 精品一区二区三区日韩| 久久人人超碰精品| 99久久精品国产导航| 亚洲第一二三四区| 精品区一区二区| 成人黄色免费短视频| 亚洲自拍都市欧美小说| 欧美一区二区三区视频在线 | 精品在线一区二区三区| 色综合久久综合| 偷拍亚洲欧洲综合| 日韩欧美一区在线观看| 国产精品一区专区| 亚洲人成影院在线观看| 91精品国产综合久久久久久 | 欧美视频一区在线观看| 免费视频最近日韩| 国产欧美va欧美不卡在线| 91蜜桃视频在线| 另类中文字幕网| 最新不卡av在线| 欧美一区二区三区四区五区 | 91在线视频播放| 亚洲va天堂va国产va久| 久久综合狠狠综合久久综合88| 99精品在线观看视频| 日韩专区在线视频| 欧美激情自拍偷拍| 欧美精品久久久久久久久老牛影院| 国产一区亚洲一区| 亚洲综合一二区| 久久精品视频一区二区三区| 欧洲一区二区av| 国产精品一区专区| 图片区小说区国产精品视频| 国产调教视频一区| 欧美一区二区精品在线| 97久久人人超碰| 国产麻豆9l精品三级站| 亚洲成av人片在线观看无码| 国产三级一区二区| 欧美精三区欧美精三区| 成人黄色电影在线| 精品一区二区av| 亚洲123区在线观看| 国产精品嫩草久久久久| 精品日韩一区二区| 在线播放国产精品二区一二区四区| jiyouzz国产精品久久| 97久久超碰精品国产| 久久先锋资源网|