#include <sm/gen.h>
SM_RCSID("@(#)$Id: config.c,v 1.31 2007/03/14 21:21:49 ca Exp $")
#include <stdlib.h>
#include <sm/heap.h>
#include <sm/string.h>
#include <sm/conf.h>
#if NEEDPUTENV
# if NEEDPUTENV == 2
int
putenv(str)
char *str;
{
char **current;
int matchlen, envlen = 0;
char *tmp;
char **newenv;
static bool first = true;
extern char **environ;
if ((tmp = strchr(str, '=')) == NULL || tmp == str)
matchlen = strlen(str);
else
matchlen = (int) (tmp - str);
++matchlen;
for (current = environ; *current != NULL; current++)
{
++envlen;
if (strncmp(str, *current, matchlen) == 0)
{
*current = (char *) str;
return 0;
}
}
if (first)
{
newenv = (char **) sm_malloc(sizeof(char *) * (envlen + 2));
if (newenv == NULL)
return -1;
first = false;
(void) memcpy(newenv, environ, sizeof(char *) * envlen);
}
else
{
newenv = (char **) sm_realloc((char *) environ,
sizeof(char *) * (envlen + 2));
if (newenv == NULL)
return -1;
}
environ = newenv;
environ[envlen] = (char *) str;
environ[envlen + 1] = NULL;
return 0;
}
# else
int
putenv(env)
char *env;
{
char *p;
int l;
char nbuf[100];
p = strchr(env, '=');
if (p == NULL)
return 0;
l = p - env;
if (l > sizeof nbuf - 1)
l = sizeof nbuf - 1;
memmove(nbuf, env, l);
nbuf[l] = '\0';
return setenv(nbuf, ++p, 1);
}
# endif
#endif
#if !HASUNSETENV
void
unsetenv(name)
char *name;
{
extern char **environ;
register char **pp;
int len = strlen(name);
for (pp = environ; *pp != NULL; pp++)
{
if (strncmp(name, *pp, len) == 0 &&
((*pp)[len] == '=' || (*pp)[len] == '\0'))
break;
}
for (; *pp != NULL; pp++)
*pp = pp[1];
}
#endif
char *SmCompileOptions[] =
{
#if SM_CONF_BROKEN_STRTOD
"SM_CONF_BROKEN_STRTOD",
#endif
#if SM_CONF_GETOPT
"SM_CONF_GETOPT",
#endif
#if SM_CONF_LDAP_INITIALIZE
"SM_CONF_LDAP_INITIALIZE",
#endif
#if SM_CONF_LDAP_MEMFREE
"SM_CONF_LDAP_MEMFREE",
#endif
#if SM_CONF_LONGLONG
"SM_CONF_LONGLONG",
#endif
#if SM_CONF_MEMCHR
"SM_CONF_MEMCHR",
#endif
#if SM_CONF_MSG
"SM_CONF_MSG",
#endif
#if SM_CONF_QUAD_T
"SM_CONF_QUAD_T",
#endif
#if SM_CONF_SEM
"SM_CONF_SEM",
#endif
#if SM_CONF_SETITIMER
"SM_CONF_SETITIMER",
#endif
#if SM_CONF_SIGSETJMP
"SM_CONF_SIGSETJMP",
#endif
#if SM_CONF_SHM
"SM_CONF_SHM",
#endif
#if SM_CONF_SHM_DELAY
"SM_CONF_SHM_DELAY",
#endif
#if SM_CONF_SSIZE_T
"SM_CONF_SSIZE_T",
#endif
#if SM_CONF_STDBOOL_H
"SM_CONF_STDBOOL_H",
#endif
#if SM_CONF_STDDEF_H
"SM_CONF_STDDEF_H",
#endif
#if 0
#if SM_CONF_STRL
"SM_CONF_STRL",
#endif
#endif
#if SM_CONF_SYS_CDEFS_H
"SM_CONF_SYS_CDEFS_H",
#endif
#if SM_CONF_SYSEXITS_H
"SM_CONF_SYSEXITS_H",
#endif
#if SM_CONF_UID_GID
"SM_CONF_UID_GID",
#endif
#if DO_NOT_USE_STRCPY
"DO_NOT_USE_STRCPY",
#endif
#if SM_HEAP_CHECK
"SM_HEAP_CHECK",
#endif
#if defined(SM_OS_NAME) && defined(__STDC__)
"SM_OS=sm_os_" SM_OS_NAME,
#endif
#if SM_VA_STD
"SM_VA_STD",
#endif
#if USEKSTAT
"USEKSTAT",
#endif
#if USEPROCMEMINFO
"USEPROCMEMINFO",
#endif
#if USESWAPCTL
"USESWAPCTL",
#endif
NULL
};