tdb/tools/tdbtool.c

ソースコードを見る。

データ構造

struct  COMMAND_TABLE
struct  connections_key
struct  connections_data

列挙型

enum  commands {
  CMD_CREATE_TDB, CMD_OPEN_TDB, CMD_ERASE,
  CMD_DUMP, CMD_CDUMP, CMD_INSERT,
  CMD_MOVE, CMD_STORE, CMD_SHOW,
  CMD_KEYS, CMD_HEXKEYS, CMD_DELETE,
  CMD_LIST_HASH_FREE, CMD_LIST_FREE, CMD_INFO,
  CMD_FIRST, CMD_NEXT, CMD_SYSTEM,
  CMD_QUIT, CMD_HELP
}

関数

static int do_command (void)
static int print_crec (TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
static int print_arec (TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
static int print_rec (TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
static int print_key (TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
static int print_hexkey (TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
static void print_asc (const char *buf, int len)
static void print_data (const char *buf, int len)
static void help (void)
static void terror (const char *why)
static void create_tdb (char *tdbname)
static void open_tdb (char *tdbname)
static void insert_tdb (char *keyname, size_t keylen, char *data, size_t datalen)
static void store_tdb (char *keyname, size_t keylen, char *data, size_t datalen)
static void show_tdb (char *keyname, size_t keylen)
static void delete_tdb (char *keyname, size_t keylen)
static void move_rec (char *keyname, size_t keylen, char *tdbname)
static int print_conn_key (TDB_DATA key)
static int print_conn_data (TDB_DATA dbuf)
static int traverse_fn (TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
static void info_tdb (void)
static char * tdb_getline (const char *prompt)
static int do_delete_fn (TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
static void first_record (TDB_CONTEXT *the_tdb, TDB_DATA *pkey)
static void next_record (TDB_CONTEXT *the_tdb, TDB_DATA *pkey)
static char * convert_string (char *instring, size_t *sizep)
int main (int argc, char *argv[])

変数

char * cmdname
char * arg1
char * arg2
size_t arg1len
size_t arg2len
int do_connections
int bIterate = 0
char * line
TDB_DATA iterate_kbuf
char cmdline [1024]
COMMAND_TABLE cmd_table []
static TDB_CONTEXTtdb
static int total_bytes


列挙型

enum commands

列挙型の値:
CMD_CREATE_TDB 
CMD_OPEN_TDB 
CMD_ERASE 
CMD_DUMP 
CMD_CDUMP 
CMD_INSERT 
CMD_MOVE 
CMD_STORE 
CMD_SHOW 
CMD_KEYS 
CMD_HEXKEYS 
CMD_DELETE 
CMD_LIST_HASH_FREE 
CMD_LIST_FREE 
CMD_INFO 
CMD_FIRST 
CMD_NEXT 
CMD_SYSTEM 
CMD_QUIT 
CMD_HELP 

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

00049               {
00050         CMD_CREATE_TDB,
00051         CMD_OPEN_TDB,
00052         CMD_ERASE,
00053         CMD_DUMP,
00054         CMD_CDUMP,
00055         CMD_INSERT,
00056         CMD_MOVE,
00057         CMD_STORE,
00058         CMD_SHOW,
00059         CMD_KEYS,
00060         CMD_HEXKEYS,
00061         CMD_DELETE,
00062         CMD_LIST_HASH_FREE,
00063         CMD_LIST_FREE,
00064         CMD_INFO,
00065         CMD_FIRST,
00066         CMD_NEXT,
00067         CMD_SYSTEM,
00068         CMD_QUIT,
00069         CMD_HELP
00070 };


関数

static int do_command ( void   )  [static]

tdbtool.c489 行で定義されています。

参照先 arg1arg1lenarg2arg2lenbIterateCOMMAND_TABLE::cmdCMD_CDUMPCMD_CREATE_TDBCMD_DELETECMD_DUMPCMD_ERASECMD_FIRSTCMD_HELPCMD_HEXKEYSCMD_INFOCMD_INSERTCMD_KEYSCMD_LIST_FREECMD_LIST_HASH_FREECMD_MOVECMD_NEXTCMD_OPEN_TDBCMD_QUITCMD_SHOWCMD_STORECMD_SYSTEMcmd_tablecmdnamecreate_tdb()delete_tdb()do_connectionsdo_delete_fn()first_record()helpinfo_tdb()insert_tdb()iterate_kbufmove_rec()COMMAND_TABLE::namenext_record()open_tdb()print_hexkey()print_key()print_rec()show_tdb()store_tdb()tdbtdb_dump_all()tdb_printfreelist()tdb_traverse()terror().

参照元 main().

00490 {
00491         COMMAND_TABLE *ctp = cmd_table;
00492         enum commands mycmd = CMD_HELP;
00493         int cmd_len;
00494 
00495         do_connections = 0;
00496 
00497         if (cmdname && strlen(cmdname) == 0) {
00498             mycmd = CMD_NEXT;
00499         } else {
00500             while (ctp->name) {
00501                 cmd_len = strlen(ctp->name);
00502                 if (strncmp(ctp->name,cmdname,cmd_len) == 0) {
00503                         mycmd = ctp->cmd;
00504                         break;
00505                 }
00506                 ctp++;
00507             }
00508         }
00509 
00510         switch (mycmd) {
00511         case CMD_CREATE_TDB:
00512             bIterate = 0;
00513             create_tdb(arg1);
00514             return 0;
00515         case CMD_OPEN_TDB:
00516             bIterate = 0;
00517             open_tdb(arg1);
00518             return 0;
00519         case CMD_SYSTEM:
00520             /* Shell command */
00521             system(arg1);
00522             return 0;
00523         case CMD_QUIT:
00524             return 1;
00525         default:
00526             /* all the rest require a open database */
00527             if (!tdb) {
00528                 bIterate = 0;
00529                 terror("database not open");
00530                 help();
00531                 return 0;
00532             }
00533             switch (mycmd) {
00534             case CMD_ERASE:
00535                 bIterate = 0;
00536                 tdb_traverse(tdb, do_delete_fn, NULL);
00537                 return 0;
00538             case CMD_DUMP:
00539                 bIterate = 0;
00540                 tdb_traverse(tdb, print_rec, NULL);
00541                 return 0;
00542             case CMD_CDUMP:
00543                 do_connections = 1;
00544                 bIterate = 0;
00545                 tdb_traverse(tdb, print_rec, NULL);
00546                 return 0;
00547             case CMD_INSERT:
00548                 bIterate = 0;
00549                 insert_tdb(arg1, arg1len,arg2,arg2len);
00550                 return 0;
00551             case CMD_MOVE:
00552                 bIterate = 0;
00553                 move_rec(arg1,arg1len,arg2);
00554                 return 0;
00555             case CMD_STORE:
00556                 bIterate = 0;
00557                 store_tdb(arg1,arg1len,arg2,arg2len);
00558                 return 0;
00559             case CMD_SHOW:
00560                 bIterate = 0;
00561                 show_tdb(arg1, arg1len);
00562                 return 0;
00563             case CMD_KEYS:
00564                 tdb_traverse(tdb, print_key, NULL);
00565                 return 0;
00566             case CMD_HEXKEYS:
00567                 tdb_traverse(tdb, print_hexkey, NULL);
00568                 return 0;
00569             case CMD_DELETE:
00570                 bIterate = 0;
00571                 delete_tdb(arg1,arg1len);
00572                 return 0;
00573             case CMD_LIST_HASH_FREE:
00574                 tdb_dump_all(tdb);
00575                 return 0;
00576             case CMD_LIST_FREE:
00577                 tdb_printfreelist(tdb);
00578                 return 0;
00579             case CMD_INFO:
00580                 info_tdb();
00581                 return 0;
00582             case CMD_FIRST:
00583                 bIterate = 1;
00584                 first_record(tdb, &iterate_kbuf);
00585                 return 0;
00586             case CMD_NEXT:
00587                if (bIterate)
00588                   next_record(tdb, &iterate_kbuf);
00589                 return 0;
00590             case CMD_HELP:
00591                 help();
00592                 return 0;
00593             case CMD_CREATE_TDB:
00594             case CMD_OPEN_TDB:
00595             case CMD_SYSTEM:
00596             case CMD_QUIT:
00597                 /*
00598                  * unhandled commands.  cases included here to avoid compiler
00599                  * warnings.
00600                  */
00601                 return 0;
00602             }
00603         }
00604 
00605         return 0;
00606 }

static int print_crec ( TDB_CONTEXT the_tdb,
TDB_DATA  key,
TDB_DATA  dbuf,
void *  state 
) [static]

tdbtool.c397 行で定義されています。

参照先 print_conn_data()print_conn_key().

参照元 print_rec().

00398 {
00399         print_conn_key(key);
00400         print_conn_data(dbuf);
00401         return 0;
00402 }

static int print_arec ( TDB_CONTEXT the_tdb,
TDB_DATA  key,
TDB_DATA  dbuf,
void *  state 
) [static]

tdbtool.c404 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizeprint_asc()print_data()printf().

参照元 print_rec().

00405 {
00406         printf("\nkey %d bytes\n", (int)key.dsize);
00407         print_asc(key.dptr, key.dsize);
00408         printf("\ndata %d bytes\n", (int)dbuf.dsize);
00409         print_data(dbuf.dptr, dbuf.dsize);
00410         return 0;
00411 }

static int print_rec ( TDB_CONTEXT the_tdb,
TDB_DATA  key,
TDB_DATA  dbuf,
void *  state 
) [static]

tdbtool.c388 行で定義されています。

参照先 do_connectionsTDB_DATA::dsizeprint_arec()print_crec().

参照元 do_command()first_record()move_rec()next_record()show_tdb()store_tdb().

00389 {
00390         if (do_connections && (dbuf.dsize == sizeof(connections_data)))
00391                 print_crec(the_tdb, key, dbuf, state);
00392         else
00393                 print_arec(the_tdb, key, dbuf, state);
00394         return 0;
00395 }

static int print_key ( TDB_CONTEXT the_tdb,
TDB_DATA  key,
TDB_DATA  dbuf,
void *  state 
) [static]

tdbtool.c413 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizeprint_asc()printf().

00414 {
00415         printf("key %d bytes: ", (int)key.dsize);
00416         print_asc(key.dptr, key.dsize);
00417         printf("\n");
00418         return 0;
00419 }

static int print_hexkey ( TDB_CONTEXT the_tdb,
TDB_DATA  key,
TDB_DATA  dbuf,
void *  state 
) [static]

tdbtool.c421 行で定義されています。

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

参照元 do_command().

00422 {
00423         printf("key %d bytes\n", (int)key.dsize);
00424         print_data(key.dptr, key.dsize);
00425         printf("\n");
00426         return 0;
00427 }

static void print_asc ( const char *  buf,
int  len 
) [static]

tdbtool.c134 行で定義されています。

参照先 printf().

00135 {
00136         int i;
00137 
00138         /* We're probably printing ASCII strings so don't try to display
00139            the trailing NULL character. */
00140 
00141         if (buf[len - 1] == 0)
00142                 len--;
00143 
00144         for (i=0;i<len;i++)
00145                 printf("%c",isprint(buf[i])?buf[i]:'.');
00146 }

static void print_data ( const char *  buf,
int  len 
) [static]

tdbtool.c148 行で定義されています。

参照先 print_asc()printf().

00149 {
00150         int i=0;
00151         if (len<=0) return;
00152         printf("[%03X] ",i);
00153         for (i=0;i<len;) {
00154                 printf("%02X ",(int)((unsigned char)buf[i]));
00155                 i++;
00156                 if (i%8 == 0) printf(" ");
00157                 if (i%16 == 0) {      
00158                         print_asc(&buf[i-16],8); printf(" ");
00159                         print_asc(&buf[i-8],8); printf("\n");
00160                         if (i<len) printf("[%03X] ",i);
00161                 }
00162         }
00163         if (i%16) {
00164                 int n;
00165                 
00166                 n = 16 - (i%16);
00167                 printf(" ");
00168                 if (n>8) printf(" ");
00169                 while (n--) printf("   ");
00170                 
00171                 n = i%16;
00172                 if (n > 8) n = 8;
00173                 print_asc(&buf[i-(i%16)],n); printf(" ");
00174                 n = (i%16) - n;
00175                 if (n>0) print_asc(&buf[i-n],n); 
00176                 printf("\n");    
00177         }
00178 }

static void help ( void   )  [static]

tdbtool.c180 行で定義されています。

参照先 printf().

00181 {
00182         printf("\n"
00183 "tdbtool: \n"
00184 "  create    dbname     : create a database\n"
00185 "  open      dbname     : open an existing database\n"
00186 "  erase                : erase the database\n"
00187 "  dump                 : dump the database as strings\n"
00188 "  cdump                : dump the database as connection records\n"
00189 "  keys                 : dump the database keys as strings\n"
00190 "  hexkeys              : dump the database keys as hex values\n"
00191 "  info                 : print summary info about the database\n"
00192 "  insert    key  data  : insert a record\n"
00193 "  move      key  file  : move a record to a destination tdb\n"
00194 "  store     key  data  : store a record (replace)\n"
00195 "  show      key        : show a record by key\n"
00196 "  delete    key        : delete a record by key\n"
00197 "  list                 : print the database hash table and freelist\n"
00198 "  free                 : print the database freelist\n"
00199 "  ! command            : execute system command\n"             
00200 "  1 | first            : print the first record\n"
00201 "  n | next             : print the next record\n"
00202 "  q | quit             : terminate\n"
00203 "  \\n                   : repeat 'next' command\n"
00204 "\n");
00205 }

static void terror ( const char *  why  )  [static]

tdbtool.c207 行で定義されています。

参照先 printf().

参照元 delete_tdb()do_command()first_record()insert_tdb()move_rec()next_record()show_tdb()store_tdb().

00208 {
00209         printf("%s\n", why);
00210 }

static void create_tdb ( char *  tdbname  )  [static]

tdbtool.c212 行で定義されています。

参照先 errnoprintf()strerror()tdbtdb_close()tdb_open().

参照元 do_command().

00213 {
00214         if (tdb) tdb_close(tdb);
00215         tdb = tdb_open(tdbname, 0, TDB_CLEAR_IF_FIRST,
00216                        O_RDWR | O_CREAT | O_TRUNC, 0600);
00217         if (!tdb) {
00218                 printf("Could not create %s: %s\n", tdbname, strerror(errno));
00219         }
00220 }

static void open_tdb ( char *  tdbname  )  [static]

tdbtool.c222 行で定義されています。

参照先 errnoprintf()strerror()tdbtdb_close()tdb_open().

参照元 do_command().

00223 {
00224         if (tdb) tdb_close(tdb);
00225         tdb = tdb_open(tdbname, 0, 0, O_RDWR, 0600);
00226         if (!tdb) {
00227                 printf("Could not open %s: %s\n", tdbname, strerror(errno));
00228         }
00229 }

static void insert_tdb ( char *  keyname,
size_t  keylen,
char *  data,
size_t  datalen 
) [static]

tdbtool.c231 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizetdbtdb_store()terror().

参照元 do_command().

00232 {
00233         TDB_DATA key, dbuf;
00234 
00235         if ((keyname == NULL) || (keylen == 0)) {
00236                 terror("need key");
00237                 return;
00238         }
00239 
00240         key.dptr = keyname;
00241         key.dsize = keylen;
00242         dbuf.dptr = data;
00243         dbuf.dsize = datalen;
00244 
00245         if (tdb_store(tdb, key, dbuf, TDB_INSERT) == -1) {
00246                 terror("insert failed");
00247         }
00248 }

static void store_tdb ( char *  keyname,
size_t  keylen,
char *  data,
size_t  datalen 
) [static]

tdbtool.c250 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizeprint_rec()printf()tdbtdb_store()terror().

参照元 do_command().

00251 {
00252         TDB_DATA key, dbuf;
00253 
00254         if ((keyname == NULL) || (keylen == 0)) {
00255                 terror("need key");
00256                 return;
00257         }
00258 
00259         if ((data == NULL) || (datalen == 0)) {
00260                 terror("need data");
00261                 return;
00262         }
00263 
00264         key.dptr = keyname;
00265         key.dsize = keylen;
00266         dbuf.dptr = data;
00267         dbuf.dsize = datalen;
00268 
00269         printf("Storing key:\n");
00270         print_rec(tdb, key, dbuf, NULL);
00271 
00272         if (tdb_store(tdb, key, dbuf, TDB_REPLACE) == -1) {
00273                 terror("store failed");
00274         }
00275 }

static void show_tdb ( char *  keyname,
size_t  keylen 
) [static]

tdbtool.c277 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizeprint_rec()tdbtdb_fetch()terror().

参照元 do_command().

00278 {
00279         TDB_DATA key, dbuf;
00280 
00281         if ((keyname == NULL) || (keylen == 0)) {
00282                 terror("need key");
00283                 return;
00284         }
00285 
00286         key.dptr = keyname;
00287         key.dsize = keylen;
00288 
00289         dbuf = tdb_fetch(tdb, key);
00290         if (!dbuf.dptr) {
00291             terror("fetch failed");
00292             return;
00293         }
00294         
00295         print_rec(tdb, key, dbuf, NULL);
00296         
00297         free( dbuf.dptr );
00298         
00299         return;
00300 }

static void delete_tdb ( char *  keyname,
size_t  keylen 
) [static]

tdbtool.c302 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizetdbtdb_delete()terror().

参照元 do_command().

00303 {
00304         TDB_DATA key;
00305 
00306         if ((keyname == NULL) || (keylen == 0)) {
00307                 terror("need key");
00308                 return;
00309         }
00310 
00311         key.dptr = keyname;
00312         key.dsize = keylen;
00313 
00314         if (tdb_delete(tdb, key) != 0) {
00315                 terror("delete failed");
00316         }
00317 }

static void move_rec ( char *  keyname,
size_t  keylen,
char *  tdbname 
) [static]

tdbtool.c319 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizeprint_rec()printf()tdbtdb_close()tdb_fetch()tdb_open()tdb_store()terror().

参照元 do_command().

00320 {
00321         TDB_DATA key, dbuf;
00322         TDB_CONTEXT *dst_tdb;
00323 
00324         if ((keyname == NULL) || (keylen == 0)) {
00325                 terror("need key");
00326                 return;
00327         }
00328 
00329         if ( !tdbname ) {
00330                 terror("need destination tdb name");
00331                 return;
00332         }
00333 
00334         key.dptr = keyname;
00335         key.dsize = keylen;
00336 
00337         dbuf = tdb_fetch(tdb, key);
00338         if (!dbuf.dptr) {
00339                 terror("fetch failed");
00340                 return;
00341         }
00342         
00343         print_rec(tdb, key, dbuf, NULL);
00344         
00345         dst_tdb = tdb_open(tdbname, 0, 0, O_RDWR, 0600);
00346         if ( !dst_tdb ) {
00347                 terror("unable to open destination tdb");
00348                 return;
00349         }
00350         
00351         if ( tdb_store( dst_tdb, key, dbuf, TDB_REPLACE ) == -1 ) {
00352                 terror("failed to move record");
00353         }
00354         else
00355                 printf("record moved\n");
00356         
00357         tdb_close( dst_tdb );
00358         
00359         return;
00360 }

static int print_conn_key ( TDB_DATA  key  )  [static]

tdbtool.c362 行で定義されています。

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

参照元 print_crec().

00363 {
00364         printf( "\nkey %d bytes\n", (int)key.dsize);
00365         printf( "pid    =%5d   ", ((connections_key*)key.dptr)->pid);
00366         printf( "cnum   =%10d  ", ((connections_key*)key.dptr)->cnum);
00367         printf( "name   =[%s]\n", ((connections_key*)key.dptr)->name);
00368         return 0;
00369 }

static int print_conn_data ( TDB_DATA  dbuf  )  [static]

tdbtool.c371 行で定義されています。

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

参照元 print_crec().

00372 {
00373         printf( "\ndata %d bytes\n", (int)dbuf.dsize);
00374         printf( "pid    =%5d   ", ((connections_data*)dbuf.dptr)->pid);
00375         printf( "cnum   =%10d  ", ((connections_data*)dbuf.dptr)->cnum);
00376         printf( "name   =[%s]\n", ((connections_data*)dbuf.dptr)->servicename);
00377         
00378         printf( "uid    =%5d   ",  ((connections_data*)dbuf.dptr)->uid);
00379         printf( "addr   =[%s]\n", ((connections_data*)dbuf.dptr)->addr);
00380         printf( "gid    =%5d   ",  ((connections_data*)dbuf.dptr)->gid);
00381         printf( "machine=[%s]\n", ((connections_data*)dbuf.dptr)->machine);
00382         printf( "start  = %s\n",   ctime(&((connections_data*)dbuf.dptr)->start));
00383         printf( "magic  = 0x%x ",   ((connections_data*)dbuf.dptr)->magic);
00384         printf( "flags  = 0x%x\n",  ((connections_data*)dbuf.dptr)->bcast_msg_flags);
00385         return 0;
00386 }

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

tdbtool.c431 行で定義されています。

参照先 TDB_DATA::dsizetotal_bytes.

00432 {
00433         total_bytes += dbuf.dsize;
00434         return 0;
00435 }

static void info_tdb ( void   )  [static]

tdbtool.c437 行で定義されています。

参照先 printf()tdbtdb_errorstr()tdb_traverse()total_bytestraverse_fn().

参照元 do_command().

00438 {
00439         int count;
00440         total_bytes = 0;
00441         if ((count = tdb_traverse(tdb, traverse_fn, NULL)) == -1)
00442                 printf("Error = %s\n", tdb_errorstr(tdb));
00443         else
00444                 printf("%d records totalling %d bytes\n", count, total_bytes);
00445 }

static char* tdb_getline ( const char *  prompt  )  [static]

tdbtool.c447 行で定義されています。

参照元 main().

00448 {
00449         static char thisline[1024];
00450         char *p;
00451         fputs(prompt, stdout);
00452         thisline[0] = 0;
00453         p = fgets(thisline, sizeof(thisline)-1, stdin);
00454         if (p) p = strchr(p, '\n');
00455         if (p) *p = 0;
00456         return p?thisline:NULL;
00457 }

static int do_delete_fn ( TDB_CONTEXT the_tdb,
TDB_DATA  key,
TDB_DATA  dbuf,
void *  state 
) [static]

tdbtool.c459 行で定義されています。

参照先 tdb_delete().

参照元 do_command().

00461 {
00462     return tdb_delete(the_tdb, key);
00463 }

static void first_record ( TDB_CONTEXT the_tdb,
TDB_DATA pkey 
) [static]

tdbtool.c465 行で定義されています。

参照先 TDB_DATA::dptrprint_rec()tdb_fetch()tdb_firstkey()terror().

参照元 do_command().

00466 {
00467         TDB_DATA dbuf;
00468         *pkey = tdb_firstkey(the_tdb);
00469         
00470         dbuf = tdb_fetch(the_tdb, *pkey);
00471         if (!dbuf.dptr) terror("fetch failed");
00472         else {
00473                 print_rec(the_tdb, *pkey, dbuf, NULL);
00474         }
00475 }

static void next_record ( TDB_CONTEXT the_tdb,
TDB_DATA pkey 
) [static]

tdbtool.c477 行で定義されています。

参照先 TDB_DATA::dptrprint_rec()tdb_fetch()tdb_nextkey()terror().

00478 {
00479         TDB_DATA dbuf;
00480         *pkey = tdb_nextkey(the_tdb, *pkey);
00481         
00482         dbuf = tdb_fetch(the_tdb, *pkey);
00483         if (!dbuf.dptr) 
00484                 terror("fetch failed");
00485         else
00486                 print_rec(the_tdb, *pkey, dbuf, NULL);
00487 }

static char* convert_string ( char *  instring,
size_t *  sizep 
) [static]

tdbtool.c608 行で定義されています。

00609 {
00610     size_t length = 0;
00611     char *outp, *inp;
00612     char temp[3];
00613     
00614 
00615     outp = inp = instring;
00616 
00617     while (*inp) {
00618         if (*inp == '\\') {
00619             inp++;
00620             if (*inp && strchr("0123456789abcdefABCDEF",(int)*inp)) {
00621                 temp[0] = *inp++;
00622                 temp[1] = '\0';
00623                 if (*inp && strchr("0123456789abcdefABCDEF",(int)*inp)) {
00624                     temp[1] = *inp++;
00625                     temp[2] = '\0';
00626                 }
00627                 *outp++ = (char)strtol((const char *)temp,NULL,16);
00628             } else {
00629                 *outp++ = *inp++;
00630             }
00631         } else {
00632             *outp++ = *inp++;
00633         }
00634         length++;
00635     }
00636     *sizep = length;
00637     return instring;
00638 }

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

tdbtool.c640 行で定義されています。

参照先 arg1arg1lenarg2arg2lencmdnameconvert_string()do_command()tdbtdb_close()tdb_getline().

00641 {
00642     cmdname = (char *) "";
00643     arg1 = NULL;
00644     arg1len = 0;
00645     arg2 = NULL;
00646     arg2len = 0;
00647 
00648     if (argv[1]) {
00649         cmdname = (char *) "open";
00650         arg1 = argv[1];
00651         do_command();
00652         cmdname = (char *) "";
00653         arg1 = NULL;
00654     }
00655 
00656     switch (argc) {
00657         case 1:
00658         case 2:
00659             /* Interactive mode */
00660             while ((cmdname = tdb_getline("tdb> "))) {
00661                 arg2 = arg1 = NULL;
00662                 if ((arg1 = strchr((const char *)cmdname,' ')) != NULL) {
00663                     arg1++;
00664                     arg2 = arg1;
00665                     while (*arg2) {
00666                         if (*arg2 == ' ') {
00667                             *arg2++ = '\0';
00668                             break;
00669                         }
00670                         if ((*arg2++ == '\\') && (*arg2 == ' ')) {
00671                             arg2++;
00672                         }
00673                     }
00674                 }
00675                 if (arg1) arg1 = convert_string(arg1,&arg1len);
00676                 if (arg2) arg2 = convert_string(arg2,&arg2len);
00677                 if (do_command()) break;
00678             }
00679             break;
00680         case 5:
00681             arg2 = convert_string(argv[4],&arg2len);
00682         case 4:
00683             arg1 = convert_string(argv[3],&arg1len);
00684         case 3:
00685             cmdname = argv[2];
00686         default:
00687             do_command();
00688             break;
00689     }
00690 
00691     if (tdb) tdb_close(tdb);
00692 
00693     return 0;
00694 }


変数

char* cmdname

tdbtool.c41 行で定義されています。

参照元 api_RNetShareAdd()do_command()main().

char * arg1

tdbtool.c41 行で定義されています。

参照元 do_command()main().

char * arg2

tdbtool.c41 行で定義されています。

参照元 do_command()main().

size_t arg1len

tdbtool.c42 行で定義されています。

参照元 do_command()main().

size_t arg2len

tdbtool.c42 行で定義されています。

参照元 do_command()main().

int do_connections

tdbtool.c43 行で定義されています。

参照元 do_command()print_rec().

int bIterate = 0

tdbtool.c44 行で定義されています。

参照元 do_command().

char* line

tdbtool.c45 行で定義されています。

参照元 aix_cache_reload()cgi_load_variables()cgi_setup()cgi_setup_error()cmd_history()command_get_quota()command_set_quota()complete_sync()findpty()get_user_tokens_from_file()getlmhostsent()hexdump()init_unistr_array()initialise_wins()main()nb_alarm()net_idmap_restore()net_rpc_shell()poptConfigFileToString()process_command_string()process_stdin()profile_separator()run_netbench()sigsegv()smb_readline_replacement()sys_disk_free()unparse_afs_acl().

TDB_DATA iterate_kbuf

tdbtool.c46 行で定義されています。

参照元 do_command().

char cmdline[1024]

tdbtool.c47 行で定義されています。

COMMAND_TABLE cmd_table[]

初期値:

 {
        {"create",      CMD_CREATE_TDB},
        {"open",        CMD_OPEN_TDB},
        {"erase",       CMD_ERASE},
        {"dump",        CMD_DUMP},
        {"cdump",       CMD_CDUMP},
        {"insert",      CMD_INSERT},
        {"move",        CMD_MOVE},
        {"store",       CMD_STORE},
        {"show",        CMD_SHOW},
        {"keys",        CMD_KEYS},
        {"hexkeys",     CMD_HEXKEYS},
        {"delete",      CMD_DELETE},
        {"list",        CMD_LIST_HASH_FREE},
        {"free",        CMD_LIST_FREE},
        {"info",        CMD_INFO},
        {"first",       CMD_FIRST},
        {"1",           CMD_FIRST},
        {"next",        CMD_NEXT},
        {"n",           CMD_NEXT},
        {"quit",        CMD_QUIT},
        {"q",           CMD_QUIT},
        {"!",           CMD_SYSTEM},
        {NULL,          CMD_HELP}
}

tdbtool.c77 行で定義されています。

参照元 do_command().

TDB_CONTEXT* tdb [static]

tdbtool.c126 行で定義されています。

int total_bytes [static]

tdbtool.c429 行で定義されています。

参照元 clean_exit()info_tdb()smb_download_file()traverse_fn().


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