mkfs: remove dosendian damage
authorAlan Cox <alan@etchedpixels.co.uk>
Sun, 30 Nov 2014 20:44:39 +0000 (20:44 +0000)
committerAlan Cox <alan@etchedpixels.co.uk>
Sun, 30 Nov 2014 20:44:39 +0000 (20:44 +0000)
Standalone/mkfs.c

index 2deef27..6c686ce 100644 (file)
-\r
-/**************************************************\r
-UZI (Unix Z80 Implementation) Utilities:  mkfs.c\r
-***************************************************/\r
-\r
-#include <stdio.h>\r
-#include <stdint.h>\r
-#include <stdlib.h>\r
-#include <string.h>\r
-#include <sys/types.h>\r
-#include <unistd.h>\r
-#include <sys/stat.h>\r
-#include "fuzix_fs.h"\r
-\r
-/* This makes a filesystem \r
- *\r
- * example use:\r
- *   ./mkfs ./blankfs.img 64 4096\r
- * (this will write a 2MB filesystem with 64 blocks of inodes to ./blankfs.img)\r
- *\r
- * */\r
-\r
-char zero512[512];\r
-\r
-direct dirbuf[64] = { {ROOTINODE,"."},\r
-                      {ROOTINODE,".."} };\r
-struct dinode inode[8];\r
-int swizzling = 0;\r
-\r
-void mkfs(uint16_t fsize, uint16_t isize);\r
-void dwrite(uint16_t blk, char *addr);\r
-\r
-struct filesys fs_super;\r
-\r
-int main(int argc, char **argv)\r
-{\r
-    uint16_t fsize, isize;\r
-\r
-    if (argv[1] && strcmp(argv[1], "-X") == 0) {\r
-        swizzling = 1;\r
-        argv++;\r
-        argc--;\r
-    }\r
-    if (argc != 4)\r
-    {\r
-        printf("Usage: mkfs device isize fsize\n");\r
-        return -1;\r
-    }\r
-\r
-    if(sizeof(inode) != 512){\r
-        printf("inode is the wrong size -- %d\n", (int)sizeof(inode));\r
-    }\r
-\r
-    isize = (uint16_t)atoi(argv[2]);\r
-    fsize = (uint16_t)atoi(argv[3]);\r
-\r
-    if (fsize < 3 || isize < 2 || isize >= fsize)\r
-    {\r
-        printf("Bad parameter values\n");\r
-        return -1;\r
-    }\r
-\r
-    memset(zero512, 0, 512);\r
-\r
-    printf("Making filesystem on device %s with isize %u fsize %u.\n", argv[1], isize, fsize);\r
-\r
-    if (fd_open(argv[1]))\r
-    {\r
-        printf("Can't open device");\r
-        return -1;\r
-    }\r
-\r
-    mkfs(fsize, isize);\r
-\r
-    return 0;\r
-}\r
-\r
-void mkfs(uint16_t fsize, uint16_t isize)\r
-{\r
-    uint16_t j;\r
-\r
-    /* Zero out the blocks */\r
-\r
-    for (j=0; j < fsize; ++j)\r
-        dwrite(j, zero512);\r
-\r
-    /* Initialize the super-block */\r
-\r
-    fs_super.s_mounted = swizzle16(SMOUNTED); /* Magic number */\r
-    fs_super.s_isize =  swizzle16(isize);\r
-    fs_super.s_fsize =  swizzle16(fsize);\r
-    fs_super.s_nfree =  swizzle16(1);\r
-    fs_super.s_free[0] =  0;\r
-    fs_super.s_tfree =  0;\r
-    fs_super.s_ninode = 0;\r
-    fs_super.s_tinode =  swizzle16(8 * (isize-2) - 2);\r
-\r
-    /* Free each block, building the free list */\r
-    for (j= fsize-1; j >= isize+1; --j)\r
-    {\r
-        int n;\r
-        if (swizzle16(fs_super.s_nfree) == 50)\r
-        {\r
-            dwrite(j, (char *)&fs_super.s_nfree);\r
-            fs_super.s_nfree = 0;\r
-        }\r
-\r
-        fs_super.s_tfree = swizzle16(swizzle16(fs_super.s_tfree)+1);\r
-        n = swizzle16(fs_super.s_nfree);\r
-        fs_super.s_free[n++] = swizzle16(j);\r
-        fs_super.s_nfree = swizzle16(n);\r
-    }\r
-\r
-    /* The inodes are already zeroed out */\r
-    /* create the root dir */\r
-    inode[ROOTINODE].i_mode = F_DIR | (0777 & MODE_MASK);\r
-    inode[ROOTINODE].i_nlink = swizzle16(3);\r
-    inode[ROOTINODE].i_size = swizzle32(64);\r
-    inode[ROOTINODE].i_addr[0] = swizzle16(isize);\r
-\r
-    /* Reserve reserved inode */\r
-    inode[0].i_nlink = swizzle16(1);\r
-    inode[0].i_mode = ~0;\r
-\r
-    dwrite(2, (char *)inode);\r
-\r
-    dirbuf[0].d_ino = swizzle16(dirbuf[0].d_ino);\r
-    dirbuf[1].d_ino = swizzle16(dirbuf[1].d_ino);\r
-    dwrite(isize,(char *)dirbuf);\r
-\r
-    /* Write out super block */\r
-    dwrite(1,(char *)&fs_super);\r
-}\r
-\r
-void dwrite(uint16_t blk, char *addr)\r
-{\r
-    lseek(dev_fd, ((int)blk) * 512, SEEK_SET);\r
-    if (write(dev_fd, addr, 512) != 512) {\r
-        perror("write");\r
-        exit(1);\r
-    }\r
-}\r
+
+/**************************************************
+UZI (Unix Z80 Implementation) Utilities:  mkfs.c
+***************************************************/
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include "fuzix_fs.h"
+
+/* This makes a filesystem 
+ *
+ * example use:
+ *   ./mkfs ./blankfs.img 64 4096
+ * (this will write a 2MB filesystem with 64 blocks of inodes to ./blankfs.img)
+ *
+ * */
+
+char zero512[512];
+
+direct dirbuf[64] = { {ROOTINODE,"."},
+                      {ROOTINODE,".."} };
+struct dinode inode[8];
+int swizzling = 0;
+
+void mkfs(uint16_t fsize, uint16_t isize);
+void dwrite(uint16_t blk, char *addr);
+
+struct filesys fs_super;
+
+int main(int argc, char **argv)
+{
+    uint16_t fsize, isize;
+
+    if (argv[1] && strcmp(argv[1], "-X") == 0) {
+        swizzling = 1;
+        argv++;
+        argc--;
+    }
+    if (argc != 4)
+    {
+        printf("Usage: mkfs device isize fsize\n");
+        return -1;
+    }
+
+    if(sizeof(inode) != 512){
+        printf("inode is the wrong size -- %d\n", (int)sizeof(inode));
+    }
+
+    isize = (uint16_t)atoi(argv[2]);
+    fsize = (uint16_t)atoi(argv[3]);
+
+    if (fsize < 3 || isize < 2 || isize >= fsize)
+    {
+        printf("Bad parameter values\n");
+        return -1;
+    }
+
+    memset(zero512, 0, 512);
+
+    printf("Making filesystem on device %s with isize %u fsize %u.\n", argv[1], isize, fsize);
+
+    if (fd_open(argv[1]))
+    {
+        printf("Can't open device");
+        return -1;
+    }
+
+    mkfs(fsize, isize);
+
+    return 0;
+}
+
+void mkfs(uint16_t fsize, uint16_t isize)
+{
+    uint16_t j;
+
+    /* Zero out the blocks */
+
+    for (j=0; j < fsize; ++j)
+        dwrite(j, zero512);
+
+    /* Initialize the super-block */
+
+    fs_super.s_mounted = swizzle16(SMOUNTED); /* Magic number */
+    fs_super.s_isize =  swizzle16(isize);
+    fs_super.s_fsize =  swizzle16(fsize);
+    fs_super.s_nfree =  swizzle16(1);
+    fs_super.s_free[0] =  0;
+    fs_super.s_tfree =  0;
+    fs_super.s_ninode = 0;
+    fs_super.s_tinode =  swizzle16(8 * (isize-2) - 2);
+
+    /* Free each block, building the free list */
+    for (j= fsize-1; j >= isize+1; --j)
+    {
+        int n;
+        if (swizzle16(fs_super.s_nfree) == 50)
+        {
+            dwrite(j, (char *)&fs_super.s_nfree);
+            fs_super.s_nfree = 0;
+        }
+
+        fs_super.s_tfree = swizzle16(swizzle16(fs_super.s_tfree)+1);
+        n = swizzle16(fs_super.s_nfree);
+        fs_super.s_free[n++] = swizzle16(j);
+        fs_super.s_nfree = swizzle16(n);
+    }
+
+    /* The inodes are already zeroed out */
+    /* create the root dir */
+    inode[ROOTINODE].i_mode = F_DIR | (0777 & MODE_MASK);
+    inode[ROOTINODE].i_nlink = swizzle16(3);
+    inode[ROOTINODE].i_size = swizzle32(64);
+    inode[ROOTINODE].i_addr[0] = swizzle16(isize);
+
+    /* Reserve reserved inode */
+    inode[0].i_nlink = swizzle16(1);
+    inode[0].i_mode = ~0;
+
+    dwrite(2, (char *)inode);
+
+    dirbuf[0].d_ino = swizzle16(dirbuf[0].d_ino);
+    dirbuf[1].d_ino = swizzle16(dirbuf[1].d_ino);
+    dwrite(isize,(char *)dirbuf);
+
+    /* Write out super block */
+    dwrite(1,(char *)&fs_super);
+}
+
+void dwrite(uint16_t blk, char *addr)
+{
+    lseek(dev_fd, ((int)blk) * 512, SEEK_SET);
+    if (write(dev_fd, addr, 512) != 512) {
+        perror("write");
+        exit(1);
+    }
+}