#include #include #include #include "config.h" #include "regexset.h" #include "channel.h" #include "user.h" #include "word.h" #include "nick.h" #include "parsing.h" #include "pg.h" int main(int argc, char **argv) { int opt, init, upgrade, drop, clear; init = upgrade = drop = clear = 0; /* Set locale. */ setlocale(LC_CTYPE, ""); while((opt = getopt(argc, argv, "iudc")) != -1) { switch(opt) { case 'i': init = 1; break; case 'u': upgrade = 1; break; case 'd': drop = 1; break; case 'c': clear = 1; break; default: fprintf(stderr, "Usage: %s [-i|-u|-d|-c]\n", argv[0]); return 1; } } /* Regex sets must be initialized before config. */ rs_init(); channel_init(); nick_init(); if(!cfg_init()) { /* Free any registered regex sets and channels when config fails. Config will fail if a regex set fails to compile all parts. */ rs_free(); channel_free(); return 1; } if(!pg_connect(ircstats_config.db_connection_string)) { fprintf(stderr, "Failed to connect to database\n"); goto main_free; } if(init) { printf("Creating tables\n"); pg_init(); goto disconnect; } if(upgrade) { printf("Upgrading database schema.\n"); pg_upgrade(); goto disconnect; } if(drop) { printf("Dropping all tables\n"); pg_dropall(); goto disconnect; } if(clear) { printf("Clearing database content\n"); pg_dropall(); pg_init(); goto disconnect; } process(); disconnect: pg_disconnect(); main_free: nick_free(); cfg_free(); channel_free(); rs_free(); return 0; }