int fuse_mnt_umount(const char *progname, const char *abs_mnt, const char *rel_mnt, int lazy) { int res; if (!mtab_needs_update(abs_mnt)) { res = umount2(rel_mnt, lazy ? 2 : 0); if (res == -1) fprintf(stderr, "%s: failed to unmount %s: %s\n", progname, abs_mnt, strerror(errno)); return res; } return exec_umount(progname, rel_mnt, lazy); }
static int do_umount() { pid_t pid; if((pid = fork()) == -1) { fprintf(stderr, "fork() failed\n"); exit(EXIT_FAILURE); } if(pid == 0) { exec_umount(); return -1; } else { return wait_status(pid); } }