+++ /dev/null
-#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;
-};
--- /dev/null
+#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;
+}
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");
char *dev;
if (argc != 2) {
- printf("usage: umount device\n");
+ fprintf(stderr, "%s: umount device\n", argv[0]);
return 1;
}