umount/remount: tidy up umount and add a remount
authorAlan Cox <alan@linux.intel.com>
Sun, 22 Oct 2017 18:40:23 +0000 (19:40 +0100)
committerAlan Cox <alan@linux.intel.com>
Sun, 22 Oct 2017 18:40:23 +0000 (19:40 +0100)
Applications/util/Makefile.6502
Applications/util/Makefile.68000
Applications/util/Makefile.6809
Applications/util/Makefile.z80
Applications/util/fsck.h [deleted file]
Applications/util/remount.c [new file with mode: 0644]
Applications/util/umount.c

index 2b4336d..3a75674 100644 (file)
@@ -79,6 +79,7 @@ SRCS  = \
        od.c \
        passwd.c \
        ps.c \
+       remount.c \
        sed.c \
        sleep.c \
        ssh.c \
index 3637faa..1a55c68 100644 (file)
@@ -87,6 +87,7 @@ SRCS  = \
        od.c \
        passwd.c \
        ps.c \
+       remount.c \
        sed.c \
        sleep.c \
        ssh.c \
index 520f195..3ce3b1e 100644 (file)
@@ -87,6 +87,7 @@ SRCS  = \
        od.c \
        passwd.c \
        ps.c \
+       remount.c \
        sed.c \
        sleep.c \
        ssh.c \
index 016e365..5191385 100644 (file)
@@ -82,6 +82,7 @@ SRCS  = banner.c \
        od.c \
        passwd.c \
        ps.c \
+       remount.c \
        sleep.c \
        ssh.c \
        sort.c \
diff --git a/Applications/util/fsck.h b/Applications/util/fsck.h
deleted file mode 100644 (file)
index f5ea9ea..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#define __UZIFS_DOT_H__
-
-#define ROOTINODE 1
-#define SMOUNTED 12742   /* Magic number to specify mounted filesystem */
-#define SMOUNTED_WRONGENDIAN 50737U   /* byteflipped */
-
-extern int dev_fd;
-extern int dev_offset;
-int fd_open(char *name);
-void panic(char *s);
-
-extern uint16_t swizzle16(uint32_t v);
-extern uint32_t swizzle32(uint32_t v);
-extern int swizzling;
-
-struct direct {
-        uint16_t d_ino;
-        char     d_name[30];
-};
-
-typedef uint16_t blkno_t;    /* Can have 65536 512-byte blocks in filesystem */
-
-struct dinode {
-    uint16_t   i_mode;
-    uint16_t   i_nlink;
-    uint16_t   i_uid;
-    uint16_t   i_gid;
-    uint32_t    i_size;
-    uint32_t   i_atime;
-    uint32_t   i_mtime;
-    uint32_t   i_ctime;
-    blkno_t    i_addr[20];
-};               /* Exactly 64 bytes long! */
-
-#define F_REG   0100000
-#define F_DIR   040000
-#define F_PIPE  010000
-#define F_BDEV  060000
-#define F_CDEV  020000
-
-#define F_MASK  0170000
-
-struct filesys {
-    uint16_t    s_mounted;
-    uint16_t    s_isize;
-    uint16_t    s_fsize;
-    int16_t     s_nfree;
-    blkno_t     s_free[50];
-    int16_t     s_ninode;
-    uint16_t    s_inode[50];
-    uint8_t     s_fmod;
-    uint8_t    s_timeh;        /* top bits of time */
-    uint32_t    s_time;
-    blkno_t     s_tfree;
-    uint16_t    s_tinode;
-    uint16_t    s_mntpt;
-};
diff --git a/Applications/util/remount.c b/Applications/util/remount.c
new file mode 100644 (file)
index 0000000..ed7ff00
--- /dev/null
@@ -0,0 +1,58 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/mount.h>
+
+/* Assumed length of a line in /etc/mtab */
+#define MTAB_LINE 160
+
+char *getdev(char *arg)
+{
+       FILE *f;
+       char tmp[MTAB_LINE];
+       char* dev;
+       char* mntpt;
+
+       f = fopen("/etc/mtab", "r");
+       if (f) {
+               while (fgets(tmp, sizeof(tmp), f)) {
+                       dev = strtok(tmp, " ");
+                       mntpt = strtok(NULL, " ");
+                       if ((strcmp(dev, arg) == 0) || (strcmp(mntpt, arg) == 0)) {
+                               fclose(f);
+                               return strdup(dev);
+                       }
+               }
+               fclose(f);
+       }
+       return NULL;
+}
+
+int main(int argc, char *argv[])
+{
+       char *dev;
+       unsigned int flags;
+       
+       if (argc != 3) {
+               fprintf(stderr, "%s: remount device [ro][rw]\n", argv[0]);
+               return 1;
+       }
+
+       dev = getdev(argv[1]);
+       if (!dev) dev = argv[1];
+       
+       if (strcmp(argv[2], "ro") == 0)
+               flags = MS_RDONLY|MS_REMOUNT;
+       else if (strcmp(argv[2], "rw") == 0)
+               flags = MS_REMOUNT;
+       else {
+               fprintf(stderr, "%s: ro or rw required.\n", argv[0]);
+               return 1;
+       }
+       
+       if (remount(dev, flags)) {
+               perror("umount");
+               return 1;
+       }
+       return 0;
+}
index 252f3ba..273d881 100644 (file)
@@ -36,7 +36,6 @@ int rm_mtab(char *devname)
        static char tmp[MTAB_LINE];
        static char tmp2[MTAB_LINE];
        char* dev;
-       char* mntpt;
 
        if ((tmp_fname = tmpnam(NULL)) == NULL) {
                perror("Error getting temporary file name");
@@ -79,7 +78,7 @@ int main(int argc, char *argv[])
        char *dev;
        
        if (argc != 2) {
-               printf("usage: umount device\n");
+               fprintf(stderr, "%s: umount device\n", argv[0]);
                return 1;
        }