2012-02-01 13:00:49 +03:00
|
|
|
#include <sys/socket.h>
|
|
|
|
#include <sys/un.h>
|
2013-07-29 13:12:00 +04:00
|
|
|
#include <sys/mount.h>
|
2012-02-01 13:00:49 +03:00
|
|
|
|
2012-03-28 17:36:00 +04:00
|
|
|
#include <errno.h>
|
|
|
|
|
|
|
|
#include "compiler.h"
|
2013-05-23 16:41:41 +04:00
|
|
|
#include "asm/string.h"
|
2013-01-09 17:02:47 +04:00
|
|
|
#include "asm/types.h"
|
2012-02-01 13:00:49 +03:00
|
|
|
#include "syscall.h"
|
2013-07-29 13:12:00 +04:00
|
|
|
#include "log.h"
|
2013-07-29 12:43:30 +04:00
|
|
|
#include "util-pie.h"
|
2012-03-28 17:36:00 +04:00
|
|
|
|
2013-07-29 13:12:00 +04:00
|
|
|
int open_detach_mount(char *dir)
|
|
|
|
{
|
2013-08-30 16:44:16 +04:00
|
|
|
int fd, ret;
|
2013-07-29 13:12:00 +04:00
|
|
|
|
|
|
|
fd = sys_open(dir, O_RDONLY | O_DIRECTORY, 0);
|
|
|
|
if (fd < 0)
|
2013-08-30 16:44:16 +04:00
|
|
|
pr_err("Can't open directory %s: %d\n", dir, fd);
|
2013-07-29 13:12:00 +04:00
|
|
|
|
2013-08-30 16:44:16 +04:00
|
|
|
ret = sys_umount2(dir, MNT_DETACH);
|
|
|
|
if (ret) {
|
|
|
|
pr_perror("Can't detach mount %s: %d\n", dir, ret);
|
2013-07-29 13:12:00 +04:00
|
|
|
goto err_close;
|
|
|
|
}
|
|
|
|
|
2013-08-30 16:44:16 +04:00
|
|
|
ret = sys_rmdir(dir);
|
|
|
|
if (ret) {
|
|
|
|
pr_perror("Can't remove tmp dir %s: %d\n", dir, ret);
|
2013-07-29 13:12:00 +04:00
|
|
|
goto err_close;
|
|
|
|
}
|
|
|
|
|
|
|
|
return fd;
|
|
|
|
|
|
|
|
err_close:
|
|
|
|
if (fd >= 0)
|
|
|
|
sys_close(fd);
|
|
|
|
return -1;
|
|
|
|
}
|