unsigned total_sectors;
unsigned short logical_sector_size, sectors;
unsigned fat_length;
- off_t data_size;
+ loff_t data_size;
fs_read(0,sizeof(b),&b);
logical_sector_size = GET_UNALIGNED_W(b.sector_size);
total_sectors = sectors ? sectors : CF_LE_L(b.total_sect);
if (verbose) printf("Checking we can access the last sector of the filesystem\n");
/* Can't access last odd sector anyway, so round down */
- fs_test((off_t)((total_sectors & ~1)-1)*(off_t)logical_sector_size,
+ fs_test((loff_t)((total_sectors & ~1)-1)*(loff_t)logical_sector_size,
logical_sector_size);
fat_length = CF_LE_W(b.fat_length) ?
CF_LE_W(b.fat_length) : CF_LE_L(b.fat32_length);
fs->root_entries = GET_UNALIGNED_W(b.dir_entries);
fs->data_start = fs->root_start+ROUND_TO_MULTIPLE(fs->root_entries <<
MSDOS_DIR_BITS,logical_sector_size);
- data_size = (off_t)total_sectors*logical_sector_size-fs->data_start;
+ data_size = (loff_t)total_sectors*logical_sector_size-fs->data_start;
fs->clusters = data_size/fs->cluster_size;
fs->root_cluster = 0; /* indicates standard, pre-FAT32 root dir */
fs->fsinfo_start = 0; /* no FSINFO structure */
{
CHANGE *walk;
int got;\r
-#if 1 // TMN:\r
- const size_t readsize_aligned = size + (512 - (size % 512)); // TMN:\r
- const loff_t seekpos_aligned = pos - (pos % 512); // TMN:\r
- const size_t seek_delta = (size_t)(pos - seekpos_aligned); // TMN:\r
- const size_t readsize = (pos - seekpos_aligned) + readsize_aligned; // TMN: \r
- char* tmpBuf = malloc(readsize); // TMN:
- if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %lld",pos);\r
- if ((got = read(fd,tmpBuf,readsize_aligned)) < 0) pdie("Read %d bytes at %lld",size,pos);\r
+#if 1 // TMN\r
+ const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; // TMN:\r
+ const loff_t seekpos_aligned = pos - (pos % 512); // TMN:\r
+ const size_t seek_delta = (size_t)(pos - seekpos_aligned); // TMN:\r
+ const size_t readsize = (size_t)(pos - seekpos_aligned) + readsize_aligned; // TMN: \r
+ char* tmpBuf = malloc(readsize_aligned); // TMN:\r
+#ifdef _MSC_VER\r
+ if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %I64d",pos);\r
+ if ((got = read(fd,tmpBuf,readsize_aligned)) < 0) pdie("Read %d bytes at %I64dd",size,pos);\r
+#else\r
+ if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %lld",pos);\r
+ if ((got = read(fd,tmpBuf,readsize_aligned)) < 0) pdie("Read %d bytes at %lld",size,pos);\r
+#endif\r
assert(got >= size);\r
- got = size;\r
- assert(seek_delta + size < readsize);\r
+ got = size;
+ assert(seek_delta + size <= readsize);\r
memcpy(data, tmpBuf+seek_delta, size);\r
free(tmpBuf);\r
#else // TMN:
for (walk = changes; walk; walk = walk->next) {
if (walk->pos < pos+size && walk->pos+walk->size > pos) {
if (walk->pos < pos)
- memcpy(data,(char *) walk->data+pos-walk->pos,min(size,
- walk->size-pos+walk->pos));
- else memcpy((char *) data+walk->pos-pos,walk->data,min(walk->size,
- size+pos-walk->pos));
+ memcpy(data,(char *) walk->data+pos-walk->pos,min((size_t)size,
+ (size_t)(walk->size-pos+walk->pos)));
+ else memcpy((char *) data+walk->pos-pos,walk->data,min((size_t)walk->size,
+ (size_t)(size+pos-walk->pos)));
}
}
}
void *scratch;
int okay;
+#if 1 // TMN
+ const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; // TMN:
+ const loff_t seekpos_aligned = pos - (pos % 512); // TMN:
+ const size_t seek_delta = (size_t)(pos - seekpos_aligned); // TMN:
+ const size_t readsize = (size_t)(pos - seekpos_aligned) + readsize_aligned; // TMN:
+ scratch = alloc(readsize_aligned);
+ if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %lld",pos);
+ okay = read(fd,scratch,readsize_aligned) == (int)readsize_aligned;
+ free(scratch);
+#else // TMN:
if (llseek(fd,pos,0) != pos) pdie("Seek to %lld",pos);
scratch = alloc(size);
okay = read(fd,scratch,size) == size;
free(scratch);
+#endif // TMN:
return okay;
}
\r
#define O_SHORT_LIVED _O_SHORT_LIVED\r
-#define O_ACCMODE 3\r
+//#define O_ACCMODE 3\r
#define O_NONE 3\r
#define O_BACKUP 0x10000\r
#define O_SHARED 0x20000\r
long lo, hi;\r
DWORD err;\r
\r
- lo = offset & 0xffffffff;\r
- hi = offset >> 32;\r
+ lo = (long)(offset & 0xffffffff);\r
+ hi = (long)(offset >> 32);\r
lo = SetFilePointer((HANDLE)fd, lo, &hi, whence);\r
if (lo == 0xFFFFFFFF && (err = GetLastError()) != NO_ERROR) {\r
errno = err;\r
return -1;\r
}\r
- return ((loff_t)hi << 32) | (off_t)lo;\r
+ return ((loff_t)hi << 32) | (__u32)lo;\r
}\r
\r
int fsctl(int fd, int code)\r