📄 dpmgr.c
字号:
if(!strcmp(argv[i], "-kx")){ kx = TRUE; } else if(!strcmp(argv[i], "-ki")){ ki = TRUE; } else if(!strcmp(argv[i], "-ox")){ ox = TRUE; } else if(!strcmp(argv[i], "-n")){ nb = TRUE; } else if(!strcmp(argv[i], "-start")){ if(++i >= argc) usage(); start = atoi(argv[i]); } else if(!strcmp(argv[i], "-max")){ if(++i >= argc) usage(); max = atoi(argv[i]); } else { usage(); } } else if(!name){ name = argv[i]; } else if(!key){ key = argv[i]; } else { usage(); } } if(!name || !key || start < 0) usage(); if(kx){ kbuf = hextoobj(key, &ksiz); } else if(ki){ kbuf = dectoiobj(key, &ksiz); } else { kbuf = mystrdup(key); ksiz = -1; } if(kbuf){ rv = doget(name, kbuf, ksiz, start, max, ox, nb); } else { fprintf(stderr, "%s: out of memory\n", progname); rv = 1; } free(kbuf); return rv;}/* parse arguments of list command */int runlist(int argc, char **argv){ char *name; int i, ox, rv; name = NULL; ox = FALSE; for(i = 2; i < argc; i++){ if(!name && argv[i][0] == '-'){ if(!strcmp(argv[i], "-ox")){ ox = TRUE; } else { usage(); } } else if(!name){ name = argv[i]; } else { usage(); } } if(!name) usage(); rv = dolist(name, ox); return rv;}/* parse arguments of optimize command */int runoptimize(int argc, char **argv){ char *name; int i, bnum, align, rv; name = NULL; bnum = -1; align = ALIGNSIZ; for(i = 2; i < argc; i++){ if(!name && argv[i][0] == '-'){ if(!strcmp(argv[i], "-bnum")){ if(++i >= argc) usage(); bnum = atoi(argv[i]); } else if(!strcmp(argv[i], "-na")){ align = 0; } else { usage(); } } else if(!name){ name = argv[i]; } else { usage(); } } if(!name) usage(); rv = dooptimize(name, bnum, align); 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, int bnum){ DEPOT *depot; if(!(depot = dpopen(name, DP_OWRITER | DP_OCREAT | DP_OTRUNC, bnum))){ pdperror(name); return 1; } if(!dpclose(depot)){ 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, int align){ DEPOT *depot; if(!(depot = dpopen(name, DP_OWRITER, -1))){ pdperror(name); return 1; } if(align > 0 && !dpsetalign(depot, align)){ pdperror(name); dpclose(depot); return 1; } if(!dpput(depot, kbuf, ksiz, vbuf, vsiz, dmode)){ pdperror(name); dpclose(depot); return 1; } if(!dpclose(depot)){ pdperror(name); return 1; } return 0;}/* perform out command */int doout(const char *name, const char *kbuf, int ksiz){ DEPOT *depot; if(!(depot = dpopen(name, DP_OWRITER, -1))){ pdperror(name); return 1; } if(!dpout(depot, kbuf, ksiz)){ pdperror(name); dpclose(depot); return 1; } if(!dpclose(depot)){ pdperror(name); return 1; } return 0;}/* perform get command */int doget(const char *name, const char *kbuf, int ksiz, int start, int max, int ox, int nb){ DEPOT *depot; char *vbuf; int vsiz; if(!(depot = dpopen(name, DP_OREADER, -1))){ pdperror(name); return 1; } if(!(vbuf = dpget(depot, kbuf, ksiz, start, max, &vsiz))){ pdperror(name); dpclose(depot); return 1; } if(ox){ printobjhex(vbuf, vsiz); } else { printobj(vbuf, vsiz); } free(vbuf); if(!nb) putchar('\n'); if(!dpclose(depot)){ pdperror(name); return 1; } return 0;}/* perform list command */int dolist(const char *name, int ox){ DEPOT *depot; char *kbuf, *vbuf; int ksiz, vsiz; if(!(depot = dpopen(name, DP_OREADER, -1))){ pdperror(name); return 1; } dpiterinit(depot); while((kbuf = dpiternext(depot, &ksiz)) != NULL){ if(!(vbuf = dpget(depot, kbuf, ksiz, 0, -1, &vsiz))){ pdperror(name); 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(vbuf); free(kbuf); } if(!dpclose(depot)){ pdperror(name); return 1; } return 0;}/* perform optimize command */int dooptimize(const char *name, int bnum, int align){ DEPOT *depot; if(!(depot = dpopen(name, DP_OWRITER, -1))){ pdperror(name); return 1; } if(align > 0 && !dpsetalign(depot, align)){ pdperror(name); dpclose(depot); return 1; } if(!dpoptimize(depot, bnum)){ pdperror(name); dpclose(depot); return 1; } if(!dpclose(depot)){ pdperror(name); return 1; } return 0;}/* perform inform command */int doinform(const char *name){ DEPOT *depot; char *tmp; if(!(depot = dpopen(name, DP_OREADER, -1))){ pdperror(name); return 1; } tmp = dpname(depot); printf("name: %s\n", tmp ? tmp : "(null)"); free(tmp); printf("file size: %d\n", dpfsiz(depot)); printf("all buckets: %d\n", dpbnum(depot)); printf("used buckets: %d\n", dpbusenum(depot)); printf("records: %d\n", dprnum(depot)); printf("inode number: %d\n", dpinode(depot)); if(!dpclose(depot)){ pdperror(name); return 1; } return 0;}/* perform remove command */int doremove(const char *name){ if(!dpremove(name)){ pdperror(name); return 1; } return 0;}/* END OF FILE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -