Subversion Repositories Kolibri OS

Rev

Rev 9337 | Go to most recent revision | 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;