void make_empty_dir_item(char *body, __le32 dirid, __le32 objid, __le32 par_dirid, __le32 par_objid) { struct reiserfs_de_head *deh; memset(body, 0, EMPTY_DIR_SIZE); deh = (struct reiserfs_de_head *)body; put_deh_offset(&(deh[0]), DOT_OFFSET); deh[0].deh_dir_id = dirid; deh[0].deh_objectid = objid; deh[0].deh_state = 0; put_deh_location(&(deh[0]), EMPTY_DIR_SIZE - ROUND_UP(strlen("."))); mark_de_visible(&(deh[0])); put_deh_offset(&(deh[1]), DOT_DOT_OFFSET); deh[1].deh_dir_id = par_dirid; deh[1].deh_objectid = par_objid; deh[1].deh_state = 0; put_deh_location(&(deh[1]), deh_location(&(deh[0])) - ROUND_UP(strlen(".."))); mark_de_visible(&(deh[1])); memcpy(body + deh_location(&(deh[0])), ".", 1); memcpy(body + deh_location(&(deh[1])), "..", 2); }
/* compose directory item containing "." and ".." entries */ void make_empty_dir_item (char * body, __u32 dirid, __u32 objid, __u32 par_dirid, __u32 par_objid) { struct reiserfs_de_head * deh; memset (body, 0, EMPTY_DIR_SIZE); deh = (struct reiserfs_de_head *)body; /* direntry header of "." */ put_deh_offset( &(deh[0]), DOT_OFFSET ); /* these two are from make_le_item_head, and are are LE */ deh[0].deh_dir_id = dirid; deh[0].deh_objectid = objid; deh[0].deh_state = 0; /* Endian safe if 0 */ put_deh_location( &(deh[0]), EMPTY_DIR_SIZE - ROUND_UP( strlen( "." ) ) ); mark_de_visible(&(deh[0])); /* direntry header of ".." */ put_deh_offset( &(deh[1]), DOT_DOT_OFFSET ); /* key of ".." for the root directory */ /* these two are from the inode, and are are LE */ deh[1].deh_dir_id = par_dirid; deh[1].deh_objectid = par_objid; deh[1].deh_state = 0; /* Endian safe if 0 */ put_deh_location( &(deh[1]), deh_location( &(deh[0])) - ROUND_UP( strlen( ".." ) ) ); mark_de_visible(&(deh[1])); /* copy ".." and "." */ memcpy (body + deh_location( &(deh[0]) ), ".", 1); memcpy (body + deh_location( &(deh[1]) ), "..", 2); }
/* * compose directory item containing "." and ".." entries (entries are * not aligned to 4 byte boundary) */ void make_empty_dir_item_v1(char *body, __le32 dirid, __le32 objid, __le32 par_dirid, __le32 par_objid) { struct reiserfs_de_head *dot, *dotdot; memset(body, 0, EMPTY_DIR_SIZE_V1); dot = (struct reiserfs_de_head *)body; dotdot = dot + 1; /* direntry header of "." */ put_deh_offset(dot, DOT_OFFSET); /* these two are from make_le_item_head, and are are LE */ dot->deh_dir_id = dirid; dot->deh_objectid = objid; dot->deh_state = 0; /* Endian safe if 0 */ put_deh_location(dot, EMPTY_DIR_SIZE_V1 - strlen(".")); mark_de_visible(dot); /* direntry header of ".." */ put_deh_offset(dotdot, DOT_DOT_OFFSET); /* key of ".." for the root directory */ /* these two are from the inode, and are are LE */ dotdot->deh_dir_id = par_dirid; dotdot->deh_objectid = par_objid; dotdot->deh_state = 0; /* Endian safe if 0 */ put_deh_location(dotdot, deh_location(dot) - strlen("..")); mark_de_visible(dotdot); /* copy ".." and "." */ memcpy(body + deh_location(dot), ".", 1); memcpy(body + deh_location(dotdot), "..", 2); }