give the new file some dummy data
parent
30263fb749
commit
14ab52fb23
|
@ -2213,12 +2213,15 @@ static int ntfs_mft_add_attr (ntfs_inode *inode, ATTR_TYPES type, u8 *data, int
|
|||
u8 *src;
|
||||
u8 *dst;
|
||||
int len;
|
||||
int attr_size;
|
||||
|
||||
if (!inode)
|
||||
return 1;
|
||||
if (!data)
|
||||
return 1;
|
||||
|
||||
attr_size = ATTR_SIZE (data_len);
|
||||
|
||||
mrec = inode->mrec;
|
||||
if (!mrec)
|
||||
return 1;
|
||||
|
@ -2237,7 +2240,7 @@ static int ntfs_mft_add_attr (ntfs_inode *inode, ATTR_TYPES type, u8 *data, int
|
|||
|
||||
len = ((u8*) mrec + mrec->bytes_in_use) - ((u8*) attr);
|
||||
src = (u8*) attr;
|
||||
dst = src + data_len + 0x18;
|
||||
dst = src + attr_size + 0x18;
|
||||
|
||||
memmove (dst, src, len);
|
||||
|
||||
|
@ -2245,13 +2248,15 @@ static int ntfs_mft_add_attr (ntfs_inode *inode, ATTR_TYPES type, u8 *data, int
|
|||
dst = (u8*) attr + 0x18;
|
||||
len = data_len;
|
||||
|
||||
// XXX wipe slack space after attr?
|
||||
|
||||
memcpy (dst, src, len);
|
||||
|
||||
mrec->bytes_in_use += data_len + 0x18;
|
||||
mrec->bytes_in_use += attr_size + 0x18;
|
||||
|
||||
memset (attr, 0, 0x18);
|
||||
*(u32*)((u8*) attr + 0x00) = type;
|
||||
*(u32*)((u8*) attr + 0x04) = data_len + 0x18;
|
||||
*(u32*)((u8*) attr + 0x04) = attr_size + 0x18;
|
||||
*(u16*)((u8*) attr + 0x0E) = mrec->next_attr_instance;
|
||||
*(u32*)((u8*) attr + 0x10) = data_len;
|
||||
*(u32*)((u8*) attr + 0x14) = 0x18;
|
||||
|
@ -3235,7 +3240,7 @@ ascend:
|
|||
//printf ("new's vcn = %lld\n", new->vcn);
|
||||
|
||||
// adjust parents
|
||||
// attach new to median
|
||||
// attach new to median
|
||||
// escape clause for root node?
|
||||
// goto ascend
|
||||
|
||||
|
@ -4475,6 +4480,7 @@ static int ntfs_file_add2 (ntfs_volume *vol, char *filename)
|
|||
s64 now = 0;
|
||||
struct ntfs_dir *dir;
|
||||
struct ntfs_dt *dt;
|
||||
int data_len = 0;
|
||||
|
||||
new_num = utils_mft_find_free_entry (vol);
|
||||
if (new_num == (MFT_REF) -1)
|
||||
|
@ -4516,10 +4522,6 @@ static int ntfs_file_add2 (ntfs_volume *vol, char *filename)
|
|||
ie->key.file_name.last_mft_change_time = now;
|
||||
ie->key.file_name.last_access_time = now;
|
||||
|
||||
// Need to be filled in later
|
||||
ie->key.file_name.allocated_size = 0;
|
||||
ie->key.file_name.data_size = 0;
|
||||
|
||||
//ntfs_ie_dump (ie);
|
||||
|
||||
//printf ("new inode %lld\n", new_num);
|
||||
|
@ -4565,29 +4567,30 @@ static int ntfs_file_add2 (ntfs_volume *vol, char *filename)
|
|||
ntfs_mft_add_attr (ino, AT_STANDARD_INFORMATION, buffer, 0x48);
|
||||
//utils_dump_mem (buffer, 0, 0x48, DM_DEFAULTS);
|
||||
|
||||
// Data
|
||||
memset (buffer, 0, 128);
|
||||
data_len = sprintf ((char*)buffer, "Contents of file: %s\n", filename);
|
||||
ntfs_mft_add_attr (ino, AT_DATA, buffer, data_len);
|
||||
|
||||
// File name
|
||||
memset (buffer, 0, 128);
|
||||
printf ("parent = 0x%llX\n", find.mref);
|
||||
printf ("ino mref = %lld\n", ino->mft_no);
|
||||
*(u64*)(buffer + 0x00) = MK_MREF (find.mref, 2); // MFT Ref of parent dir
|
||||
*(u64*)(buffer + 0x08) = now; // Time
|
||||
*(u64*)(buffer + 0x10) = now; // Time
|
||||
*(u64*)(buffer + 0x18) = now; // Time
|
||||
*(u64*)(buffer + 0x20) = now; // Time
|
||||
*(u64*)(buffer + 0x28) = 0; // Allocated size
|
||||
*(u64*)(buffer + 0x30) = 0; // Initialised size
|
||||
*(u32*)(buffer + 0x38) = 0; // Flags
|
||||
*(u32*)(buffer + 0x3C) = 0; // Not relevant
|
||||
*(u8* )(buffer + 0x40) = uname_len; // Filename length
|
||||
*(u8* )(buffer + 0x41) = FILE_NAME_POSIX;// Filename namespace
|
||||
*(u64*)(buffer + 0x08) = now; // Time
|
||||
*(u64*)(buffer + 0x10) = now; // Time
|
||||
*(u64*)(buffer + 0x18) = now; // Time
|
||||
*(u64*)(buffer + 0x20) = now; // Time
|
||||
*(u64*)(buffer + 0x28) = ATTR_SIZE (data_len); // Allocated size
|
||||
*(u64*)(buffer + 0x30) = data_len; // Initialised size
|
||||
*(u32*)(buffer + 0x38) = 0; // Flags
|
||||
*(u32*)(buffer + 0x3C) = 0; // Not relevant
|
||||
*(u8* )(buffer + 0x40) = uname_len; // Filename length
|
||||
*(u8* )(buffer + 0x41) = FILE_NAME_POSIX; // Filename namespace
|
||||
memcpy (buffer + 0x42, uname, uname_len * sizeof (ntfschar));
|
||||
ntfs_mft_add_attr (ino, AT_FILE_NAME, buffer, ATTR_SIZE (0x42 + (uname_len * sizeof (ntfschar))));
|
||||
//utils_dump_mem (buffer, 0, 0x50, DM_DEFAULTS);
|
||||
|
||||
// Data
|
||||
memset (buffer, 0, 128);
|
||||
ntfs_mft_add_attr (ino, AT_DATA, buffer, 0);
|
||||
|
||||
//utils_dump_mem ((u8*)ino->mrec, 0, ino->mrec->bytes_in_use, DM_DEFAULTS);
|
||||
|
||||
//printf ("orig inode = %p\n", find.inode);
|
||||
|
@ -4601,6 +4604,9 @@ static int ntfs_file_add2 (ntfs_volume *vol, char *filename)
|
|||
//utils_dump_mem (dt->data, 0, dt->data_len, DM_DEFAULTS);
|
||||
//printf ("\n");
|
||||
|
||||
ie->key.file_name.allocated_size = ATTR_SIZE (data_len);
|
||||
ie->key.file_name.data_size = data_len;
|
||||
|
||||
ntfs_dt_root_add (dt, ie);
|
||||
ino->ref_count++;
|
||||
dt->inodes[0] = ino;
|
||||
|
|
Loading…
Reference in New Issue