X-Git-Url: http://git.tuebingen.mpg.de/?p=adu.git;a=blobdiff_plain;f=adu.c;h=fe0caa501a2ce35e5f83273af8dace42f420bde4;hp=0bb5aad08db31a68b52fc69a1f414a07d9c87fb8;hb=b8679a529d886ffa55425db30aa02adf1904b88f;hpb=2d7a4d61bfa10e3f462053936dcf7fd416b629d0 diff --git a/adu.c b/adu.c index 0bb5aad..fe0caa5 100644 --- a/adu.c +++ b/adu.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Andre Noll + * Copyright (C) 2008 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -125,6 +125,25 @@ __printf_2_3 void __log(int ll, const char* fmt,...) va_end(argp); } +/** + * adu's version of strerror(3). + * + * \param num The error number. + * + * \return The error text of \a num. + */ +const char *adu_strerror(int num) +{ + assert(num > 0); + if (num == E_OSL) { + assert(osl_errno > 0); + return osl_strerror((osl_errno)); + } + if (IS_SYSTEM_ERROR(num)) + return strerror((num) & ((1 << SYSTEM_ERROR_BIT) - 1)); + return adu_errlist[num]; +} + static void close_dir_table(void) { int ret; @@ -181,7 +200,7 @@ static int init_signals(void) return -E_SIGACTION; if (catch_signal(SIGTERM) < 0) return -E_SIGACTION; - if (catch_signal(SIGPIPE) == SIG_ERR) + if (catch_signal(SIGPIPE) < 0) return -E_SIGACTION; return 1; } @@ -208,8 +227,10 @@ int open_dir_table(int create) goto out; NOTICE_LOG("creating dir table\n"); ret = osl(osl_create_table(&dir_table_desc)); - if (ret < 0) + if (ret < 0) { + ERROR_LOG("could not create %s\n", dir_table_desc.dir); goto out; + } } INFO_LOG("opening dir table\n"); return osl(osl_open_table(&dir_table_desc, &dir_table)); @@ -275,9 +296,15 @@ static void get_database_dir_or_die(void) if (conf.database_dir_given) tmp = adu_strdup(conf.database_dir_arg); - else + else { + if (!conf.base_dir_arg) { + EMERG_LOG("fatal: neither database dir " + "nor base dir given\n"); + exit(EXIT_FAILURE); + } tmp = make_message("%s%s", conf.database_root_arg, conf.base_dir_arg); + } /* * As we change the cwd during database creation, database_dir * must be an absolute path.