diff options
author | Elliott Hughes <enh@google.com> | 2015-04-02 21:24:34 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2015-04-02 21:24:34 -0700 |
commit | 17cb719e10b434ba1f30bfb335bbfb7c9d26c466 (patch) | |
tree | c32de14f4b23b2277a70338ccb87989db5c71b95 /toolbox | |
parent | 70df6f85fe8164010be3e4e1cf87e1dd31fb7614 (diff) | |
download | core-17cb719e10b434ba1f30bfb335bbfb7c9d26c466.tar.gz core-17cb719e10b434ba1f30bfb335bbfb7c9d26c466.tar.bz2 core-17cb719e10b434ba1f30bfb335bbfb7c9d26c466.zip |
Lose umount to toybox.
Change-Id: Ide35731c37d70ccb38a5e84b7310434ce6c3aa6e
Diffstat (limited to 'toolbox')
-rw-r--r-- | toolbox/Android.mk | 1 | ||||
-rw-r--r-- | toolbox/umount.c | 90 |
2 files changed, 0 insertions, 91 deletions
diff --git a/toolbox/Android.mk b/toolbox/Android.mk index ff001a878..186a89fe4 100644 --- a/toolbox/Android.mk +++ b/toolbox/Android.mk @@ -60,7 +60,6 @@ OUR_TOOLS := \ start \ stop \ top \ - umount \ uptime \ watchprops \ diff --git a/toolbox/umount.c b/toolbox/umount.c deleted file mode 100644 index 3e1739697..000000000 --- a/toolbox/umount.c +++ /dev/null @@ -1,90 +0,0 @@ - -#include <sys/mount.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <linux/loop.h> -#include <errno.h> - -#define LOOPDEV_MAXLEN 64 -#define LOOP_MAJOR 7 - -static int is_loop(char *dev) -{ - struct stat st; - int ret = 0; - - if (stat(dev, &st) == 0) { - if (S_ISBLK(st.st_mode) && (major(st.st_rdev) == LOOP_MAJOR)) { - ret = 1; - } - } - - return ret; -} - -static int is_loop_mount(const char* path, char *loopdev) -{ - FILE* f; - int count; - char device[256]; - char mount_path[256]; - char rest[256]; - int result = 0; - - f = fopen("/proc/mounts", "r"); - if (!f) { - fprintf(stdout, "could not open /proc/mounts: %s\n", strerror(errno)); - return -1; - } - - do { - count = fscanf(f, "%255s %255s %255s\n", device, mount_path, rest); - if (count == 3) { - if (is_loop(device) && strcmp(path, mount_path) == 0) { - strlcpy(loopdev, device, LOOPDEV_MAXLEN); - result = 1; - break; - } - } - } while (count == 3); - - fclose(f); - return result; -} - -int umount_main(int argc, char *argv[]) -{ - int loop, loop_fd; - char loopdev[LOOPDEV_MAXLEN]; - - if(argc != 2) { - fprintf(stderr,"umount <path>\n"); - return 1; - } - - loop = is_loop_mount(argv[1], loopdev); - if (umount(argv[1])) { - fprintf(stderr, "failed: %s\n", strerror(errno)); - return 1; - } - - if (loop) { - // free the loop device - loop_fd = open(loopdev, O_RDONLY); - if (loop_fd < 0) { - fprintf(stderr, "open loop device failed: %s\n", strerror(errno)); - return 1; - } - if (ioctl(loop_fd, LOOP_CLR_FD, 0) < 0) { - fprintf(stderr, "ioctl LOOP_CLR_FD failed: %s\n", strerror(errno)); - return 1; - } - - close(loop_fd); - } - - return 0; -} |