Changeset 17091


Ignore:
Timestamp:
2008-08-29T14:01:12+12:00 (16 years ago)
Author:
davidb
Message:

Modification to gdbm set/get to support enhanced GDMB version of archives.inf

Location:
gsdl/trunk/common-src/src/gdbmedit
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • gsdl/trunk/common-src/src/gdbmedit/gdbmget/gdbmget.cpp

    r15932 r17091  
    5757print_usage (char *program_name)
    5858{
    59   cerr << "usage: " << program_name << " <database_path> <key>\n\n";
     59  cerr << "usage: " << program_name << " <database_path> <key>" << endl;
     60  cerr << endl;
    6061}
    6162
    6263
    63 int
    64 main (int argc, char *argv[])
     64int main (int argc, char *argv[])
    6565{
    6666  int block_size = 0;
     
    7272    {
    7373      print_usage (argv[0]);
    74       exit (0);
     74      exit (-1);
    7575    }
    7676 
     
    8484    {
    8585      cerr << "couldn't create " << argv[1] << "\n";
    86       exit (0);
     86      exit (-1);
    8787    }
    8888 
  • gsdl/trunk/common-src/src/gdbmedit/gdbmset/gdbmset.cpp

    r15230 r17091  
    5757print_usage (char *program_name)
    5858{
    59   cerr << "usage: " << program_name << " <database_path> <key> [<value>]\n";
    60   cerr << "\t- if no value is given then the lexicon indicated by the key is removed\n\n";
     59  cerr << "usage: " << program_name << " <database_path> <key> [<value>] [append]" << endl;
     60  cerr << "\t- if no value is given then the lexicon indicated by the key is removed" << endl;
     61  cerr << "\t- if a value is given followed by 'append' then the value is " << endl;
     62  cerr << "\t  added to the existing entry rather than overwriting it" << endl;
     63  cerr << endl;
    6164}
    6265
    6366
    64 int
    65 main (int argc, char *argv[])
     67int main (int argc, char *argv[])
    6668{
    6769  int block_size = 0;
    6870  GDBM_FILE dbf;
    69   datum key, content;
     71  datum key;
    7072 
    7173  // sanity check
    72   if (argc < 3)
    73     {
     74  if ((argc < 3) || (argc>5)) {
    7475      print_usage (argv[0]);
    75       exit (0);
    76     }
     76      exit (-1);
     77  }
    7778 
    7879  // open the database
     
    8586    {
    8687      cerr << "couldn't open database connection to " << argv[1] << "\n";
    87       exit (0);
     88      exit (-1);
    8889    }
    8990 
    9091  key.dsize = strlen(argv[2]);
    9192  key.dptr = argv[2];
    92   if(argc == 4)
    93     {
     93
     94  if(argc == 5) {
     95   
     96    if (strcmp(argv[4],"append")==0) {
     97      datum orig_content,concat_content;
     98
     99      //cerr << "Appending [" << argv[2] << "] to '" << argv[3] << "' (length " << strlen(argv[3]) << ")\n";
     100      // get old value, then top up
     101
     102      orig_content = gdbm_fetch (dbf, key);
     103
     104      // append orig_content with argv[3]
     105      concat_content.dsize = orig_content.dsize + strlen(argv[3]);
     106      char* concat_data = new char[concat_content.dsize +1];//  make room for \0 at end
     107      if (orig_content.dsize>0) {
     108    strncpy(concat_data,orig_content.dptr,orig_content.dsize);
     109    strcpy(&concat_data[orig_content.dsize],argv[3]); // ensures \0 at end
     110      }
     111      else {
     112    // first time key has been used
     113    strcpy(concat_data,argv[3]); // ensures \0 at end
     114      }
     115
     116      concat_content.dptr = concat_data;
     117      if(gdbm_store(dbf, key, concat_content, GDBM_REPLACE) != 0)
     118        {
     119          cerr << "failed to set [" << argv[2] << "] to '" << concat_data << "'\n";
     120        }
     121      delete [] concat_data;
     122    }
     123    else {
     124      print_usage (argv[0]);
     125      gdbm_close (dbf);
     126      exit(-1);
     127    }
     128  }
     129  else if (argc == 4) {
     130      datum content;
     131
    94132      //cerr << "Setting [" << argv[2] << "] to '" << argv[3] << "' (length " << strlen(argv[3]) << ")\n";
    95133      content.dsize = strlen(argv[3]);
     
    108146    }
    109147  gdbm_close (dbf);
     148
    110149  return 0;
    111150}
Note: See TracChangeset for help on using the changeset viewer.