Make ntfs_logfile_reset use ntfs_empty_logfile.

(Logical change 1.666)
edge.strict_endians
void!yura 2005-01-25 21:41:25 +00:00
parent e2ed469c89
commit 317f6f4b62
1 changed files with 7 additions and 53 deletions

View File

@ -38,6 +38,7 @@
#include "debug.h"
#include "inode.h"
#include "runlist.h"
#include "logfile.h"
/**
* ntfs_volume_alloc -
@ -1189,8 +1190,6 @@ int ntfs_logfile_reset(ntfs_volume *vol)
{
ntfs_inode *ni;
ntfs_attr *na;
s64 len, pos, count;
char buf[NTFS_BUF_SIZE];
int eo;
if (!vol) {
@ -1204,66 +1203,21 @@ int ntfs_logfile_reset(ntfs_volume *vol)
}
if ((na = ntfs_attr_open(ni, AT_DATA, AT_UNNAMED, 0)) == NULL) {
eo = errno;
Dperror("Failed to open $FILE_LogFile/$DATA\n");
goto error_exit;
}
/* The $DATA attribute of the $LogFile has to be non-resident. */
if (!NAttrNonResident(na)) {
Dprintf("$LogFile $DATA attribute is resident!?!\n");
errno = EIO;
goto io_error_exit;
if (ntfs_empty_logfile(na)) {
eo = errno;
Dperror("Failed to empty $FILE_LogFile/$DATA\n");
ntfs_attr_close(na);
goto error_exit;
}
/* Get length of $LogFile contents. */
len = na->data_size;
if (!len) {
Dprintf("$LogFile has zero length, no disk write needed.\n");
return 0;
}
/* Read $LogFile until its end. We do this as a check for correct
length thus making sure we are decompressing the mapping pairs
array correctly and hence writing below is safe as well. */
pos = 0;
while ((count = ntfs_attr_pread(na, pos, NTFS_BUF_SIZE, buf)) > 0)
pos += count;
if (count == -1 || pos != len) {
Dprintf("Amount of $LogFile data read does not "
"correspond to expected length!");
if (count != -1)
errno = EIO;
goto io_error_exit;
}
/* Fill the buffer with 0xff's. */
memset(buf, -1, NTFS_BUF_SIZE);
/* Set the $DATA attribute. */
pos = 0;
while ((count = len - pos) > 0) {
if (count > NTFS_BUF_SIZE)
count = NTFS_BUF_SIZE;
if ((count = ntfs_attr_pwrite(na, pos, count, buf)) <= 0) {
Dprintf("Failed to set the $LogFile attribute value.");
if (count != -1)
errno = EIO;
goto io_error_exit;
}
pos += count;
}
ntfs_attr_close(na);
return ntfs_inode_close(ni);
io_error_exit:
eo = errno;
ntfs_attr_close(na);
errno = eo;
error_exit:
eo = errno;
ntfs_inode_close(ni);
errno = eo;
return -1;