diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-04-24 15:58:00 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-04-24 15:58:00 +0300 |
commit | a85df0cad318d645bcb334cbafbb8010f0f829a9 (patch) | |
tree | aad4f5bdafaa49ac2642afc2fa746b52aef49edf | |
parent | 8ea21b61840545d6d572a0ae4373e09f4604e577 (diff) | |
download | slb-a85df0cad318d645bcb334cbafbb8010f0f829a9.tar.gz slb-a85df0cad318d645bcb334cbafbb8010f0f829a9.tar.bz2 |
Change the symtab_lookup_or_install convention.
* src/slb.h (symtab_lookup_or_install): Return the found
(installed) entry.
* src/symtab.c (symtab_lookup_or_install): Return the found
(installed) entry.
Store error code to errno.
All uses changed.
-rw-r--r-- | src/exprtab.c | 41 | ||||
-rw-r--r-- | src/oidtab.c | 40 | ||||
-rw-r--r-- | src/slb.h | 4 | ||||
-rw-r--r-- | src/snmploop.c | 2 | ||||
-rw-r--r-- | src/symimp.c | 34 | ||||
-rw-r--r-- | src/symtab.c | 18 |
6 files changed, 72 insertions, 67 deletions
diff --git a/src/exprtab.c b/src/exprtab.c index 3b6feda..dfb307d 100644 --- a/src/exprtab.c +++ b/src/exprtab.c @@ -24,7 +24,6 @@ register_expression(struct slb_expression *expr) { struct slb_expression *s; int install = 1; - int rc; if (!expr_table) { expr_table = @@ -33,10 +32,10 @@ register_expression(struct slb_expression *expr) xalloc_die(); } - rc = symtab_lookup_or_install((void*)&s, expr_table, expr, &install); - if (rc) { + s = symtab_lookup_or_install(expr_table, expr, &install); + if (!s) { logmsg(LOG_CRIT, _("cannot register expression: %s"), - symtab_strerror(rc)); + symtab_strerror(errno)); exit(EX_SOFTWARE); } @@ -60,20 +59,21 @@ register_expression(struct slb_expression *expr) struct slb_expression * expression_lookupz(const char *name) { - int rc; struct slb_expression ex, *s; if (!expr_table) return NULL; ex.ex_name = name; - rc = symtab_lookup_or_install((void*)&s, expr_table, &ex, NULL); - if (rc == ENOENT) - return NULL; - if (rc) { - logmsg(LOG_CRIT, _("expression lookup: %s"), - symtab_strerror(rc)); - exit(EX_SOFTWARE); + s = symtab_lookup_or_install(expr_table, &ex, NULL); + if (!s) { + if (errno == ENOENT) + return NULL; + else { + logmsg(LOG_CRIT, _("expression lookup: %s"), + symtab_strerror(errno)); + exit(EX_SOFTWARE); + } } return s; } @@ -81,7 +81,6 @@ expression_lookupz(const char *name) struct slb_expression * expression_lookup(const char *name, size_t len) { - int rc; struct slb_expression ex, *s; static char *namebuf; static size_t namelen; @@ -96,13 +95,15 @@ expression_lookup(const char *name, size_t len) namebuf[len] = 0; ex.ex_name = namebuf; - rc = symtab_lookup_or_install((void*)&s, expr_table, &ex, NULL); - if (rc == ENOENT) - return NULL; - if (rc) { - logmsg(LOG_CRIT, _("expression lookup: %s"), - symtab_strerror(rc)); - exit(EX_SOFTWARE); + s = symtab_lookup_or_install(expr_table, &ex, NULL); + if (!s) { + if (errno == ENOENT) + return NULL; + else { + logmsg(LOG_CRIT, _("expression lookup: %s"), + symtab_strerror(errno)); + exit(EX_SOFTWARE); + } } return s; } diff --git a/src/oidtab.c b/src/oidtab.c index fd2bd6a..6e6304d 100644 --- a/src/oidtab.c +++ b/src/oidtab.c @@ -68,11 +68,11 @@ _create_ref(void *sym, void *data) { struct slb_varinstance *vinst = sym; struct symtab *oidtab = data; - struct slb_oidref key, *ref; + struct slb_oidref key; int install = 1; key.inst = vinst; - return symtab_lookup_or_install((void**)&ref, oidtab, &key, &install); + return symtab_lookup_or_install(oidtab, &key, &install) == NULL; } struct symtab * @@ -95,20 +95,21 @@ oidtab_lookup(struct symtab *oidtab, oid *name, size_t name_length) { struct slb_varinstance key_inst; struct slb_oidref key, *ref; - int rc; memcpy(key_inst.vi_oid, name, sizeof(name[0]) * name_length); key_inst.vi_oidlen = name_length; key.inst = &key_inst; - rc = symtab_lookup_or_install((void**)&ref, oidtab, &key, NULL); - if (rc == ENOENT) - return NULL; - if (rc) { - logmsg(LOG_CRIT, _("lookup in oidtab failed: %s"), - symtab_strerror(rc)); - exit(EX_SOFTWARE); + ref = symtab_lookup_or_install(oidtab, &key, NULL); + if (!ref) { + if (errno == ENOENT) + return NULL; + else { + logmsg(LOG_CRIT, _("lookup in oidtab failed: %s"), + symtab_strerror(errno)); + exit(EX_SOFTWARE); + } } - return (struct slb_varinstance*)ref->inst; + return (struct slb_varinstance *)ref->inst; } static unsigned @@ -171,17 +172,18 @@ struct slb_assertion * assertion_lookup(struct symtab *at, oid *name, size_t namelen, int *install) { struct slb_assertion key, *ref; - int rc; memcpy(key.name, name, sizeof(name[0]) * namelen); key.length = namelen; - rc = symtab_lookup_or_install((void**)&ref, at, &key, install); - if (rc == ENOENT) - return NULL; - if (rc) { - logmsg(LOG_CRIT, _("lookup in oidtab failed: %s"), - symtab_strerror(rc)); - exit(EX_SOFTWARE); + ref = symtab_lookup_or_install(at, &key, install); + if (!ref) { + if (errno == ENOENT) + return NULL; + else { + logmsg(LOG_CRIT, _("lookup in oidtab failed: %s"), + symtab_strerror(errno)); + exit(EX_SOFTWARE); + } } return ref; } @@ -173,9 +173,7 @@ typedef int (*symtab_enumerator_t)(void *sym, void *data); const char *symtab_strerror(int rc); -int symtab_lookup_or_install(void **ent, - struct symtab *st, void *key, - int *install); +void *symtab_lookup_or_install(struct symtab *st, void *key, int *install); void symtab_clear(struct symtab *st); struct symtab *symtab_create(size_t elsize, unsigned (*hash_fun)(void *, unsigned long), diff --git a/src/snmploop.c b/src/snmploop.c index 22b8586..acde316 100644 --- a/src/snmploop.c +++ b/src/snmploop.c @@ -210,7 +210,7 @@ send_requests() snmp_sess_init(&sess); sess.version = SNMP_VERSION_1; /* FIXME */ sess.peername = srv->peer; - sess.community = (char*)srv->community; + sess.community = srv->community; sess.community_len = strlen((char*)sess.community); if (srv->timeout) sess.timeout = srv->timeout * 1000000L; diff --git a/src/symimp.c b/src/symimp.c index 90ac9de..a35c9dd 100644 --- a/src/symimp.c +++ b/src/symimp.c @@ -20,7 +20,6 @@ struct syment * _lookup(struct symtab *vit, const char *name, size_t len, int *install, char *what) { - int rc; struct syment key; struct syment *ent; @@ -28,14 +27,16 @@ _lookup(struct symtab *vit, const char *name, size_t len, int *install, memcpy(key.name, name, len); key.name[len] = 0; - rc = symtab_lookup_or_install((void**)&ent, vit, &key, install); + ent = symtab_lookup_or_install(vit, &key, install); free(key.name); - if (rc == ENOENT) - return NULL; - if (rc) { - logmsg(LOG_CRIT, _("cannot define %s: %s"), - what, symtab_strerror(rc)); - exit(EX_SOFTWARE); + if (!ent) { + if (errno == ENOENT) + return NULL; + else { + logmsg(LOG_CRIT, _("cannot define %s: %s"), + what, symtab_strerror(errno)); + exit(EX_SOFTWARE); + } } return ent; } @@ -43,18 +44,19 @@ _lookup(struct symtab *vit, const char *name, size_t len, int *install, struct syment * _lookupz(struct symtab *vit, const char *name, int *install, char *what) { - int rc; struct syment key; struct syment *ent; key.name = (char*) name; - rc = symtab_lookup_or_install((void*)&ent, vit, &key, install); - if (rc == ENOENT) - return NULL; - if (rc) { - logmsg(LOG_CRIT, _("cannot define %s: %s"), - what, symtab_strerror(rc)); - exit(EX_SOFTWARE); + ent = symtab_lookup_or_install(vit, &key, install); + if (!ent) { + if (errno == ENOENT) + return NULL; + else { + logmsg(LOG_CRIT, _("cannot define %s: %s"), + what, symtab_strerror(errno)); + exit(EX_SOFTWARE); + } } return ent; } diff --git a/src/symtab.c b/src/symtab.c index 20ca003..edfaf93 100644 --- a/src/symtab.c +++ b/src/symtab.c @@ -271,23 +271,25 @@ symtab_get_index(unsigned *idx, struct symtab *st, void *key, int *install) return symtab_get_index(idx, st, key, install); } -int -symtab_lookup_or_install(void **elp, - struct symtab *st, void *key, int *install) +void * +symtab_lookup_or_install(struct symtab *st, void *key, int *install) { unsigned i; int rc = symtab_get_index(&i, st, key, install); if (rc == 0) { if (install && *install == 1) { struct syment *ent = syment_alloc(st, key); - if (!ent) - return ENOMEM; + if (!ent) { + errno = ENOMEM; + return NULL; + } st->tab[i] = ent; - *elp = ent; + return ent; } else - *elp = st->tab[i]; + return st->tab[i]; } - return rc; + errno = rc; + return NULL; } void |