summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/log.c38
1 files changed, 22 insertions, 16 deletions
diff --git a/lib/log.c b/lib/log.c
index 4a616c7780..b46e6cb2ca 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -92,30 +92,33 @@ int zlog_filter_add(const char *filter)
{
pthread_mutex_lock(&loglock);
+ int ret = 0;
+
if (zlog_filter_count >= ZLOG_FILTERS_MAX) {
- pthread_mutex_unlock(&loglock);
- return 1;
+ ret = 1;
+ goto done;
}
if (zlog_filter_lookup(filter) != -1) {
/* Filter already present */
- pthread_mutex_unlock(&loglock);
- return -1;
+ ret = -1;
+ goto done;
}
strlcpy(zlog_filters[zlog_filter_count], filter,
sizeof(zlog_filters[0]));
- if (zlog_filters[zlog_filter_count] == NULL
- || zlog_filters[zlog_filter_count][0] == '\0') {
- pthread_mutex_unlock(&loglock);
- return -1;
+ if (zlog_filters[zlog_filter_count][0] == '\0') {
+ /* Filter was either empty or didn't get copied correctly */
+ ret = -1;
+ goto done;
}
zlog_filter_count++;
+done:
pthread_mutex_unlock(&loglock);
- return 0;
+ return ret;
}
int zlog_filter_del(const char *filter)
@@ -124,11 +127,12 @@ int zlog_filter_del(const char *filter)
int found_idx = zlog_filter_lookup(filter);
int last_idx = zlog_filter_count - 1;
+ int ret = 0;
if (found_idx == -1) {
/* Didn't find the filter to delete */
- pthread_mutex_unlock(&loglock);
- return -1;
+ ret = -1;
+ goto done;
}
/* Adjust the filter array */
@@ -137,8 +141,9 @@ int zlog_filter_del(const char *filter)
zlog_filter_count--;
+done:
pthread_mutex_unlock(&loglock);
- return 0;
+ return ret;
}
/* Dump all filters to buffer, delimited by new line */
@@ -154,13 +159,13 @@ int zlog_filter_dump(char *buf, size_t max_size)
zlog_filters[i]);
len += ret;
if ((ret < 0) || ((size_t)len >= max_size)) {
- pthread_mutex_unlock(&loglock);
- return -1;
+ len = -1;
+ goto done;
}
}
+done:
pthread_mutex_unlock(&loglock);
-
return len;
}
@@ -342,7 +347,7 @@ static int vzlog_filter(struct zlog *zl, struct timestamp_control *tsctl,
len += ret;
if ((ret < 0) || ((size_t)len >= sizeof(buf)))
- return search_buf(buf);
+ goto search;
if (zl && zl->record_priority)
snprintf(buf + len, sizeof(buf) - len, "%s: %s: %s",
@@ -351,6 +356,7 @@ static int vzlog_filter(struct zlog *zl, struct timestamp_control *tsctl,
snprintf(buf + len, sizeof(buf) - len, "%s: %s", proto_str,
msg);
+search:
return search_buf(buf);
}