X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fntdb%2Ftools%2Fntdbrestore.c;fp=ccan%2Fntdb%2Ftools%2Fntdbrestore.c;h=0000000000000000000000000000000000000000;hp=695af79cb2f8bd01ab6fbd26d76130bd604d3595;hb=1aab74723e837a0fd8091e264a325bb2cdcdd0fa;hpb=979071e8587d4819a7f78613b68d29e222e5db63 diff --git a/ccan/ntdb/tools/ntdbrestore.c b/ccan/ntdb/tools/ntdbrestore.c deleted file mode 100644 index 695af79c..00000000 --- a/ccan/ntdb/tools/ntdbrestore.c +++ /dev/null @@ -1,242 +0,0 @@ -/* - ntdbrestore -- construct a ntdb from (n)tdbdump output. - Copyright (C) Rusty Russell 2012 - Copyright (C) Volker Lendecke 2010 - Copyright (C) Simon McVittie 2005 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "config.h" -#include "ntdb.h" -#include "private.h" -#include - -static int read_linehead(FILE *f) -{ - int i, c; - int num_bytes; - char prefix[128]; - - while (1) { - c = getc(f); - if (c == EOF) { - return -1; - } - if (c == '(') { - break; - } - } - for (i=0; idptr = (unsigned char *)malloc(size); - if (d->dptr == NULL) { - return -1; - } - d->dsize = size; - - for (i=0; idptr[i] = (low|high); - } else { - d->dptr[i] = c; - } - } - return 0; -} - -static int swallow(FILE *f, const char *s, int *eof) -{ - char line[128]; - - if (fgets(line, sizeof(line), f) == NULL) { - if (eof != NULL) { - *eof = 1; - } - return -1; - } - if (strcmp(line, s) != 0) { - return -1; - } - return 0; -} - -static bool read_rec(FILE *f, struct ntdb_context *ntdb, int *eof) -{ - int length; - NTDB_DATA key, data; - bool ret = false; - enum NTDB_ERROR e; - - key.dptr = NULL; - data.dptr = NULL; - - if (swallow(f, "{\n", eof) == -1) { - goto fail; - } - length = read_linehead(f); - if (length == -1) { - goto fail; - } - if (read_data(f, &key, length) == -1) { - goto fail; - } - if (swallow(f, "\"\n", NULL) == -1) { - goto fail; - } - length = read_linehead(f); - if (length == -1) { - goto fail; - } - if (read_data(f, &data, length) == -1) { - goto fail; - } - if ((swallow(f, "\"\n", NULL) == -1) - || (swallow(f, "}\n", NULL) == -1)) { - goto fail; - } - e = ntdb_store(ntdb, key, data, NTDB_INSERT); - if (e != NTDB_SUCCESS) { - fprintf(stderr, "NTDB error: %s\n", ntdb_errorstr(e)); - goto fail; - } - - ret = true; -fail: - free(key.dptr); - free(data.dptr); - return ret; -} - -static int restore_ntdb(const char *fname, unsigned int hsize) -{ - struct ntdb_context *ntdb; - union ntdb_attribute hashsize; - - hashsize.base.attr = NTDB_ATTRIBUTE_HASHSIZE; - hashsize.base.next = NULL; - hashsize.hashsize.size = hsize; - - ntdb = ntdb_open(fname, 0, O_RDWR|O_CREAT|O_EXCL, 0666, - hsize ? &hashsize : NULL); - if (!ntdb) { - perror("ntdb_open"); - fprintf(stderr, "Failed to open %s\n", fname); - return 1; - } - - while (1) { - int eof = 0; - if (!read_rec(stdin, ntdb, &eof)) { - if (eof) { - break; - } - return 1; - } - } - if (ntdb_close(ntdb)) { - fprintf(stderr, "Error closing ntdb\n"); - return 1; - } - fprintf(stderr, "EOF\n"); - return 0; -} - -int main(int argc, char *argv[]) -{ - unsigned int hsize = 0; - const char *execname = argv[0]; - - if (argv[1] && strcmp(argv[1], "-h") == 0) { - if (argv[2]) { - hsize = atoi(argv[2]); - } - if (hsize == 0) { - fprintf(stderr, "-h requires a integer value" - " (eg. 128 or 131072)\n"); - exit(1); - } - argv += 2; - argc -= 2; - } - if (argc != 2) { - printf("Usage: %s [-h ] dbname < tdbdump_output\n", - execname); - exit(1); - } - - - return restore_ntdb(argv[1], hsize); -}