/* vi: set sw=4 ts=4: */
/*
* Ask for a password
- * I use a static buffer in this function. Plan accordingly.
*
* Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
*
{
/* Was static char[BIGNUM] */
enum { sizeof_passwd = 128 };
- static char *passwd;
+ char *passwd;
char *ret;
int i;
struct sigaction sa, oldsa;
alarm(timeout);
}
- if (!passwd)
- passwd = xmalloc(sizeof_passwd);
+ passwd = auto_string(xmalloc(sizeof_passwd));
ret = passwd;
i = 0;
while (1) {
'\0', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'
};
- static char *str;
-
unsigned frac; /* 0..9 - the fractional digit */
const char *u;
const char *fmt;
#endif
}
- if (!str) {
- /* sufficient for any width of val */
- str = xmalloc(sizeof(val)*3 + 2 + 3);
- }
- sprintf(str, fmt, val, frac, *u);
- return str;
+ return auto_string(xasprintf(fmt, val, frac, *u));
}
static const char *get_variable(const char *variable, void *info)
{
- static char sbuf[sizeof(int)*3 + 2]; /* sign and NUL */
static char *hostname;
struct get_variable_info *gv_info = info;
const char *field_names[] = {
- "hostname", "mntpt", "devpath", "devname",
- "uid", "gid", "mode", hostname, mount_point,
- gv_info->devpath, gv_info->devname, NULL
+ "hostname", "mntpt", "devpath", "devname", "uid", "gid", "mode",
+ NULL, mount_point, gv_info->devpath, gv_info->devname, NULL
};
int i;
if (!hostname)
hostname = safe_gethostname();
+ field_names[7] = hostname;
+
/* index_in_str_array returns i>=0 */
i = index_in_str_array(field_names, variable);
return field_names[i + 7];
if (i == 4)
- sprintf(sbuf, "%u", gv_info->info->uid);
- else if (i == 5)
- sprintf(sbuf, "%u", gv_info->info->gid);
- else if (i == 6)
- sprintf(sbuf, "%o", gv_info->info->mode);
- return sbuf;
+ return auto_string(xasprintf("%u", gv_info->info->uid));
+ if (i == 5)
+ return auto_string(xasprintf("%u", gv_info->info->gid));
+ /* i == 6 */
+ return auto_string(xasprintf("%o", gv_info->info->mode));
} /* End Function get_variable */
static void service(struct stat statbuf, char *path)
/* Display an Internet socket address. */
static const char* FAST_FUNC INET_sprint(struct sockaddr *sap, int numeric)
{
- static char *buff; /* defaults to NULL */
-
if (sap->sa_family == 0xFFFF || sap->sa_family == 0)
return "[NONE SET]";
- free(buff);
- buff = INET_rresolve((struct sockaddr_in *) sap, numeric, 0xffffff00);
- return buff;
+ return auto_string(INET_rresolve((struct sockaddr_in *) sap, numeric, 0xffffff00));
}
#ifdef UNUSED_AND_BUGGY
/* dirty! struct sockaddr usually doesn't suffer for inet6 addresses, fst. */
static const char* FAST_FUNC INET6_sprint(struct sockaddr *sap, int numeric)
{
- static char *buff;
-
if (sap->sa_family == 0xFFFF || sap->sa_family == 0)
return "[NONE SET]";
- free(buff);
- buff = INET6_rresolve((struct sockaddr_in6 *) sap, numeric);
- return buff;
+ return auto_string(INET6_rresolve((struct sockaddr_in6 *) sap, numeric));
}
#ifdef UNUSED
/* Display an UNSPEC address. */
static char* FAST_FUNC UNSPEC_print(unsigned char *ptr)
{
- static char *buff;
-
+ char *buff;
char *pos;
unsigned int i;
- if (!buff)
- buff = xmalloc(sizeof(struct sockaddr) * 3 + 1);
+ buff = auto_string(xmalloc(sizeof(struct sockaddr) * 3 + 1));
pos = buff;
for (i = 0; i < sizeof(struct sockaddr); i++) {
/* careful -- not every libc's sprintf returns # bytes written */
/* Display an Ethernet address in readable format. */
static char* FAST_FUNC ether_print(unsigned char *ptr)
{
- static char *buff;
-
- free(buff);
+ char *buff;
buff = xasprintf("%02X:%02X:%02X:%02X:%02X:%02X",
(ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
(ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
);
- return buff;
+ return auto_string(buff);
}
static const struct hwtype ether_hwtype = {