Diff for /loncom/debugging_tools/dump_db.c between versions 1.1 and 1.2

version 1.1, 2006/06/19 21:21:47 version 1.2, 2006/08/24 22:46:30
Line 4 Line 4
 #include <gdbm.h>  #include <gdbm.h>
 #include <errno.h>  #include <errno.h>
 #include <string.h>  #include <string.h>
   #include <ctype.h>
   
   static const char c2x_table[] = "0123456789abcdef";
   
   void c2x(unsigned what, unsigned char prefix, char *where,
    unsigned int offset)
   {
       where[offset] = prefix;
       where[offset+1] = c2x_table[what >> 4];
       where[offset+2] = c2x_table[what & 0xf];
   }
   
   
   datum* http_escape(datum* data)
   {
     datum *escaped_data;
     escaped_data = malloc(sizeof(datum));
     escaped_data->dsize =  (3 * data->dsize) + 3;
     escaped_data->dptr  = malloc(escaped_data->dsize);
     unsigned int c,i,j;
   
     j=0;
     for (i=0;i<data->dsize;i++) {
       c = data->dptr[i];
       if (!isalnum(c)) {
         c2x(c, '%', escaped_data->dptr, j);
         j+=3;
       } else {
         escaped_data->dptr[j] = c;
         j++;
       }
     }
     escaped_data->dsize=j;
     return escaped_data;
   }
   
   
 void usage()  void usage()
 {  {
Line 14  void read_db(char *filename) Line 50  void read_db(char *filename)
 {  {
   GDBM_FILE db;    GDBM_FILE db;
   datum key, nextkey, content;    datum key, nextkey, content;
     datum *escaped_key, *escaped_content;
   db = gdbm_open(filename, 0, GDBM_READER, 0, 0);    db = gdbm_open(filename, 0, GDBM_READER, 0, 0);
   
   if (db == NULL) {    if (db == NULL) {
     printf("Unable to open db %s beacsue of %s (%d) -- %s (%d)\n",filename,      printf("ERROR:Unable to open db %s because of %s (%d) -- %s (%d)\n",
    gdbm_strerror(gdbm_errno),gdbm_errno,strerror(errno),errno);     filename,gdbm_strerror(gdbm_errno),gdbm_errno,strerror(errno),
      errno);
     return;      return;
   }    }
   key = gdbm_firstkey(db);    key = gdbm_firstkey(db);
   
   while ( key.dptr ) {    while ( key.dptr ) {
     content = gdbm_fetch(db, key);      content = gdbm_fetch(db, key);
     fwrite(key.dptr, key.dsize, sizeof(char), stdout);      escaped_key     = http_escape(&key);
       escaped_content = http_escape(&content);
       fwrite(escaped_key->dptr,
      escaped_key->dsize, sizeof(char), stdout);
     printf(" -> ");      printf(" -> ");
     fwrite(content.dptr, content.dsize, sizeof(char), stdout);      fwrite(escaped_content->dptr,
      escaped_content->dsize, sizeof(char), stdout);
     printf("\n");      printf("\n");
     free(content.dptr);      free(content.dptr);
       free(escaped_content->dptr);
       free(escaped_content);
       free(escaped_key->dptr);
       free(escaped_key);
     nextkey = gdbm_nextkey(db, key);      nextkey = gdbm_nextkey(db, key);
     free(key.dptr);      free(key.dptr);
     key = nextkey;      key = nextkey;
Line 61  int main(int argc, char  **argv) Line 107  int main(int argc, char  **argv)
   return 0;    return 0;
 }  }
   
   

Removed from v.1.1  
changed lines
  Added in v.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>