AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
stdlib.h string.h unistd.h sys/param.h])
AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \
-getgid getuid mempcpy munmap putenv setlocale stpcpy strchr strcasecmp \
+getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
MUTT_AM_ICONV
/* prototypes for compatibility functions */
+#ifndef HAVE_SETENV
+int setenv (const char *, const char *, int);
+#endif
+
#ifndef HAVE_STRCASECMP
int strcasecmp (char *, char *);
int strncasecmp (char *, char *, size_t);
--- /dev/null
+/* Replacement for a missing setenv.
+**
+** Written by Russ Allbery <rra@stanford.edu>
+** This work is hereby placed in the public domain by its author.
+**
+** Provides the same functionality as the standard library routine setenv
+** for those platforms that don't have it.
+*/
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+int
+setenv(const char *name, const char *value, int overwrite)
+{
+ char *envstring;
+
+ if (!overwrite && getenv(name) != NULL)
+ return 0;
+
+ /* Allocate memory for the environment string. We intentionally don't
+ use concat here, or the xmalloc family of allocation routines, since
+ the intention is to provide a replacement for the standard library
+ function which sets errno and returns in the event of a memory
+ allocation failure. */
+ envstring = malloc(strlen(name) + 1 + strlen(value) + 1); /* __MEM_CHECKED__ */
+ if (envstring == NULL)
+ return -1;
+
+ /* Build the environment string and add it to the environment using
+ putenv. Systems without putenv lose, but XPG4 requires it. */
+ strcpy(envstring, name); /* __STRCPY_CHECKED__ */
+ strcat(envstring, "="); /* __STRCAT_CHECKED__ */
+ strcat(envstring, value); /* __STRCAT_CHECKED__ */
+ return putenv(envstring);
+
+ /* Note that the memory allocated is not freed. This is intentional;
+ many implementations of putenv assume that the string passed to
+ putenv will never be freed and don't make a copy of it. Repeated use
+ of this function will therefore leak memory, since most
+ implementations of putenv also don't free strings removed from the
+ environment (due to being overwritten). */
+}