From: Alan Cox Date: Sun, 22 Oct 2017 18:40:23 +0000 (+0100) Subject: umount/remount: tidy up umount and add a remount X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=0f2e573f186d6fbf9e9fd06696dd548319928028;p=FUZIX.git umount/remount: tidy up umount and add a remount --- diff --git a/Applications/util/Makefile.6502 b/Applications/util/Makefile.6502 index 2b4336da..3a756741 100644 --- a/Applications/util/Makefile.6502 +++ b/Applications/util/Makefile.6502 @@ -79,6 +79,7 @@ SRCS = \ od.c \ passwd.c \ ps.c \ + remount.c \ sed.c \ sleep.c \ ssh.c \ diff --git a/Applications/util/Makefile.68000 b/Applications/util/Makefile.68000 index 3637faa7..1a55c68e 100644 --- a/Applications/util/Makefile.68000 +++ b/Applications/util/Makefile.68000 @@ -87,6 +87,7 @@ SRCS = \ od.c \ passwd.c \ ps.c \ + remount.c \ sed.c \ sleep.c \ ssh.c \ diff --git a/Applications/util/Makefile.6809 b/Applications/util/Makefile.6809 index 520f195a..3ce3b1e2 100644 --- a/Applications/util/Makefile.6809 +++ b/Applications/util/Makefile.6809 @@ -87,6 +87,7 @@ SRCS = \ od.c \ passwd.c \ ps.c \ + remount.c \ sed.c \ sleep.c \ ssh.c \ diff --git a/Applications/util/Makefile.z80 b/Applications/util/Makefile.z80 index 016e3655..51913851 100644 --- a/Applications/util/Makefile.z80 +++ b/Applications/util/Makefile.z80 @@ -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 index f5ea9ea6..00000000 --- a/Applications/util/fsck.h +++ /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 index 00000000..ed7ff008 --- /dev/null +++ b/Applications/util/remount.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include + +/* 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; +} diff --git a/Applications/util/umount.c b/Applications/util/umount.c index 252f3ba5..273d881b 100644 --- a/Applications/util/umount.c +++ b/Applications/util/umount.c @@ -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; }