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
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
\r
/* Initialize the super-block */\r
\r
- fs_super.s_mounted = SMOUNTED; /* Magic number */\r
- fs_super.s_isize = isize;\r
- fs_super.s_fsize = fsize;\r
- fs_super.s_nfree = 1;\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 = 8 * (isize-2) - 2;\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
- if (fs_super.s_nfree == 50)\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;\r
- fs_super.s_free[(fs_super.s_nfree)++] = j;\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 = 3;\r
- inode[ROOTINODE].i_size = 64;\r
- inode[ROOTINODE].i_addr[0] = isize;\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 = 1;\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