static int createdb(const char *f, const char **args, int nargs) { char *line, *eq; s = sdb_new (NULL, f, 0); if (!s || !sdb_disk_create (s)) { eprintf ("Cannot create database\n"); return 1; } insertkeys (s, args, nargs, '='); sdb_config (s, options); for (;(line = stdin_slurp (NULL));) { if ((eq = strchr (line, '='))) { *eq++ = 0; sdb_disk_insert (s, line, eq); } free (line); } sdb_disk_finish (s); return 0; }
int main(int argc, const char **argv) { char *line; const char *arg, *grep = NULL; int i, ret, fmt = MODE_DFLT; int db0 = 1, argi = 1; bool interactive = false; /* terminate flags */ if (argc < 2) { return showusage (1); } arg = argv[1]; if (arg[0] == '-') {// && arg[1] && arg[2]==0) { switch (arg[1]) { case 0: /* no-op */ break; case '0': fmt = MODE_ZERO; db0++; argi++; if (db0 >= argc) { return showusage (1); } break; case 'g': db0 += 2; if (db0 >= argc) { return showusage (1); } grep = argv[2]; argi += 2; break; case 'J': options |= SDB_OPTION_JOURNAL; db0++; argi++; if (db0 >= argc) { return showusage (1); } break; case 'c': return (argc < 3)? showusage (1) : showcount (argv[2]); case 'v': return showversion (); case 'h': return showusage (2); case 'e': return base64encode (); case 'd': return base64decode (); case 'D': if (argc == 4) { return dbdiff (argv[2], argv[3]); } return showusage (0); case 'j': if (argc > 2) { return sdb_dump (argv[db0 + 1], MODE_JSON); } return jsonIndent(); default: eprintf ("Invalid flag %s\n", arg); break; } } /* sdb - */ if (argi == 1 && !strcmp (argv[argi], "-")) { /* no database */ argv[argi] = ""; if (argc == db0 + 1) { interactive = true; /* if no argument passed */ argv[argi] = "-"; argc++; argi++; } } /* sdb dbname */ if (argc - 1 == db0) { if (grep) { return sdb_grep (argv[db0], fmt, grep); } return sdb_dump (argv[db0], fmt); } #if USE_MMAN signal (SIGINT, terminate); signal (SIGHUP, synchronize); #endif ret = 0; if (interactive || !strcmp (argv[db0 + 1], "-")) { if ((s = sdb_new (NULL, argv[db0], 0))) { sdb_config (s, options); int kvs = db0 + 2; if (kvs < argc) { save |= insertkeys (s, argv + argi + 2, argc - kvs, '-'); } for (;(line = stdin_slurp (NULL));) { save |= sdb_query (s, line); if (fmt) { fflush (stdout); write (1, "", 1); } free (line); } } } else if (!strcmp (argv[db0 + 1], "=")) { ret = createdb (argv[db0], NULL, 0); } else { s = sdb_new (NULL, argv[db0], 0); if (!s) { return 1; } sdb_config (s, options); for (i = db0 + 1; i < argc; i++) { save |= sdb_query (s, argv[i]); if (fmt) { fflush (stdout); write (1, "", 1); } } } terminate (0); return ret; }
int main(int argc, const char **argv) { char *line; int i, ret, fmt = MODE_DFLT; int db0 = 1, argi = 1; int interactive = 0; /* terminate flags */ if (argc<2) showusage (1); if (!strcmp (argv[1], "-d")) { if (argc == 4) return dbdiff (argv[2], argv[3]); showusage (0); } if (!strcmp (argv[1], "-v")) showversion (); if (!strcmp (argv[1], "-h")) showusage (2); if (!strcmp (argv[1], "-j")) { if (argc>2) return sdb_dump (argv[db0+1], MODE_JSON); eprintf ("Missing database filename after -j\n"); return 1; } /* flags */ if (!strcmp (argv[argi], "-0")) { fmt = MODE_ZERO; db0++; argi++; } if (!strcmp (argv[argi], "-")) { /* no database */ argv[argi] = ""; if (argc == db0+1) { interactive = 1; /* if no argument passed */ argv[argi] = "-"; argc++; argi++; } } if (argc-1 == db0) return sdb_dump (argv[db0], fmt); #if USE_MMAN signal (SIGINT, terminate); signal (SIGHUP, syncronize); #endif ret = 0; if (interactive || !strcmp (argv[db0+1], "-")) { if ((s = sdb_new (NULL, argv[db0], 0))) { save |= insertkeys (s, argv+3, argc-3, '-'); sdb_config (s, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); for (;(line = stdin_gets ());) { save |= sdb_query (s, line); if (fmt) { fflush (stdout); write (1, "", 1); } free (line); } } } else if (!strcmp (argv[db0+1], "=")) { ret = createdb (argv[db0], argv+db0+2, argc-(db0+2)); } else { s = sdb_new (NULL, argv[db0], 0); if (!s) return 1; sdb_config (s, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); for (i=db0+1; i<argc; i++) { save |= sdb_query (s, argv[i]); if (fmt) { fflush (stdout); write (1, "", 1); } } } terminate (0); return ret; }