📄 makedb.c
字号:
/* pathalias -- by steve bellovin, as told to peter honeyman */#ifndef lintstatic char *sccsid = "@(#)makedb.c 9.1 87/10/04";#endif /* lint */#include <stdio.h>#include "config.h"typedef struct { char *dptr; int dsize;} datum;char *Ofile = ALIASDB, *ProgName;#define USAGE "%s [-o dbmname] [-a] [file ...]\n"main(argc, argv) char *argv[];{ char *ofptr; int c, append = 0; extern int optind; extern char *optarg; ProgName = argv[0]; while ((c = getopt(argc, argv, "o:a")) != EOF) switch(c) { case 'o': /* dbm output file */ Ofile = optarg; break; case 'a': /* append mode */ append++; break; default: fprintf(stderr, USAGE, ProgName); exit(1); break; } if ((ofptr = rindex(Ofile, '/')) != 0) ofptr++; else ofptr = Ofile; if (strlen(ofptr) > 10) { ofptr[10] = 0; fprintf(stderr, "%s: using %s for dbm output\n", ProgName, Ofile); } if (append == 0 && dbfile(Ofile) != 0) { perror_(Ofile); exit(1); } if (dbminit(Ofile) < 0) { perror_(Ofile); exit(1); } if (optind == argc) makedb((char *) 0); else for ( ; optind < argc; optind++) makedb(argv[optind]); exit(0);}dbfile(dbf) char *dbf;{ return (dbcreat(dbf, "dir") != 0 || dbcreat(dbf, "pag") != 0);}dbcreat(dbf, suffix) char *dbf, *suffix;{ char buf[BUFSIZ]; int fd; (void) sprintf(buf, "%s.%s", dbf, suffix); if ((fd = creat(buf, 0666)) < 0) return(-1); (void) close(fd); return(0);}makedb(ifile) char *ifile;{ char line[BUFSIZ]; datum key, val; if (ifile && (freopen(ifile, "r", stdin) == NULL)) { perror_(ifile); return; } /* * keys and values are 0 terminated. this wastes time and (disk) space, * but does lend simplicity and backwards compatibility. */ key.dptr = line; while (fgets(line, sizeof(line), stdin) != NULL) { char *op, *end; end = line + strlen(line); end[-1] = 0; /* kill newline, stuff null terminator */ op = index(line, '\t'); if (op != 0) { *op++ = 0; key.dsize = op - line; /* 0 terminated */ val.dptr = op; val.dsize = end - op; /* 0 terminated */ } else { key.dsize = end - line; /* 0 terminated */ val.dptr = "\0"; /* why must i do this? */ val.dsize = 1; } if (store(key, val) < 0) perror_(Ofile); }}perror_(str) char *str;{ fprintf(stderr, "%s: ", ProgName); perror(str);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -