tdb/tools/tdbdump.c

ソースコードを見る。

関数

static void print_data (TDB_DATA d)
static int traverse_fn (TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
static int dump_tdb (const char *fname, const char *keyname)
static void usage (void)
int main (int argc, char *argv[])


関数

static void print_data ( TDB_DATA  d  )  [static]

tdbdump.c35 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizelenprintf().

参照元 dump_tdb()print_arec()print_hexkey()traverse_fn().

00036 {
00037         unsigned char *p = (unsigned char *)d.dptr;
00038         int len = d.dsize;
00039         while (len--) {
00040                 if (isprint(*p) && !strchr("\"\\", *p)) {
00041                         fputc(*p, stdout);
00042                 } else {
00043                         printf("\\%02X", *p);
00044                 }
00045                 p++;
00046         }
00047 }

static int traverse_fn ( TDB_CONTEXT tdb,
TDB_DATA  key,
TDB_DATA  dbuf,
void *  state 
) [static]

tdbdump.c49 行で定義されています。

参照先 TDB_DATA::dsizeprint_data()printf().

00050 {
00051         printf("{\n");
00052         printf("key(%d) = \"", (int)key.dsize);
00053         print_data(key);
00054         printf("\"\n");
00055         printf("data(%d) = \"", (int)dbuf.dsize);
00056         print_data(dbuf);
00057         printf("\"\n");
00058         printf("}\n");
00059         return 0;
00060 }

static int dump_tdb ( const char *  fname,
const char *  keyname 
) [static]

tdbdump.c62 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizeprint_data()printf()tdbtdb_fetch()tdb_open()tdb_traverse()traverse_fn().

参照元 main().

00063 {
00064         TDB_CONTEXT *tdb;
00065         TDB_DATA key, value;
00066         
00067         tdb = tdb_open(fname, 0, 0, O_RDONLY, 0);
00068         if (!tdb) {
00069                 printf("Failed to open %s\n", fname);
00070                 return 1;
00071         }
00072 
00073         if (!keyname) {
00074                 tdb_traverse(tdb, traverse_fn, NULL);
00075         } else {
00076                 key.dptr = (char *)keyname;
00077                 key.dsize = strlen( keyname);
00078                 value = tdb_fetch(tdb, key);
00079                 if (!value.dptr) {
00080                         return 1;
00081                 } else {
00082                         print_data(value);
00083                         free(value.dptr);
00084                 }
00085         }
00086 
00087         return 0;
00088 }

static void usage ( void   )  [static]

tdbdump.c90 行で定義されています。

参照先 printf().

00091 {
00092         printf( "Usage: tdbdump [options] <filename>\n\n");
00093         printf( "   -h          this help message\n");
00094         printf( "   -k keyname  dumps value of keyname\n");
00095 }

int main ( int  argc,
char *  argv[] 
)

tdbdump.c97 行で定義されています。

参照先 cdump_tdb()optargoptindprintf()usage().

00098 {
00099         char *fname, *keyname=NULL;
00100         int c;
00101 
00102         if (argc < 2) {
00103                 printf("Usage: tdbdump <fname>\n");
00104                 exit(1);
00105         }
00106 
00107         while ((c = getopt( argc, argv, "hk:")) != -1) {
00108                 switch (c) {
00109                 case 'h':
00110                         usage();
00111                         exit( 0);
00112                 case 'k':
00113                         keyname = optarg;
00114                         break;
00115                 default:
00116                         usage();
00117                         exit( 1);
00118                 }
00119         }
00120 
00121         fname = argv[optind];
00122 
00123         return dump_tdb(fname, keyname);
00124 }


Sambaに対してSat Aug 29 21:24:31 2009に生成されました。  doxygen 1.4.7