|
@@ -956,7 +956,7 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size,
|
|
|
|
|
|
if (read_bootsectandvi(&bs, &volinfo, &mydata->fatsize)) {
|
|
|
debug("error: reading boot sector\n");
|
|
|
- return -1;
|
|
|
+ return -EIO;
|
|
|
}
|
|
|
|
|
|
total_sector = bs.total_sect;
|
|
@@ -997,7 +997,7 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size,
|
|
|
mydata->fatbuf = memalign(ARCH_DMA_MINALIGN, FATBUFSIZE);
|
|
|
if (mydata->fatbuf == NULL) {
|
|
|
debug("Error: allocating memory\n");
|
|
|
- return -1;
|
|
|
+ return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
if (disk_read(cursect,
|
|
@@ -1005,6 +1005,7 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size,
|
|
|
(mydata->clust_size) :
|
|
|
PREFETCH_BLOCKS, do_fat_read_at_block) < 0) {
|
|
|
debug("Error: reading rootdir block\n");
|
|
|
+ ret = -EIO;
|
|
|
goto exit;
|
|
|
}
|
|
|
dentptr = (dir_entry *) do_fat_read_at_block;
|
|
@@ -1029,6 +1030,7 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size,
|
|
|
size);
|
|
|
if (ret) {
|
|
|
printf("Error: %llu overflow\n", size);
|
|
|
+ ret = -ENOSPC;
|
|
|
goto exit;
|
|
|
}
|
|
|
}
|
|
@@ -1036,6 +1038,7 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size,
|
|
|
ret = clear_fatent(mydata, start_cluster);
|
|
|
if (ret) {
|
|
|
printf("Error: clearing FAT entries\n");
|
|
|
+ ret = -EIO;
|
|
|
goto exit;
|
|
|
}
|
|
|
|
|
@@ -1045,12 +1048,14 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size,
|
|
|
ret = start_cluster = find_empty_cluster(mydata);
|
|
|
if (ret < 0) {
|
|
|
printf("Error: finding empty cluster\n");
|
|
|
+ ret = -ENOSPC;
|
|
|
goto exit;
|
|
|
}
|
|
|
|
|
|
ret = check_overflow(mydata, start_cluster, size);
|
|
|
if (ret) {
|
|
|
printf("Error: %llu overflow\n", size);
|
|
|
+ ret = -ENOSPC;
|
|
|
goto exit;
|
|
|
}
|
|
|
|
|
@@ -1065,12 +1070,14 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size,
|
|
|
ret = start_cluster = find_empty_cluster(mydata);
|
|
|
if (ret < 0) {
|
|
|
printf("Error: finding empty cluster\n");
|
|
|
+ ret = -ENOSPC;
|
|
|
goto exit;
|
|
|
}
|
|
|
|
|
|
ret = check_overflow(mydata, start_cluster, size);
|
|
|
if (ret) {
|
|
|
printf("Error: %llu overflow\n", size);
|
|
|
+ ret = -ENOSPC;
|
|
|
goto exit;
|
|
|
}
|
|
|
} else {
|
|
@@ -1087,6 +1094,7 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size,
|
|
|
ret = set_contents(mydata, retdent, buffer, size, actwrite);
|
|
|
if (ret < 0) {
|
|
|
printf("Error: writing contents\n");
|
|
|
+ ret = -EIO;
|
|
|
goto exit;
|
|
|
}
|
|
|
debug("attempt to write 0x%llx bytes\n", *actwrite);
|
|
@@ -1095,14 +1103,17 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size,
|
|
|
ret = flush_dirty_fat_buffer(mydata);
|
|
|
if (ret) {
|
|
|
printf("Error: flush fat buffer\n");
|
|
|
+ ret = -EIO;
|
|
|
goto exit;
|
|
|
}
|
|
|
|
|
|
/* Write directory table to device */
|
|
|
ret = set_cluster(mydata, dir_curclust, get_dentfromdir_block,
|
|
|
mydata->clust_size * mydata->sect_size);
|
|
|
- if (ret)
|
|
|
+ if (ret) {
|
|
|
printf("Error: writing directory entry\n");
|
|
|
+ ret = -EIO;
|
|
|
+ }
|
|
|
|
|
|
exit:
|
|
|
free(mydata->fatbuf);
|
|
@@ -1114,7 +1125,7 @@ int file_fat_write(const char *filename, void *buffer, loff_t offset,
|
|
|
{
|
|
|
if (offset != 0) {
|
|
|
printf("Error: non zero offset is currently not supported.\n");
|
|
|
- return -1;
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
|
|
|
printf("writing %s\n", filename);
|