Rev 9337 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 9337 | Rev 9342 | ||
---|---|---|---|
Line 19... | Line 19... | ||
19 | FILE *f = fopen(fname, "r+"); |
19 | FILE *f = fopen(fname, "r+"); |
20 | if (!f) { |
20 | if (!f) { |
21 | printf("vdisk: can't open file '%s': %s\n", fname, strerror(errno)); |
21 | printf("vdisk: can't open file '%s': %s\n", fname, strerror(errno)); |
22 | return NULL; |
22 | return NULL; |
23 | } |
23 | } |
24 | fseeko(f, 0, SEEK_END); |
24 | fseek(f, 0, SEEK_END); |
25 | off_t fsize = ftello(f); |
25 | off_t fsize = ftell(f); |
26 | fseeko(f, 0, SEEK_SET); |
26 | fseek(f, 0, SEEK_SET); |
27 | size_t sect_size = 512; |
27 | size_t sect_size = 512; |
28 | if (strstr(fname, "s4096") != NULL || strstr(fname, "s4k") != NULL) { |
28 | if (strstr(fname, "s4096") != NULL || strstr(fname, "s4k") != NULL) { |
29 | sect_size = 4096; |
29 | sect_size = 4096; |
30 | } |
30 | } |
31 | vdisk_t *vdisk = (vdisk_t*)malloc(sizeof(vdisk_t)); |
31 | vdisk_t *vdisk = (vdisk_t*)malloc(sizeof(vdisk_t)); |
Line 49... | Line 49... | ||
49 | STDCALL int |
49 | STDCALL int |
50 | vdisk_read(void *userdata, void *buffer, off_t startsector, |
50 | vdisk_read(void *userdata, void *buffer, off_t startsector, |
51 | size_t *numsectors) { |
51 | size_t *numsectors) { |
52 | COVERAGE_OFF(); |
52 | COVERAGE_OFF(); |
53 | vdisk_t *vdisk = userdata; |
53 | vdisk_t *vdisk = userdata; |
54 | fseeko(vdisk->file, startsector * vdisk->sect_size, SEEK_SET); |
54 | fseek(vdisk->file, startsector * vdisk->sect_size, SEEK_SET); |
55 | fread(buffer, *numsectors * vdisk->sect_size, 1, vdisk->file); |
55 | fread(buffer, *numsectors * vdisk->sect_size, 1, vdisk->file); |
56 | COVERAGE_ON(); |
56 | COVERAGE_ON(); |
57 | return ERROR_SUCCESS; |
57 | return ERROR_SUCCESS; |
58 | } |
58 | } |
Line 59... | Line 59... | ||
59 | 59 | ||
60 | STDCALL int |
60 | STDCALL int |
61 | vdisk_write(void *userdata, void *buffer, off_t startsector, |
61 | vdisk_write(void *userdata, void *buffer, off_t startsector, |
62 | size_t *numsectors) { |
62 | size_t *numsectors) { |
63 | COVERAGE_OFF(); |
63 | COVERAGE_OFF(); |
64 | vdisk_t *vdisk = userdata; |
64 | vdisk_t *vdisk = userdata; |
65 | fseeko(vdisk->file, startsector * vdisk->sect_size, SEEK_SET); |
65 | fseek(vdisk->file, startsector * vdisk->sect_size, SEEK_SET); |
66 | fwrite(buffer, *numsectors * vdisk->sect_size, 1, vdisk->file); |
66 | fwrite(buffer, *numsectors * vdisk->sect_size, 1, vdisk->file); |
67 | COVERAGE_ON(); |
67 | COVERAGE_ON(); |
68 | return ERROR_SUCCESS; |
68 | return ERROR_SUCCESS; |