diff options
Diffstat (limited to 'libcutils')
-rw-r--r-- | libcutils/android_reboot.c | 33 |
1 files changed, 9 insertions, 24 deletions
diff --git a/libcutils/android_reboot.c b/libcutils/android_reboot.c index 5d98295..aa86206 100644 --- a/libcutils/android_reboot.c +++ b/libcutils/android_reboot.c @@ -20,6 +20,7 @@ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> +#include <mntent.h> #include <stdio.h> #include <string.h> @@ -33,37 +34,21 @@ */ static int remount_ro_done(void) { - FILE *f; - char mount_dev[256]; - char mount_dir[256]; - char mount_type[256]; - char mount_opts[256]; - int mount_freq; - int mount_passno; - int match; + FILE* fp; + struct mntent* mentry; int found_rw_fs = 0; - f = fopen("/proc/mounts", "r"); - if (! f) { - /* If we can't read /proc/mounts, just give up */ + if ((fp = setmntent("/proc/mounts", "r")) == NULL) { + /* If we can't read /proc/mounts, just give up. */ return 1; } - - do { - match = fscanf(f, "%255s %255s %255s %255s %d %d\n", - mount_dev, mount_dir, mount_type, - mount_opts, &mount_freq, &mount_passno); - mount_dev[255] = 0; - mount_dir[255] = 0; - mount_type[255] = 0; - mount_opts[255] = 0; - if ((match == 6) && !strncmp(mount_dev, "/dev/block", 10) && strstr(mount_opts, "rw,")) { + while ((mentry = getmntent(fp)) != NULL) { + if (!strncmp(mentry->mnt_fsname, "/dev/block", 10) && strstr(mentry->mnt_opts, "rw,")) { found_rw_fs = 1; break; } - } while (match != EOF); - - fclose(f); + } + endmntent(fp); return !found_rw_fs; } |