/* fills the structure with various parameters of directory entry, including key of the pointed object */ static void get_entry_attributes (struct reiserfs_dir_entry * de, int entry_num) { #ifdef REISERFS_CHECK if (I_ENTRY_COUNT (de->de_ih) < entry_num) reiserfs_panic (0, "yr-7006: get_entry_attributes: no such entry (%d-th) in the item (%d)", entry_num, I_ENTRY_COUNT (de->de_ih)); if (de->de_deh != B_I_DEH (de->de_bh, de->de_ih) + entry_num) reiserfs_panic (0, "yr-7008: get_entry_attributes: dir entry header not found"); #endif /* REISERFS_CHECK */ /* few fields are set already (de_bh, de_item_num, de_deh) */ de->de_entrylen = I_DEH_N_ENTRY_LENGTH (de->de_ih, de->de_deh, entry_num); de->de_namelen = de->de_entrylen - (de_with_sd (de->de_deh) ? SD_SIZE : 0); de->de_name = B_I_PITEM (de->de_bh, de->de_ih) + de->de_deh->deh_location; #ifdef REISERFS_ALIGNED if ( de->de_name[ de->de_namelen-1 ] == '\0' ) de->de_namelen = strlen(de->de_name); #endif /* key of object pointed by entry */ de->de_dir_id = de->de_deh->deh_dir_id; de->de_objectid = de->de_deh->deh_objectid; /* key of the entry */ memcpy (&(de->de_entry_key.k_dir_id), &(de->de_ih->ih_key), SHORT_KEY_SIZE); de->de_entry_key.k_offset = de->de_deh->deh_offset; de->de_entry_key.k_uniqueness = DIRENTRY_UNIQUENESS; }
// de_bh, de_ih, de_deh (points to first element of array), de_item_num is set inline void set_de_name_and_namelen(struct reiserfs_dir_entry *de) { struct reiserfs_de_head *deh = de->de_deh + de->de_entry_num; BUG_ON(de->de_entry_num >= ih_entry_count(de->de_ih)); de->de_entrylen = entry_length(de->de_bh, de->de_ih, de->de_entry_num); de->de_namelen = de->de_entrylen - (de_with_sd(deh) ? SD_SIZE : 0); de->de_name = B_I_PITEM(de->de_bh, de->de_ih) + deh_location(deh); if (de->de_name[de->de_namelen - 1] == 0) de->de_namelen = strlen(de->de_name); }
/* * de_bh, de_ih, de_deh (points to first element of array), de_item_num * is set */ void set_de_name_and_namelen(struct reiserfs_dir_entry *de) { struct reiserfs_de_head *deh = de->de_deh + de->de_entry_num; if (de->de_entry_num >= ih_entry_count(de->de_ih)) { reiserfs_log(LOG_DEBUG, "BUG\n"); return; } de->de_entrylen = entry_length(de->de_bp, de->de_ih, de->de_entry_num); de->de_namelen = de->de_entrylen - (de_with_sd(deh) ? SD_SIZE : 0); de->de_name = B_I_PITEM(de->de_bp, de->de_ih) + deh_location(deh); if (de->de_name[de->de_namelen - 1] == 0) de->de_namelen = strlen(de->de_name); }