aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-04-24 15:58:00 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2011-04-24 15:58:00 +0300
commita85df0cad318d645bcb334cbafbb8010f0f829a9 (patch)
treeaad4f5bdafaa49ac2642afc2fa746b52aef49edf
parent8ea21b61840545d6d572a0ae4373e09f4604e577 (diff)
downloadslb-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.c41
-rw-r--r--src/oidtab.c40
-rw-r--r--src/slb.h4
-rw-r--r--src/snmploop.c2
-rw-r--r--src/symimp.c34
-rw-r--r--src/symtab.c18
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;
}
diff --git a/src/slb.h b/src/slb.h
index 7517944..2a89854 100644
--- a/src/slb.h
+++ b/src/slb.h
@@ -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

Return to:

Send suggestions and report system problems to the System administrator.