[srvx-commits] CVS: services/src/utils checkdb.c,NONE,1.1 Makefile.am,NONE,1.1
Brought to you by:
entrope
From: Entrope <en...@us...> - 2001-10-20 18:47:08
|
Update of /cvsroot/srvx/services/src/utils In directory usw-pr-cvs1:/tmp/cvs-serv18865/src/utils Added Files: checkdb.c Makefile.am Log Message: rearrange files in src/ so they go into one of three subdirectories (srvx/, modules/, utils/) --- NEW FILE --- #include "config.h" #include <ctype.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include "log.h" #include "recdb.h" #include "saxdb.h" #include "tools.h" int bad = 0; /* because saxdb needs struct string_buffer.. */ DEFINE_LIST(string_buffer, char); static long TypeLength(char type) { switch (type) { case 'y': return 365*24*60*60; case 'M': return 31*24*60*60; case 'w': return 7*24*60*60; case 'd': return 24*60*60; case 'h': return 60*60; case 'm': return 60; case 's': return 1; default: return 0; } } unsigned long ParseInterval(const unsigned char *interval) { unsigned long seconds = 0; int partial = 0; unsigned char c; /* process the string, resetting the count if we find a unit character */ while ((c = *interval++)) { if (isdigit(c)) { partial = partial*10 + c - '0'; } else { seconds += TypeLength(c) * partial; partial = 0; } } /* assume the last chunk is seconds (the normal case) */ return seconds + partial; } /* because recdb likes to log stuff.. */ void log(enum log_type lt, enum log_severity ls, char *format, ...) { va_list va; (void)lt; (void)ls; va_start(va, format); vfprintf(stderr, format, va); va_end(va); bad = 1; } int check_record(const char *key, void *data, void *extra) { struct record_data *rd = data; (void)extra; switch (rd->type) { case RECDB_INVALID: fprintf(stdout, "Invalid database record type for key %s\n", key); return 1; case RECDB_QSTRING: case RECDB_STRING_LIST: return 0; case RECDB_OBJECT: return dict_foreach(rd->d.object, check_record, NULL) ? 1 : 0; } return 0; } extern unsigned int lineno; int main(int argc, char *argv[]) { FILE *input; dict_t db; if (argc < 2) { fprintf(stderr, "%s usage: %s dbfile\n", argv[0], argv[0]); return 1; } #if 1 if (argv[1][0] == '-' && argv[1][1] == 0) { input = stdin; } else { input = fopen(argv[1], "r"); if (!input) { perror("fopen"); return 2; } } (void)db; bad = saxdb_read(input, saxdb_alloc()); #else (void)input; db = parse_database(argv[1]); if (dict_foreach(db, check_record, 0)) return 3; #endif if (bad) { fprintf(stdout, "Error %d seen on line %d.\n", bad, lineno); } else { fprintf(stdout, "Database checked okay.\n"); } return 0; } --- NEW FILE --- AM_CFLAGS = -I../srvx EXTRA_PROGRAMS = checkdb checkdb_SOURCES = checkdb.c ../core/recdb.c ../core/recdb.h ../core/dict-hash.c ../core/dict.h ../core/log.h ../core/saxdb.c ../core/saxdb.h |