}
-void insert_bit (FILE *fp, unsigned long block, int bit) {
+void insert_bit (FILE *fp, unsigned long block, int bit, int count) {
- int w, s;
+ int w, s, i;
memset (buffer, 0, sizeof (buffer));
get_block (fp, block, buffer);
- w = bit / 8;
- s = bit % 8;
+ for (i = bit; i < bit + count; i++) {
+
+ w = i / 8;
+ s = i % 8;
+
+ buffer[w] |= (1 << s);
+
+ }
- buffer[w] |= (1 << s);
put_block (fp, block, buffer);
}
void incr_link (FILE *fp, int n);
int get_bit (FILE *fp, unsigned long block, int bit);
-void insert_bit (FILE *fp, unsigned long block, int bit);
+void insert_bit (FILE *fp, unsigned long block, int bit, int count);
int mode_con (char *p);
struct inode {
unsigned char i_mode[2];
- unsigned char uid[2];
+ unsigned char i_uid[2];
unsigned char i_size[4];
unsigned char i_mod_time[4];
- unsigned char gid;
+ unsigned char i_gid;
unsigned char i_nlinks;
unsigned char i_zone[NR_TZONES * 2];
off = (ino - 1) % INODES_PER_BLOCK;
write_to_byte_array (inode[off].i_mode, mode, 2);
- write_to_byte_array (inode[off].uid, userid, 2);
+ write_to_byte_array (inode[off].i_uid, userid, 2);
- inode[off].gid = groupid;
+ inode[off].i_gid = groupid;
put_block (fp, block, inode);
- insert_bit (fp, INODE_MAP, ino);
+ insert_bit (fp, INODE_MAP, ino, 1);
return ino;
}
put_block (fp, block + i, buf);
}
- insert_bit (fp, zone_map, zone - zone_off);
+ insert_bit (fp, zone_map, zone - zone_off, 1);
return zone;
}
off = (num - 1) % INODES_PER_BLOCK;
write_to_byte_array (inode[off].i_mode, mode, 2);
- write_to_byte_array (inode[off].uid, userid, 2);
+ write_to_byte_array (inode[off].i_uid, userid, 2);
- inode[off].gid = groupid;
+ inode[off].i_gid = groupid;
put_block (fp, b, inode);
- insert_bit (fp, INODE_MAP, num);
+ insert_bit (fp, INODE_MAP, num, 1);
return num;
}
put_block (fp, b + i, buf);
}
- insert_bit (fp, zone_map, z - zone_off);
+ insert_bit (fp, zone_map, z - zone_off, 1);
return z;
}
unsigned long inode_blocks, init_blocks;
unsigned long s_imap_blocks, s_zmap_blocks, s_first_data_zone;
+ unsigned long nrzones, init_zones;
unsigned long zo;
struct super_block *sup;
inode_offset = s_imap_blocks + s_zmap_blocks + 2;
init_blocks = inode_offset + inode_blocks;
+ init_zones = (init_blocks + (1 << zone_shift) - 1) >> zone_shift;
+
+ nrzones = nzones >> zone_shift;
s_first_data_zone = (init_blocks + (1 << zone_shift) - 1) >> zone_shift;
write_to_byte_array (sup->s_first_data_zone, s_first_data_zone, 2);
zone_map = INODE_MAP + s_imap_blocks;
- insert_bit (ofp, zone_map, 0);
- insert_bit (ofp, INODE_MAP, 0);
+ insert_bit (ofp, zone_map, 0, 1);
+ insert_bit (ofp, INODE_MAP, 0, 1);
zone_size = 1 << zone_shift;
zone_off = s_first_data_zone - 1;
+
+ insert_bit (ofp, zone_map, nrzones - init_zones + 1, 8 * BLOCK_SIZE - (nrzones - init_zones + 1));
+ insert_bit (ofp, INODE_MAP, inodes + 1, 8 * BLOCK_SIZE - inodes - 1);
}
size = ((unsigned long) ip2->i_size[0]) | (((unsigned long) ip2->i_size[1]) << 8) | (((unsigned long) ip2->i_size[2]) << 16) | (((unsigned long) ip2->i_size[3]) << 24);
printf (" %10lu", size);
- uid = ((unsigned long) ip2->uid[0]) | (((unsigned long) ip2->uid[1]) << 8);
+ uid = ((unsigned long) ip2->i_uid[0]) | (((unsigned long) ip2->i_uid[1]) << 8);
printf (" %2ld", uid);
mod_time = ((unsigned long) ip2->i_mod_time[0]) | (((unsigned long) ip2->i_mod_time[1]) << 8) | (((unsigned long) ip2->i_mod_time[2]) << 16) | (((unsigned long) ip2->i_mod_time[3]) << 24);
strftime (dt, sizeof (dt), "%Y-%m-%d %H:%M:%S", localtime (&mod_time));
/*strftime (dt, sizeof (dt), "%b %d %Y %H:%M:%S", localtime (&mod_time));*/
- printf (" %2d %s %s\n", ip2->gid, dt, dep->d_name);
+ printf (" %2d %s %s\n", ip2->i_gid, dt, dep->d_name);
}
size = ((unsigned long) ip1->i_size[0]) | (((unsigned long) ip1->i_size[1]) << 8) | (((unsigned long) ip1->i_size[2]) << 16) | (((unsigned long) ip1->i_size[3]) << 24);
sprintf (buf + 14, " %10lu", size);
- uid = ((unsigned long) ip1->uid[0]) | (((unsigned long) ip1->uid[1]) << 8);
+ uid = ((unsigned long) ip1->i_uid[0]) | (((unsigned long) ip1->i_uid[1]) << 8);
sprintf (buf + 26, " %2ld", uid);
mod_time = ((unsigned long) ip1->i_mod_time[0]) | (((unsigned long) ip1->i_mod_time[1]) << 8) | (((unsigned long) ip1->i_mod_time[2]) << 16) | (((unsigned long) ip1->i_mod_time[3]) << 24);
strftime (dt, sizeof (dt), "%Y-%m-%d %H:%M:%S", localtime (&mod_time));
/*strftime (dt, sizeof (dt), "%b %d %Y %H:%M:%S", localtime (&mod_time));*/
- sprintf (buf + 30, " %2d %s %s", ip1->gid, dt, fn);
+ sprintf (buf + 30, " %2d %s %s", ip1->i_gid, dt, fn);
dynarray_add (&files, &nb_files, buf);
return 2;
off = (ino - 1) % INODES_PER_BLOCK;
write_to_byte_array (inode[off].i_mode, mode, 2);
- write_to_byte_array (inode[off].uid, userid, 2);
+ write_to_byte_array (inode[off].i_uid, userid, 2);
- inode[off].gid = groupid;
+ inode[off].i_gid = groupid;
put_block (fp, block, inode);
- insert_bit (fp, INODE_MAP, ino);
+ insert_bit (fp, INODE_MAP, ino, 1);
return ino;
}
put_block (fp, block + i, buf);
}
- insert_bit (fp, zone_map, zone - zone_off);
+ insert_bit (fp, zone_map, zone - zone_off, 1);
return zone;
}