Subversion Repositories HelenOS

Rev

Rev 4377 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4377 Rev 4692
Line 52... Line 52...
52
    uint8_t type;
52
    uint8_t type;
53
    uint32_t len;
53
    uint32_t len;
54
} __attribute__((packed));
54
} __attribute__((packed));
55
 
55
 
56
static bool
56
static bool
57
tmpfs_restore_recursion(int dev, off_t *bufpos, size_t *buflen, off_t *pos,
57
tmpfs_restore_recursion(dev_handle_t dev, off_t *bufpos, size_t *buflen,
58
    fs_node_t *pfn)
58
    off_t *pos, fs_node_t *pfn)
59
{
59
{
60
    struct rdentry entry;
60
    struct rdentry entry;
61
    libfs_ops_t *ops = &tmpfs_libfs_ops;
61
    libfs_ops_t *ops = &tmpfs_libfs_ops;
62
    int rc;
62
    int rc;
63
   
63
   
Line 65... Line 65...
65
        char *fname;
65
        char *fname;
66
        fs_node_t *fn;
66
        fs_node_t *fn;
67
        tmpfs_node_t *nodep;
67
        tmpfs_node_t *nodep;
68
        uint32_t size;
68
        uint32_t size;
69
       
69
       
70
        if (block_read(dev, bufpos, buflen, pos, &entry, sizeof(entry),
70
        if (block_seqread(dev, bufpos, buflen, pos, &entry,
71
            TMPFS_BLOCK_SIZE) != EOK)
71
            sizeof(entry), TMPFS_BLOCK_SIZE) != EOK)
72
            return false;
72
            return false;
73
       
73
       
74
        entry.len = uint32_t_le2host(entry.len);
74
        entry.len = uint32_t_le2host(entry.len);
75
       
75
       
76
        switch (entry.type) {
76
        switch (entry.type) {
Line 85... Line 85...
85
            if (fn == NULL) {
85
            if (fn == NULL) {
86
                free(fname);
86
                free(fname);
87
                return false;
87
                return false;
88
            }
88
            }
89
           
89
           
90
            if (block_read(dev, bufpos, buflen, pos, fname,
90
            if (block_seqread(dev, bufpos, buflen, pos, fname,
91
                entry.len, TMPFS_BLOCK_SIZE) != EOK) {
91
                entry.len, TMPFS_BLOCK_SIZE) != EOK) {
92
                ops->destroy(fn);
92
                ops->destroy(fn);
93
                free(fname);
93
                free(fname);
94
                return false;
94
                return false;
95
            }
95
            }
Line 101... Line 101...
101
                free(fname);
101
                free(fname);
102
                return false;
102
                return false;
103
            }
103
            }
104
            free(fname);
104
            free(fname);
105
           
105
           
106
            if (block_read(dev, bufpos, buflen, pos, &size,
106
            if (block_seqread(dev, bufpos, buflen, pos, &size,
107
                sizeof(size), TMPFS_BLOCK_SIZE) != EOK)
107
                sizeof(size), TMPFS_BLOCK_SIZE) != EOK)
108
                return false;
108
                return false;
109
           
109
           
110
            size = uint32_t_le2host(size);
110
            size = uint32_t_le2host(size);
111
           
111
           
Line 113... Line 113...
113
            nodep->data = malloc(size);
113
            nodep->data = malloc(size);
114
            if (nodep->data == NULL)
114
            if (nodep->data == NULL)
115
                return false;
115
                return false;
116
           
116
           
117
            nodep->size = size;
117
            nodep->size = size;
118
            if (block_read(dev, bufpos, buflen, pos, nodep->data,
118
            if (block_seqread(dev, bufpos, buflen, pos, nodep->data,
119
                size, TMPFS_BLOCK_SIZE) != EOK)
119
                size, TMPFS_BLOCK_SIZE) != EOK)
120
                return false;
120
                return false;
121
           
121
           
122
            break;
122
            break;
123
        case TMPFS_DIRECTORY:
123
        case TMPFS_DIRECTORY:
Line 129... Line 129...
129
            if (fn == NULL) {
129
            if (fn == NULL) {
130
                free(fname);
130
                free(fname);
131
                return false;
131
                return false;
132
            }
132
            }
133
           
133
           
134
            if (block_read(dev, bufpos, buflen, pos, fname,
134
            if (block_seqread(dev, bufpos, buflen, pos, fname,
135
                entry.len, TMPFS_BLOCK_SIZE) != EOK) {
135
                entry.len, TMPFS_BLOCK_SIZE) != EOK) {
136
                ops->destroy(fn);
136
                ops->destroy(fn);
137
                free(fname);
137
                free(fname);
138
                return false;
138
                return false;
139
            }
139
            }
Line 172... Line 172...
172
    off_t bufpos = 0;
172
    off_t bufpos = 0;
173
    size_t buflen = 0;
173
    size_t buflen = 0;
174
    off_t pos = 0;
174
    off_t pos = 0;
175
   
175
   
176
    char tag[6];
176
    char tag[6];
177
    if (block_read(dev, &bufpos, &buflen, &pos, tag, 5,
177
    if (block_seqread(dev, &bufpos, &buflen, &pos, tag, 5,
178
        TMPFS_BLOCK_SIZE) != EOK)
178
        TMPFS_BLOCK_SIZE) != EOK)
179
        goto error;
179
        goto error;
180
   
180
   
181
    tag[5] = 0;
181
    tag[5] = 0;
182
    if (str_cmp(tag, "TMPFS") != 0)
182
    if (str_cmp(tag, "TMPFS") != 0)