]> granicus.if.org Git - libnl/commitdiff
Use thread-safe strerror_r() instead of strerror()
authorThomas Graf <tgraf@suug.ch>
Thu, 28 Feb 2013 12:07:04 +0000 (13:07 +0100)
committerThomas Graf <tgraf@suug.ch>
Thu, 28 Feb 2013 12:07:04 +0000 (13:07 +0100)
We have only ever fed well known error codes into strerror()
so it should never have been a problem though.

Signed-off-by: Thomas Graf <tgraf@suug.ch>
lib/fib_lookup/lookup.c
lib/handlers.c
lib/msg.c
lib/route/route_obj.c
src/lib/utils.c

index 6fe8daeb0b81d1218f6f64624f38dd95dd9c6553..3d073172d46ac35f33f96d69fcc7dd1ab647b36b 100644 (file)
@@ -124,7 +124,7 @@ errout:
 static void result_dump_line(struct nl_object *obj, struct nl_dump_params *p)
 {
        struct flnl_result *res = (struct flnl_result *) obj;
-       char buf[128];
+       char buf[256];
 
        nl_dump_line(p, "table %s prefixlen %u next-hop-selector %u\n",
                rtnl_route_table2str(res->fr_table_id, buf, sizeof(buf)),
@@ -133,7 +133,7 @@ static void result_dump_line(struct nl_object *obj, struct nl_dump_params *p)
                     nl_rtntype2str(res->fr_type, buf, sizeof(buf)));
        nl_dump(p, "scope %s error %s (%d)\n",
                rtnl_scope2str(res->fr_scope, buf, sizeof(buf)),
-               strerror(-res->fr_error), res->fr_error);
+               strerror_r(-res->fr_error, buf, sizeof(buf)), res->fr_error);
 }
 
 static void result_dump_details(struct nl_object *obj, struct nl_dump_params *p)
index ee1376b03a245acb0efd2e7f86ecf38bf75ead9e..e52c850f22ac08debcbc6b03ad19b2e20f5a981d 100644 (file)
@@ -79,9 +79,10 @@ static int nl_error_handler_verbose(struct sockaddr_nl *who,
                                    struct nlmsgerr *e, void *arg)
 {
        FILE *ofd = arg ? arg : stderr;
+       char buf[256];
 
        fprintf(ofd, "-- Error received: %s\n-- Original message: ",
-               strerror(-e->error));
+               strerror_r(-e->error, buf, sizeof(buf)));
        print_header_content(ofd, &e->msg);
        fprintf(ofd, "\n");
 
index 8198ded2c9fc12a7cc4247cc4e8892ee83d3dbf2..62d9683c767d21a33e4fd60b008382c4e8633926 100644 (file)
--- a/lib/msg.c
+++ b/lib/msg.c
@@ -879,10 +879,11 @@ void nl_msg_dump(struct nl_msg *msg, FILE *ofd)
            hdr->nlmsg_len >= nlmsg_msg_size(sizeof(struct nlmsgerr))) {
                struct nl_msg *errmsg;
                struct nlmsgerr *err = nlmsg_data(hdr);
+               char buf[256];
 
                fprintf(ofd, "  [ERRORMSG] %zu octets\n", sizeof(*err));
                fprintf(ofd, "    .error = %d \"%s\"\n", err->error,
-                       strerror(-err->error));
+                       strerror_r(-err->error, buf, sizeof(buf)));
                fprintf(ofd, "  [ORIGINAL MESSAGE] %zu octets\n", sizeof(*hdr));
 
                errmsg = nlmsg_inherit(&err->msg);
index 8f1e5155913a2501a4f39dfe8ee4a345bad33aa8..795047fbdf486bccb4dcc9fbfa5f780fa1f733d5 100644 (file)
@@ -208,7 +208,7 @@ static void route_dump_details(struct nl_object *a, struct nl_dump_params *p)
 {
        struct rtnl_route *r = (struct rtnl_route *) a;
        struct nl_cache *link_cache;
-       char buf[128];
+       char buf[256];
        int i;
 
        link_cache = nl_cache_mngt_require_safe("route/link");
@@ -259,7 +259,7 @@ static void route_dump_details(struct nl_object *a, struct nl_dump_params *p)
        if ((r->ce_mask & ROUTE_ATTR_CACHEINFO) && r->rt_cacheinfo.rtci_error) {
                nl_dump_line(p, "    cacheinfo error %d (%s)\n",
                        r->rt_cacheinfo.rtci_error,
-                       strerror(-r->rt_cacheinfo.rtci_error));
+                       strerror_r(-r->rt_cacheinfo.rtci_error, buf, sizeof(buf)));
        }
 
        if (r->ce_mask & ROUTE_ATTR_METRICS) {
index 78ad2601445ad8d10b9d9c9f231cae5e9ef970de..e5eacdec3fc1df39d95587bb432a956b57c20066 100644 (file)
@@ -70,6 +70,7 @@ void nl_cli_print_version(void)
 void nl_cli_fatal(int err, const char *fmt, ...)
 {
        va_list ap;
+       char buf[256];
 
        fprintf(stderr, "Error: ");
 
@@ -79,7 +80,7 @@ void nl_cli_fatal(int err, const char *fmt, ...)
                va_end(ap);
                fprintf(stderr, "\n");
        } else
-               fprintf(stderr, "%s\n", strerror(err));
+               fprintf(stderr, "%s\n", strerror_r(err, buf, sizeof(buf)));
 
        exit(abs(err));
 }