From ce0f972cecd30fc1457aa0a9a0fa1ad966d23c12 Mon Sep 17 00:00:00 2001 From: Marcus Brinkmann Date: Sun, 26 Nov 2000 02:12:27 +0000 Subject: 2000-11-26 Marcus Brinkmann Closes Debian Bug #68417: * rr.c (rrip_work): In helper function add_comp set targused to zero after malloc, and loop over realloc in case doubling is not enough. After finalizing the link, set VALID_SL valid flag. * inode.c (read_disknode): For links use rl->target instead rl->name. Closes Debian Bug #69281: Don't use file_start as inode numbers, but the offset of the directory record in disk_image. This is what Linux 2.4 does. * isofs.h (struct disknode): New member struct dirrect *dr. * inode.c: Fix comment about inode numbers. (struct node_cache): Fix comment about file_start (it's not unique). In fact, file_start is invalid for symlinks, and only stored here for convenience. Maybe caching file_start can be avoided by rearranging the code. (inode_cache_find): Change first argument from off_t file_start to struct dirrect *dr and fix the doc. Compare cached value of DR with this argument, instead FILE_START. (diskfs_cached_lookup): Set DR member of DN. (load_inode): Call inode_cache_find with RECORD instead FILE_START. Set DR member of DN. (read_disknode): Set inode number to DR - DISK_IMAGE instead FILE_START. * lookup.c (diskfs_get_directs): Remove variable file_start. Don't calculate file_start. Set D_FILENO to EP - DISK_IMAGE instead FILE_START. --- isofs/rr.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'isofs/rr.c') diff --git a/isofs/rr.c b/isofs/rr.c index 20fea897..b069a831 100644 --- a/isofs/rr.c +++ b/isofs/rr.c @@ -363,10 +363,10 @@ rrip_work (struct dirrect *dr, struct rrip_lookup *rr, if (rr->target == 0) { rr->target = malloc (cnamelen * 2); - targused = cnamelen; + targused = 0; targalloced = cnamelen * 2; } - else if (targused + cnamelen > targalloced) + else while (targused + cnamelen > targalloced) rr->target = realloc (rr->target, targalloced *= 2); assert (rr->target); @@ -435,6 +435,8 @@ rrip_work (struct dirrect *dr, struct rrip_lookup *rr, else add_comp ("", 1); + rr->valid |= VALID_SL; + free (slbuf); goto next_field; } -- cgit v1.2.3