X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Flibcore%2Flc_opts_enum.c;h=144294d744f63fe6b3d838a0370b7a7afc8032ba;hb=ea75e9d38674b468f602a0699fb64b9c01254797;hp=821c9617f0787e8933392acd1371a5cdaeb786cc;hpb=0fbcef83aa6060534172bb13e71cdadb04428806;p=libfirm diff --git a/ir/libcore/lc_opts_enum.c b/ir/libcore/lc_opts_enum.c index 821c9617f..144294d74 100644 --- a/ir/libcore/lc_opts_enum.c +++ b/ir/libcore/lc_opts_enum.c @@ -15,11 +15,10 @@ #include #include -#if defined(__FreeBSD__) -#include -#elif defined(_WIN32) +#ifdef _WIN32 #include -#else +#endif +#ifdef HAVE_ALLOCA_H #include #endif @@ -50,7 +49,7 @@ int lc_opt_enum_ ## N ## _cb(LC_UNUSED(const char *name), LC_UNUSED(lc_opt_type_ s[end] = '\0'; \ \ end = 0; \ - while(arg[end] != '\0') { \ + while (arg[end] != '\0') { \ unsigned int i; \ \ begin = end + strspn(arg + end, delim); \ @@ -58,8 +57,8 @@ int lc_opt_enum_ ## N ## _cb(LC_UNUSED(const char *name), LC_UNUSED(lc_opt_type_ s = tmp + begin; \ s[end - begin] = '\0'; \ \ - for(i = 0; items[i].name != NULL; ++i) { \ - if(strcmp(s, items[i].name) == 0) { \ + for (i = 0; items[i].name != NULL; ++i) { \ + if (strcmp(s, items[i].name) == 0) { \ *var->value op items[i].value; \ res = 1; \ } \ @@ -83,12 +82,22 @@ int lc_opt_enum_ ## N ## _dump(char *buf, size_t n, LC_UNUSED(const char *name), const char *prefix = ""; \ TYPE(value) = *var->value; \ int i; \ + size_t l = strlen(buf); \ \ - for(i = 0; items[i].name != NULL; ++i) { \ + if (l >= n) \ + return (int)l; \ + n -= l; \ + n += 2; \ + for (i = 0; items[i].name != NULL; ++i) { \ TYPE(item_value) = items[i].value; \ - if(cond) { \ - strncat(buf, prefix, n); \ - strncat(buf, items[i].name, n); \ + if (cond) { \ + if (n <= 2) \ + break; \ + strcat(buf, prefix); \ + l = strlen(items[i].name); \ + if (n <= l) \ + break; \ + strcat(buf, items[i].name); \ prefix = ", "; \ } \ } \ @@ -104,10 +113,21 @@ int lc_opt_enum_ ## N ## _dump_vals(char *buf, size_t n, LC_UNUSED(const char *n const lc_opt_enum_ ## N ## _items_t *items = var->items; \ const char *prefix = ""; \ int i; \ + size_t l = strlen(buf); \ \ - for(i = 0; items[i].name != NULL; ++i) { \ - strncat(buf, prefix, n); \ - strncat(buf, items[i].name, n); \ + if (l >= n) \ + return (int)l; \ + n -= l; \ + n += 2; \ + for (i = 0; items[i].name != NULL; ++i) { \ + if (n <= 2) \ + break; \ + strcat(buf, prefix); n -= 2; \ + l = strlen(items[i].name); \ + if (n <= l) \ + break; \ + strcat(buf, items[i].name); \ + n -= l; \ prefix = ", "; \ } \ \