static void make_bad_inode(void) { struct minix1_inode *inode = &INODE_BUF1[MINIX_BAD_INO]; int i, j, zone; int ind = 0, dind = 0; /* moved to globals to reduce stack usage unsigned short ind_block[BLOCK_SIZE >> 1]; unsigned short dind_block[BLOCK_SIZE >> 1]; */ #define ind_block (G.ind_block1) #define dind_block (G.dind_block1) #define NEXT_BAD (zone = next(zone)) if (!G.badblocks) return; mark_inode(MINIX_BAD_INO); inode->i_nlinks = 1; /* BTW, setting this makes all images different */ /* it's harder to check for bugs then - diff isn't helpful :(... */ inode->i_time = CUR_TIME; inode->i_mode = S_IFREG + 0000; inode->i_size = G.badblocks * BLOCK_SIZE; zone = next(0); for (i = 0; i < 7; i++) { inode->i_zone[i] = zone; if (!NEXT_BAD) goto end_bad; } inode->i_zone[7] = ind = get_free_block(); memset(ind_block, 0, BLOCK_SIZE); for (i = 0; i < 512; i++) { ind_block[i] = zone; if (!NEXT_BAD) goto end_bad; } inode->i_zone[8] = dind = get_free_block(); memset(dind_block, 0, BLOCK_SIZE); for (i = 0; i < 512; i++) { write_block(ind, (char *) ind_block); dind_block[i] = ind = get_free_block(); memset(ind_block, 0, BLOCK_SIZE); for (j = 0; j < 512; j++) { ind_block[j] = zone; if (!NEXT_BAD) goto end_bad; } } bb_error_msg_and_die("too many bad blocks"); end_bad: if (ind) write_block(ind, (char *) ind_block); if (dind) write_block(dind, (char *) dind_block); #undef ind_block #undef dind_block }
static void make_bad_inode2(void) { struct minix2_inode *inode = &INODE_BUF2[MINIX_BAD_INO]; int i, j, zone; int ind = 0, dind = 0; /* moved to globals to reduce stack usage unsigned long ind_block[BLOCK_SIZE >> 2]; unsigned long dind_block[BLOCK_SIZE >> 2]; */ #define ind_block (G.ind_block2) #define dind_block (G.dind_block2) if (!G.badblocks) return; mark_inode(MINIX_BAD_INO); inode->i_nlinks = 1; inode->i_atime = inode->i_mtime = inode->i_ctime = CUR_TIME; inode->i_mode = S_IFREG + 0000; inode->i_size = G.badblocks * BLOCK_SIZE; zone = next(0); for (i = 0; i < 7; i++) { inode->i_zone[i] = zone; if (!NEXT_BAD) goto end_bad; } inode->i_zone[7] = ind = get_free_block(); memset(ind_block, 0, BLOCK_SIZE); for (i = 0; i < 256; i++) { ind_block[i] = zone; if (!NEXT_BAD) goto end_bad; } inode->i_zone[8] = dind = get_free_block(); memset(dind_block, 0, BLOCK_SIZE); for (i = 0; i < 256; i++) { write_block(ind, (char *) ind_block); dind_block[i] = ind = get_free_block(); memset(ind_block, 0, BLOCK_SIZE); for (j = 0; j < 256; j++) { ind_block[j] = zone; if (!NEXT_BAD) goto end_bad; } } /* Could make triple indirect block here */ bb_error_msg_and_die("too many bad blocks"); end_bad: if (ind) write_block(ind, (char *) ind_block); if (dind) write_block(dind, (char *) dind_block); #undef ind_block #undef dind_block }
void make_root_inode(void) { struct minix_inode * inode = &Inode[MINIX_ROOT_INO]; mark_inode(MINIX_ROOT_INO); inode->i_zone[0] = get_free_block(); inode->i_nlinks = 2; inode->i_time = time(NULL); root_block[2*dirsize] = '\0'; root_block[2*dirsize+1] = '\0'; inode->i_size = 2*dirsize; inode->i_mode = S_IFDIR + 0755; write_block(inode->i_zone[0],root_block); }
static void make_bad_inode(void) { struct minix_inode * inode = &Inode[MINIX_BAD_INO]; int i,j,zone; int ind=0,dind=0; unsigned short ind_block[BLOCK_SIZE>>1]; unsigned short dind_block[BLOCK_SIZE>>1]; #define NEXT_BAD (zone = next(zone)) if (!badblocks) return; mark_inode(MINIX_BAD_INO); inode->i_nlinks = 1; inode->i_time = time(NULL); inode->i_mode = S_IFREG + 0000; inode->i_size = badblocks*BLOCK_SIZE; zone = next(0); for (i=0 ; i<7 ; i++) { inode->i_zone[i] = zone; if (!NEXT_BAD) goto end_bad; } inode->i_zone[7] = ind = get_free_block(); memset(ind_block,0,BLOCK_SIZE); for (i=0 ; i<512 ; i++) { ind_block[i] = zone; if (!NEXT_BAD) goto end_bad; } inode->i_zone[8] = dind = get_free_block(); memset(dind_block,0,BLOCK_SIZE); for (i=0 ; i<512 ; i++) { write_block(ind,(char *) ind_block); dind_block[i] = ind = get_free_block(); memset(ind_block,0,BLOCK_SIZE); for (j=0 ; j<512 ; j++) { ind_block[j] = zone; if (!NEXT_BAD) goto end_bad; } } die(_("too many bad blocks")); end_bad: if (ind) write_block(ind, (char *) ind_block); if (dind) write_block(dind, (char *) dind_block); }
static void make_bad_inode_v1(struct fs_control *ctl) { struct minix_inode * inode = &Inode[MINIX_BAD_INO]; int i,j,zone; int ind=0,dind=0; unsigned short ind_block[MINIX_BLOCK_SIZE>>1]; unsigned short dind_block[MINIX_BLOCK_SIZE>>1]; #define NEXT_BAD (zone = next(zone)) if (!ctl->fs_bad_blocks) return; mark_inode(MINIX_BAD_INO); inode->i_nlinks = 1; inode->i_time = mkfs_minix_time(NULL); inode->i_mode = S_IFREG + 0000; inode->i_size = ctl->fs_bad_blocks * MINIX_BLOCK_SIZE; zone = next(0); for (i=0 ; i<7 ; i++) { inode->i_zone[i] = zone; if (!NEXT_BAD) goto end_bad; } inode->i_zone[7] = ind = get_free_block(ctl); memset(ind_block,0,MINIX_BLOCK_SIZE); for (i=0 ; i<512 ; i++) { ind_block[i] = zone; if (!NEXT_BAD) goto end_bad; } inode->i_zone[8] = dind = get_free_block(ctl); memset(dind_block,0,MINIX_BLOCK_SIZE); for (i=0 ; i<512 ; i++) { write_block(ctl, ind,(char *) ind_block); dind_block[i] = ind = get_free_block(ctl); memset(ind_block,0,MINIX_BLOCK_SIZE); for (j=0 ; j<512 ; j++) { ind_block[j] = zone; if (!NEXT_BAD) goto end_bad; } } errx(MKFS_EX_ERROR, _("%s: too many bad blocks"), ctl->device_name); end_bad: if (ind) write_block(ctl, ind, (char *) ind_block); if (dind) write_block(ctl, dind, (char *) dind_block); }
void make_root_inode(void) { struct minix_inode *inode = &Inode[MINIX_ROOT_INO]; mark_inode(MINIX_ROOT_INO); inode->i_zone[0] = get_free_block(); inode->i_nlinks = 2; inode->i_time = time(NULL); if (badblocks) inode->i_size = 48; else inode->i_size = 32; inode->i_mode = S_IFDIR + 0755; write_block(inode->i_zone[0],root_block); }
static void make_bad_inode2 (void) { struct minix2_inode *inode = &Inode2[MINIX_BAD_INO]; int i, j, zone; int ind = 0, dind = 0; unsigned long ind_block[BLOCK_SIZE >> 2]; unsigned long dind_block[BLOCK_SIZE >> 2]; if (!badblocks) return; mark_inode (MINIX_BAD_INO); inode->i_nlinks = 1; inode->i_atime = inode->i_mtime = inode->i_ctime = time (NULL); inode->i_mode = S_IFREG + 0000; inode->i_size = badblocks * BLOCK_SIZE; zone = next (0); for (i = 0; i < 7; i++) { inode->i_zone[i] = zone; if (!NEXT_BAD) goto end_bad; } inode->i_zone[7] = ind = get_free_block (); memset (ind_block, 0, BLOCK_SIZE); for (i = 0; i < 256; i++) { ind_block[i] = zone; if (!NEXT_BAD) goto end_bad; } inode->i_zone[8] = dind = get_free_block (); memset (dind_block, 0, BLOCK_SIZE); for (i = 0; i < 256; i++) { write_block (ind, (char *) ind_block); dind_block[i] = ind = get_free_block (); memset (ind_block, 0, BLOCK_SIZE); for (j = 0; j < 256; j++) { ind_block[j] = zone; if (!NEXT_BAD) goto end_bad; } } /* Could make triple indirect block here */ die (_("too many bad blocks")); end_bad: if (ind) write_block (ind, (char *) ind_block); if (dind) write_block (dind, (char *) dind_block); }
static void make_bad_inode_v2_v3 (struct fs_control *ctl) { struct minix2_inode *inode = &Inode2[MINIX_BAD_INO]; int i, j, zone; int ind = 0, dind = 0; unsigned long ind_block[MINIX_BLOCK_SIZE >> 2]; unsigned long dind_block[MINIX_BLOCK_SIZE >> 2]; if (!ctl->fs_bad_blocks) return; mark_inode (MINIX_BAD_INO); inode->i_nlinks = 1; inode->i_atime = inode->i_mtime = inode->i_ctime = mkfs_minix_time(NULL); inode->i_mode = S_IFREG + 0000; inode->i_size = ctl->fs_bad_blocks * MINIX_BLOCK_SIZE; zone = next (0); for (i = 0; i < 7; i++) { inode->i_zone[i] = zone; if (!NEXT_BAD) goto end_bad; } inode->i_zone[7] = ind = get_free_block (ctl); memset (ind_block, 0, MINIX_BLOCK_SIZE); for (i = 0; i < 256; i++) { ind_block[i] = zone; if (!NEXT_BAD) goto end_bad; } inode->i_zone[8] = dind = get_free_block (ctl); memset (dind_block, 0, MINIX_BLOCK_SIZE); for (i = 0; i < 256; i++) { write_block (ctl, ind, (char *) ind_block); dind_block[i] = ind = get_free_block (ctl); memset (ind_block, 0, MINIX_BLOCK_SIZE); for (j = 0; j < 256; j++) { ind_block[j] = zone; if (!NEXT_BAD) goto end_bad; } } /* Could make triple indirect block here */ errx(MKFS_EX_ERROR, _("%s: too many bad blocks"), ctl->device_name); end_bad: if (ind) write_block (ctl, ind, (char *) ind_block); if (dind) write_block (ctl, dind, (char *) dind_block); }
static void make_root_inode_v1(struct fs_control *ctl) { struct minix_inode * inode = &Inode[MINIX_ROOT_INO]; mark_inode(MINIX_ROOT_INO); inode->i_zone[0] = get_free_block(ctl); inode->i_nlinks = 2; inode->i_time = mkfs_minix_time(NULL); if (ctl->fs_bad_blocks) inode->i_size = 3 * ctl->fs_dirsize; else { memset(&root_block[2 * ctl->fs_dirsize], 0, ctl->fs_dirsize); inode->i_size = 2 * ctl->fs_dirsize; } inode->i_mode = S_IFDIR + 0755; inode->i_uid = getuid(); if (inode->i_uid) inode->i_gid = getgid(); write_block(ctl, inode->i_zone[0],root_block); }
static void make_root_inode_v1(void) { struct minix_inode * inode = &Inode[MINIX_ROOT_INO]; mark_inode(MINIX_ROOT_INO); inode->i_zone[0] = get_free_block(); inode->i_nlinks = 2; inode->i_time = time(NULL); if (badblocks) inode->i_size = 3*dirsize; else { root_block[2*dirsize] = '\0'; root_block[2*dirsize+1] = '\0'; inode->i_size = 2*dirsize; } inode->i_mode = S_IFDIR + 0755; inode->i_uid = getuid(); if (inode->i_uid) inode->i_gid = getgid(); write_block(inode->i_zone[0],root_block); }
static void make_root_inode2(void) { struct minix2_inode *inode = &INODE_BUF2[MINIX_ROOT_INO]; mark_inode(MINIX_ROOT_INO); inode->i_zone[0] = get_free_block(); inode->i_nlinks = 2; inode->i_atime = inode->i_mtime = inode->i_ctime = CUR_TIME; if (G.badblocks) inode->i_size = 3 * G.dirsize; else { G.root_block[2 * G.dirsize] = '\0'; G.root_block[2 * G.dirsize + 1] = '\0'; inode->i_size = 2 * G.dirsize; } inode->i_mode = S_IFDIR + 0755; inode->i_uid = GETUID; if (inode->i_uid) inode->i_gid = GETGID; write_block(inode->i_zone[0], G.root_block); }