Changes by: flatcap
Update of /cvsroot/linux-ntfs/ntfsprogs/ntfsprogs
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22162
Modified Files:
ntfsrm.c ntfsrm.h
Log Message:
fix some sloppy memory management
tidy up bmp handling
Index: ntfsrm.c
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfsprogs/ntfsprogs/ntfsrm.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -p -r1.38 -r1.39
--- ntfsrm.c 11 Jul 2005 11:54:38 -0000 1.38
+++ ntfsrm.c 12 Jul 2005 17:13:29 -0000 1.39
@@ -46,6 +46,7 @@ GEN_PRINTF (Qprintf, stdout, &opts.quiet
static int ntfs_inode_close2 (ntfs_inode *ni);
static int ntfs_dt_root_replace (struct ntfs_dt *del, int del_num, INDEX_ENTRY *del_ie, INDEX_ENTRY *suc_ie);
+static int ntfs_dir_truncate (ntfs_volume *vol, struct ntfs_dir *dir);
/**
* version - Print version information about the program
@@ -287,6 +288,28 @@ static const char *ntfsinfo_time_to_str(
/**
+ * ntfs_bmp_rollback
+ */
+static int ntfs_bmp_rollback (struct ntfs_bmp *bmp)
+{
+ int i;
+
+ if ((!bmp) || (bmp->count == 0))
+ return 0;
+
+ for (i = 0; i < bmp->count; i++)
+ free (bmp->data[i]);
+
+ free (bmp->data);
+ free (bmp->data_vcn);
+ bmp->data = NULL;
+ bmp->data_vcn = NULL;
+ bmp->count = 0;
+
+ return 0;
+}
+
+/**
* ntfs_bmp_commit
*/
static int ntfs_bmp_commit (struct ntfs_bmp *bmp)
@@ -310,11 +333,11 @@ static int ntfs_bmp_commit (struct ntfs_
printf ("\ti size = %lld\n", bmp->attr->initialized_size);
#endif
- cs = bmp->vol->cluster_size;
-
- printf ("commit bmp inode %lld, 0x%02X (%sresident)\n", bmp->attr->ni->mft_no, bmp->attr->type, NAttrNonResident (bmp->attr) ? "non-" : "");
+ //printf ("commit bmp inode %lld, 0x%02X (%sresident)\n", bmp->attr->ni->mft_no, bmp->attr->type, NAttrNonResident (bmp->attr) ? "non-" : "");
if (NAttrNonResident (bmp->attr)) {
+ cs = bmp->vol->cluster_size;
+
// non-resident
for (i = 0; i < bmp->count; i++) {
#ifdef RM_WRITE
@@ -335,34 +358,7 @@ static int ntfs_bmp_commit (struct ntfs_
printf (RED "\tntfs_attr_pwrite resident (%lld)\n" END, bmp->attr->data_size);
}
- for (i = 0; i < bmp->count; i++)
- free (bmp->data[i]);
-
- free (bmp->data); // XXX wipe ->data and ->data_vcn
- free (bmp->data_vcn);
- bmp->count = 0;
-
- return 0;
-}
-
-/**
- * ntfs_bmp_rollback
- */
-static int ntfs_bmp_rollback (struct ntfs_bmp *bmp)
-{
- int i;
-
- if ((!bmp) || (bmp->count == 0))
- return 0;
-
- printf ("rollback bmp\n");
-
- for (i = 0; i < bmp->count; i++)
- free (bmp->data[i]);
-
- free (bmp->data);
- free (bmp->data_vcn);
- bmp->count = 0;
+ ntfs_bmp_rollback (bmp);
return 0;
}
@@ -379,7 +375,6 @@ static void ntfs_bmp_free (struct ntfs_b
ntfs_attr_close (bmp->attr);
- free (bmp->cache);
free (bmp);
}
@@ -409,8 +404,6 @@ static struct ntfs_bmp * ntfs_bmp_alloc
bmp->data = NULL;
bmp->data_vcn = NULL;
bmp->count = 0;
- bmp->cache = NULL;
- bmp->cache_vcn = -1;
return bmp;
}
@@ -1190,6 +1183,8 @@ static int ntfs_dt_rollback (struct ntfs
if (!dt)
return -1;
+ return 0; // TEMP
+
for (i = 0; i < dt->child_count; i++) {
if (dt->sub_nodes)
ntfs_dt_rollback (dt->sub_nodes[i]);
@@ -1223,9 +1218,9 @@ static void ntfs_dt_free (struct ntfs_dt
ntfs_dt_rollback (dt);
for (i = 0; i < dt->child_count; i++) {
- if (dt->sub_nodes)
- ntfs_dt_rollback (dt->sub_nodes[i]);
- if (dt->inodes)
+ //if (dt->sub_nodes)
+ ntfs_dt_free (dt->sub_nodes[i]);
+ //if (dt->inodes)
ntfs_inode_close2 (dt->inodes[i]);
}
@@ -1459,7 +1454,7 @@ static struct ntfs_dt * ntfs_dt_find2 (s
//printf ("match %p\n", res);
if (index_num)
*index_num = i;
- } else if (r == -1) {
+ } else if ((r == -1) && (ie->flags & INDEX_ENTRY_NODE)) {
//printf ("recurse\n");
if (!dt->sub_nodes[i]) {
vcn = ntfs_ie_get_vcn (ie);
@@ -2116,6 +2111,8 @@ static int ntfs_dir_commit (struct ntfs_
printf (RED "\tntfs_inode_sync %llu\n" END, dir->inode->mft_no);
}
+ ntfs_dir_truncate (dir->vol, dir);
+
if (ntfs_dt_commit (dir->index) < 0)
return -1;
@@ -2414,8 +2411,7 @@ static int ntfs_dir_truncate (ntfs_volum
dir->index->header->flags = 0;
//rollback dir's bmp
- ntfs_bmp_rollback (dir->bitmap);
- free (dir->bitmap);
+ ntfs_bmp_free (dir->bitmap);
dir->bitmap = NULL;
/*
@@ -3050,12 +3046,16 @@ static BOOL utils_pathname_to_inode2 (nt
child = ntfs_dir_find2 (dir, unicode, len);
if (!child) {
printf ("can't find %s in %s\n", p, pathname);
- break;
+ goto close;
}
} else {
//printf ("file: %s\n", p);
dt = ntfs_dt_find2 (dir->index, unicode, len, &dt_num);
+ if (!dt) {
+ printf ("can't find %s in %s (2)\n", p, pathname);
+ goto close;
+ }
if (dt->inodes[dt_num] == NULL) {
dt->inodes[dt_num] = ntfs_inode_open (dir->vol, dt->children[dt_num]->indexed_file);
@@ -3246,13 +3246,13 @@ static int ntfs_dt_root_replace (struct
src = (u8*) del->data;
dst = attr;
- len = del->data_len + suc_ie->length - del_ie->length;
+ len = suc_ie->length - del_ie->length;
free (del->data);
del->data = attr;
- del->data_len = len;
+ del->data_len += len;
del->header = (INDEX_HEADER*) (del->data + 0x10);
- del->header->index_length += (suc_ie->length - del_ie->length);
- del->header->allocated_size += (suc_ie->length - del_ie->length);
+ del->header->index_length += len;
+ del->header->allocated_size += len;
ntfs_mft_resize_resident (del->dir->inode, AT_INDEX_ROOT, I30, 4, del->data, del->data_len);
@@ -3264,7 +3264,6 @@ static int ntfs_dt_root_replace (struct
// printf ("\tChild %d %p %d\n", i, del->children[i], del->children[i]->flags);
//printf ("\n");
- len = suc_ie->length - del_ie->length;
//printf ("src = %p, dst = %p, len = %d\n", src, dst, len); fflush (stdout);
for (i = 0; i < del->child_count; i++)
@@ -5007,8 +5006,6 @@ static int ntfs_file_remove2 (ntfs_volum
if (1) ntfs_file_remove (vol, dt, dt_num); // remove name from index
- if (1) ntfs_dir_truncate (vol, dir);
-
if (1) utils_volume_commit (vol);
if (0) utils_volume_rollback (vol);
Index: ntfsrm.h
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfsprogs/ntfsprogs/ntfsrm.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -p -r1.10 -r1.11
--- ntfsrm.h 19 Jun 2005 21:09:41 -0000 1.10
+++ ntfsrm.h 12 Jul 2005 17:13:30 -0000 1.11
@@ -52,8 +52,6 @@ struct ntfs_bmp {
int count;
u8 **data;
VCN *data_vcn;
- u8 *cache;
- VCN cache_vcn;
};
/**
|