+
/*
* Copyright (c) 1999-2004 Damien Miller <djm@mindrot.org>
*
RCSID("$Id$");
+#ifndef HAVE___PROGNAME
+char *__progname;
+#endif
+
/*
* NB. duplicate __progname in case it is an alias for argv[0]
* Otherwise it may get clobbered by setproctitle()
}
#endif /* HAVE_TRUNCATE */
-#if !defined(HAVE_SETGROUPS) && defined(SETGROUPS_NOOP)
-/*
- * Cygwin setgroups should be a noop.
- */
-int
-setgroups(size_t size, const gid_t *list)
-{
- return (0);
-}
-#endif
-
#if !defined(HAVE_NANOSLEEP) && !defined(HAVE_NSLEEP)
int nanosleep(const struct timespec *req, struct timespec *rem)
{
return (signal(sig, act));
#endif
}
+
+#ifndef HAVE_STRDUP
+char *
+strdup(const char *str)
+{
+ size_t len;
+ char *cp;
+
+ len = strlen(str) + 1;
+ cp = malloc(len);
+ if (cp != NULL)
+ if (strlcpy(cp, str, len) != len) {
+ free(cp);
+ return NULL;
+ }
+ return cp;
+}
+#endif