dead = 0;
fd = open(file, O_RDONLY);
- if(fd < 0) {
- fd = -errno;
+ if(fd < 0){
if(fd != -ENOENT){
printk("not_dead_yet : couldn't open pid file '%s', "
"err = %d\n", file, -fd);
err = 0;
n = read(fd, pid, sizeof(pid));
- if(n < 0){
- printk("not_dead_yet : couldn't read pid file '%s', "
- "err = %d\n", file, errno);
- goto out_close;
- } else if(n == 0){
+ if(n <= 0){
printk("not_dead_yet : couldn't read pid file '%s', "
- "0-byte read\n", file);
+ "err = %d\n", file, -n);
goto out_close;
}
goto out_close;
}
- if((kill(p, 0) == 0) || (errno != ESRCH)){
- printk("umid \"%s\" is already in use by pid %d\n", umid, p);
+ if((kill(p, 0) == 0) || (errno != ESRCH))
return 1;
- }
err = actually_do_remove(dir);
if(err)
return err;
-out_close:
+ out_close:
close(fd);
-out:
+ out:
return 0;
}
fd = open(file, O_RDWR | O_CREAT | O_EXCL, 0644);
if(fd < 0){
printk("Open of machine pid file \"%s\" failed: %s\n",
- file, strerror(errno));
+ file, strerror(-fd));
return;
}
snprintf(pid, sizeof(pid), "%d\n", getpid());
n = write(fd, pid, strlen(pid));
if(n != strlen(pid))
- printk("Write of pid file failed - err = %d\n", errno);
+ printk("Write of pid file failed - err = %d\n", -n);
close(fd);
}
err = mkdir(tmp, 0777);
if(err < 0){
err = -errno;
- if(err != -EEXIST)
+ if(errno != EEXIST)
goto err;
- /* 1 -> this umid is already in use
- * < 0 -> we couldn't remove the umid directory
- * In either case, we can't use this umid, so return -EEXIST.
- */
- if(not_dead_yet(tmp) != 0)
+ if(not_dead_yet(tmp) < 0)
goto err;
err = mkdir(tmp, 0777);
}
- if(err){
- err = -errno;
- printk("Failed to create '%s' - err = %d\n", umid, -errno);
- goto err;
+ if(err < 0){
+ printk("Failed to create '%s' - err = %d\n", umid, err);
+ goto err_rmdir;
}
umid_setup = 1;
create_pid_file();
- err = 0;
+ return 0;
+
+ err_rmdir:
+ rmdir(tmp);
err:
return err;
}
static int __init make_umid_init(void)
{
- if(!make_umid())
- return 0;
-
- /* If initializing with the given umid failed, then try again with
- * a random one.
- */
- printk("Failed to initialize umid \"%s\", trying with a random umid\n",
- umid);
- *umid = '\0';
make_umid();
return 0;