78 #ifdef MISSING_STRERROR
81 extern char *sys_errlist[];
88 const char *strerror(
int err)
92 if (err < 0 || err >= sys_nerr) {
98 return (sys_errlist[errno]);
107 #ifdef MISSING_SETENV
115 int setenv(
const char *name,
const char *value,
int clobber)
119 if (clobber == 0 && getenv(name) != 0)
121 if ((cp = malloc(strlen(name) + strlen(value) + 2)) == 0)
123 sprintf(cp,
"%s=%s", name, value);
129 int unsetenv(
const char *name)
131 extern char **environ;
132 ssize_t name_len = strlen(name);
136 for (dst_pp = src_pp = environ; *src_pp; src_pp++, dst_pp++) {
137 if (strncmp(*src_pp, name, name_len) == 0
138 && *(*src_pp + name_len) ==
'=') {
140 }
else if (dst_pp != src_pp) {
153 #ifdef MISSING_SETEUID
154 #ifdef HAVE_SETRESUID
157 int seteuid(uid_t euid)
159 return setresuid(-1, euid, -1);
163 #error MISSING_SETEUID
168 #ifdef MISSING_SETEGID
169 #ifdef HAVE_SETRESGID
172 int setegid(gid_t egid)
174 return setresgid(-1, egid, -1);
178 #error MISSING_SETEGID
186 #ifdef MISSING_MKFIFO
188 #include <sys/stat.h>
190 int mkfifo(
char *path,
int mode)
192 return mknod(path, (mode & ~_S_IFMT) | _S_IFIFO, 0);
200 #ifdef MISSING_WAITPID
203 #include <sys/wait.h>
210 return wait4(pid, status, options, (
struct rusage *) 0);
214 #error MISSING_WAITPID
222 #ifdef MISSING_SETSID
224 #include <sys/ioctl.h>
241 fd = open(
"/dev/tty", O_RDONLY, 0);
242 if (fd >= 0 || errno != ENXIO) {
247 if (ioctl(fd, TIOCNOTTY, 0)) {
257 #error MISSING_SETSID
265 #ifdef DUP2_DUPS_CLOSE_ON_EXEC
269 int dup2_pass_on_exec(
int oldd,
int newd)
273 if ((res = dup2(oldd, newd)) >= 0)
281 #ifndef HAS_CLOSEFROM
305 for (fd = lowfd; fd < fd_limit; fd++)
313 #ifdef MISSING_INET_NTOP
315 #include <sys/types.h>
316 #include <sys/socket.h>
317 #include <netinet/in.h>
318 #include <arpa/inet.h>
327 const unsigned char *addr;
328 char buffer[
sizeof(
"255.255.255.255")];
332 errno = EAFNOSUPPORT;
335 addr = (
const unsigned char *) src;
337 sprintf(buffer,
"%d.%d.%d.%d", addr[0] & 0xff,
338 addr[1] & 0xff, addr[2] & 0xff, addr[3] & 0xff);
340 sprintf(buffer,
"%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]);
342 if ((len = strlen(buffer)) >= size) {
346 memcpy(dst, buffer, len + 1);
353 #ifdef MISSING_INET_PTON
355 #include <sys/types.h>
356 #include <sys/socket.h>
357 #include <netinet/in.h>
358 #include <arpa/inet.h>
363 #define INADDR_NONE 0xffffffff
378 errno = EAFNOSUPPORT;
380 }
else if ((addr.s_addr = inet_addr(src)) ==
INADDR_NONE
381 && strcmp(src,
"255.255.255.255") != 0) {
384 memcpy(dst, (
void *) &addr,
sizeof(addr));
const char * inet_ntop(int af, const void *src, char *dst, SOCKADDR_SIZE size)
void msg_warn(const char *fmt,...)
VSTRING * vstring_alloc(ssize_t len)
int inet_pton(int af, const char *src, void *dst)
VSTRING * vstring_sprintf(VSTRING *vp, const char *format,...)
int close_on_exec(int fd, int on)