diff options
Diffstat (limited to 'main/strcompat.c')
-rw-r--r-- | main/strcompat.c | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/main/strcompat.c b/main/strcompat.c index 03c304144..dcd84d876 100644 --- a/main/strcompat.c +++ b/main/strcompat.c @@ -68,12 +68,12 @@ int setenv(const char *name, const char *value, int overwrite) unsigned char *buf; int buflen; - buflen = strlen(name) + strlen(value) + 2; - buf = alloca(buflen); - if (!overwrite && getenv(name)) return 0; + buflen = strlen(name) + strlen(value) + 2; + buf = ast_alloca(buflen); + snprintf(buf, buflen, "%s=%s", name, value); return putenv(buf); @@ -105,23 +105,19 @@ static char *upper(const char *orig, char *buf, int bufsize) char *strcasestr(const char *haystack, const char *needle) { char *u1, *u2; + char *offset; int u1len = strlen(haystack) + 1, u2len = strlen(needle) + 1; - u1 = alloca(u1len); - u2 = alloca(u2len); - if (u1 && u2) { - char *offset; - if (u2len > u1len) { - /* Needle bigger than haystack */ - return NULL; - } - offset = strstr(upper(haystack, u1, u1len), upper(needle, u2, u2len)); - if (offset) { - /* Return the offset into the original string */ - return ((char *)((unsigned long)haystack + (unsigned long)(offset - u1))); - } else { - return NULL; - } + if (u2len > u1len) { + /* Needle bigger than haystack */ + return NULL; + } + u1 = ast_alloca(u1len); + u2 = ast_alloca(u2len); + offset = strstr(upper(haystack, u1, u1len), upper(needle, u2, u2len)); + if (offset) { + /* Return the offset into the original string */ + return ((char *)((unsigned long)haystack + (unsigned long)(offset - u1))); } else { return NULL; } |