Greg Banks suggested some variations, particularly improved
use of xmalloc/xstrdup functions. Thanks.
struct stat stb, pstb;
int rv;
- dotdot = malloc(strlen(path)+4);
- if (!dotdot)
- return 0;
+ dotdot = xmalloc(strlen(path)+4);
+
strcat(strcpy(dotdot, path), "/..");
if (lstat(path, &stb) != 0 ||
lstat(dotdot, &pstb) != 0)
if (noclose == 0) {
tempfd = open("/dev/null", O_RDWR);
+ if (tempfd < 0)
+ tempfd = open("/", O_RDONLY);
if (tempfd >= 0) {
dup2(tempfd, 0);
dup2(tempfd, 1);
dup2(tempfd, 2);
- }
- closeall(3);
+ closeall(3);
+ } else
+ closeall(0);
}
return;
{
notify_list *new;
- if (!(new = (notify_list *) xmalloc(sizeof(notify_list))))
- return NULL;
+ new = (notify_list *) xmalloc(sizeof(notify_list));
memset(new, 0, sizeof(*new));
NL_TIMES(new) = MAX_TRIES;
NL_STATE(new) = state;
- if (!(NL_MY_NAME(new) = xstrdup(my_name))
- || !(NL_MON_NAME(new) = xstrdup(mon_name))) {
- if (NL_MY_NAME(new))
- free(NL_MY_NAME(new));
- free(new);
- return NULL;
- }
+ NL_MY_NAME(new) = xstrdup(my_name);
+ NL_MON_NAME(new) = xstrdup(mon_name);
return new;
}