📄 vlmgr.c
字号:
} else if(!strcmp(argv[i], "-ki")){ ki = TRUE; } else if(!strcmp(argv[i], "-ox")){ ox = TRUE; } else if(!strcmp(argv[i], "-top")){ if(++i >= argc) usage(); top = argv[i]; } else if(!strcmp(argv[i], "-bot")){ if(++i >= argc) usage(); bot = argv[i]; } else if(!strcmp(argv[i], "-gt")){ gt = TRUE; } else if(!strcmp(argv[i], "-lt")){ lt = TRUE; } else if(!strcmp(argv[i], "-max")){ if(++i >= argc) usage(); max = atoi(argv[i]); } else if(!strcmp(argv[i], "-desc")){ desc = TRUE; } else { usage(); } } else if(!name){ name = argv[i]; } else { usage(); } } if(!name) usage(); tbuf = NULL; bbuf = NULL; if(kx){ if(top) tbuf = hextoobj(top, &tsiz); if(bot) bbuf = hextoobj(bot, &bsiz); } else if(ki){ if(top) tbuf = dectoiobj(top, &tsiz); if(bot) bbuf = dectoiobj(bot, &bsiz); } else { if(top){ tbuf = mystrdup(top); tsiz = strlen(tbuf); } if(bot){ bbuf = mystrdup(bot); bsiz = strlen(bbuf); } } rv = dolist(name, tbuf, tsiz, bbuf, bsiz, ki ? VL_CMPINT : VL_CMPLEX, ki, ox, gt, lt, max, desc); free(tbuf); free(bbuf); return rv;}/* parse arguments of optimize command */int runoptimize(int argc, char **argv){ char *name; int i, rv; name = NULL; for(i = 2; i < argc; i++){ if(!name && argv[i][0] == '-'){ usage(); } else if(!name){ name = argv[i]; } else { usage(); } } if(!name) usage(); rv = dooptimize(name); return rv;}/* parse arguments of inform command */int runinform(int argc, char **argv){ char *name; int i, rv; name = NULL; for(i = 2; i < argc; i++){ if(!name && argv[i][0] == '-'){ usage(); } else if(!name){ name = argv[i]; } else { usage(); } } if(!name) usage(); rv = doinform(name); return rv;}/* parse arguments of remove command */int runremove(int argc, char **argv){ char *name; int i, rv; name = NULL; for(i = 2; i < argc; i++){ if(!name && argv[i][0] == '-'){ usage(); } else if(!name){ name = argv[i]; } else { usage(); } } if(!name) usage(); rv = doremove(name); return rv;}/* print an error message */void pdperror(const char *name){ fprintf(stderr, "%s: %s: %s\n", progname, name, dperrmsg(dpecode));}/* print an object */void printobj(const char *obj, int size){ int i; for(i = 0; i < size; i++){ putchar(obj[i]); }}/* print an object as a hexadecimal string */void printobjhex(const char *obj, int size){ int i; for(i = 0; i < size; i++){ printf("%s%02X", i > 0 ? " " : "", ((const unsigned char *)obj)[i]); }}/* perform create command */int docreate(const char *name){ VILLA *villa; if(!(villa = vlopen(name, VL_OWRITER | VL_OCREAT | VL_OTRUNC, VL_CMPLEX))){ pdperror(name); return 1; } if(!vlclose(villa)){ pdperror(name); return 1; } return 0;}/* perform put command */int doput(const char *name, const char *kbuf, int ksiz, const char *vbuf, int vsiz, int dmode, VLCFUNC cmp){ VILLA *villa; if(!(villa = vlopen(name, VL_OWRITER, cmp))){ pdperror(name); return 1; } if(!vlput(villa, kbuf, ksiz, vbuf, vsiz, dmode)){ pdperror(name); vlclose(villa); return 1; } if(!vlclose(villa)){ pdperror(name); return 1; } return 0;}/* perform out command */int doout(const char *name, const char *kbuf, int ksiz, VLCFUNC cmp, int lb){ VILLA *villa; if(!(villa = vlopen(name, VL_OWRITER, cmp))){ pdperror(name); return 1; } if(lb){ if(!vloutlist(villa, kbuf, ksiz)){ pdperror(name); vlclose(villa); return 1; } } else { if(!vlout(villa, kbuf, ksiz)){ pdperror(name); vlclose(villa); return 1; } } if(!vlclose(villa)){ pdperror(name); return 1; } return 0;}/* perform get command */int doget(const char *name, const char *kbuf, int ksiz, VLCFUNC cmp, int lb, int ox, int nb){ VILLA *villa; CBLIST *vals; char *vbuf; int vsiz; if(!(villa = vlopen(name, VL_OREADER, cmp))){ pdperror(name); return 1; } if(lb){ if(!(vals = vlgetlist(villa, kbuf, ksiz))){ pdperror(name); vlclose(villa); return 1; } while((vbuf = cblistshift(vals, &vsiz)) != NULL){ if(ox){ printobjhex(vbuf, vsiz); } else { printobj(vbuf, vsiz); } free(vbuf); putchar('\n'); } cblistclose(vals); } else { if(!(vbuf = vlget(villa, kbuf, ksiz, &vsiz))){ pdperror(name); vlclose(villa); return 1; } if(ox){ printobjhex(vbuf, vsiz); } else { printobj(vbuf, vsiz); } free(vbuf); if(!nb) putchar('\n'); } if(!vlclose(villa)){ pdperror(name); return 1; } return 0;}/* perform list command */int dolist(const char *name, const char *tbuf, int tsiz, const char *bbuf, int bsiz, VLCFUNC cmp, int ki, int ox, int gt, int lt, int max, int desc){ VILLA *villa; char *kbuf, *vbuf; int ksiz, vsiz, show, rv; if(!(villa = vlopen(name, VL_OREADER, cmp))){ pdperror(name); return 1; } if(max < 0) max = vlrnum(villa); if(desc){ if(bbuf){ vlcurjump(villa, bbuf, bsiz, VL_JBACKWARD); } else { vlcurlast(villa); } show = 0; while(show < max && (kbuf = vlcurkey(villa, &ksiz)) != NULL){ if(bbuf && lt){ if(cmp(kbuf, ksiz, bbuf, bsiz) == 0){ free(kbuf); vlcurnext(villa); continue; } lt = FALSE; } if(tbuf){ rv = cmp(kbuf, ksiz, tbuf, tsiz); if(rv < 0 || (gt && rv == 0)){ free(kbuf); break; } } if(!(vbuf = vlcurval(villa, &vsiz))){ free(kbuf); break; } if(ox){ printobjhex(kbuf, ksiz); putchar('\t'); printobjhex(vbuf, vsiz); } else { printobj(kbuf, ksiz); putchar('\t'); printobj(vbuf, vsiz); } putchar('\n'); free(kbuf); free(vbuf); show++; vlcurprev(villa); } } else { if(tbuf){ vlcurjump(villa, tbuf, tsiz, VL_JFORWARD); } else { vlcurfirst(villa); } show = 0; while(show < max && (kbuf = vlcurkey(villa, &ksiz)) != NULL){ if(tbuf && gt){ if(cmp(kbuf, ksiz, tbuf, tsiz) == 0){ free(kbuf); vlcurnext(villa); continue; } gt = FALSE; } if(bbuf){ rv = cmp(kbuf, ksiz, bbuf, bsiz); if(rv > 0 || (lt && rv == 0)){ free(kbuf); break; } } if(!(vbuf = vlcurval(villa, &vsiz))){ free(kbuf); break; } if(ox){ printobjhex(kbuf, ksiz); putchar('\t'); printobjhex(vbuf, vsiz); } else { printobj(kbuf, ksiz); putchar('\t'); printobj(vbuf, vsiz); } putchar('\n'); free(kbuf); free(vbuf); show++; vlcurnext(villa); } } if(!vlclose(villa)){ pdperror(name); return 1; } return 0;}/* perform optimize command */int dooptimize(const char *name){ VILLA *villa; if(!(villa = vlopen(name, VL_OWRITER, VL_CMPLEX))){ pdperror(name); return 1; } if(!vloptimize(villa)){ pdperror(name); vlclose(villa); return 1; } if(!vlclose(villa)){ pdperror(name); return 1; } return 0;}/* perform inform command */int doinform(const char *name){ VILLA *villa; char *tmp; if(!(villa = vlopen(name, VL_OREADER, VL_CMPLEX))){ pdperror(name); return 1; } tmp = vlname(villa); printf("name: %s\n", tmp ? tmp : "(null)"); free(tmp); printf("file size: %d\n", vlfsiz(villa)); printf("leaf nodes: %d\n", vllnum(villa)); printf("non-leaf nodes: %d\n", vlnnum(villa)); printf("records: %d\n", vlrnum(villa)); printf("inode number: %d\n", vlinode(villa)); if(!vlclose(villa)){ pdperror(name); return 1; } return 0;}/* perform remove command */int doremove(const char *name){ if(!vlremove(name)){ pdperror(name); return 1; } return 0;}/* END OF FILE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -