Commit 96b1046d1c68352677aa888cc110951a68daf155
Committed by
Tom Rini
1 parent
9f12cd0e06
Exists in
v2017.01-smarct4x
and in
37 other branches
sandbox: Prepare API change for files greater than 2GB
Change the internal sandbox functions to use loff_t for file offsets. Signed-off-by: Suriyan Ramasami <suriyan.r@gmail.com> Acked-by: Simon Glass <sjg@chromium.org>
Showing 6 changed files with 77 additions and 41 deletions Side-by-side Diff
arch/sandbox/cpu/os.c
... | ... | @@ -385,7 +385,7 @@ |
385 | 385 | return os_dirent_typename[OS_FILET_UNKNOWN]; |
386 | 386 | } |
387 | 387 | |
388 | -ssize_t os_get_filesize(const char *fname) | |
388 | +int os_get_filesize(const char *fname, loff_t *size) | |
389 | 389 | { |
390 | 390 | struct stat buf; |
391 | 391 | int ret; |
... | ... | @@ -393,7 +393,8 @@ |
393 | 393 | ret = stat(fname, &buf); |
394 | 394 | if (ret) |
395 | 395 | return ret; |
396 | - return buf.st_size; | |
396 | + *size = buf.st_size; | |
397 | + return 0; | |
397 | 398 | } |
398 | 399 | |
399 | 400 | void os_putc(int ch) |
400 | 401 | |
... | ... | @@ -427,11 +428,11 @@ |
427 | 428 | { |
428 | 429 | struct sandbox_state *state = state_get_current(); |
429 | 430 | int fd, ret; |
430 | - int size; | |
431 | + loff_t size; | |
431 | 432 | |
432 | - size = os_get_filesize(fname); | |
433 | - if (size < 0) | |
434 | - return -ENOENT; | |
433 | + ret = os_get_filesize(fname, &size); | |
434 | + if (ret < 0) | |
435 | + return ret; | |
435 | 436 | if (size != state->ram_size) |
436 | 437 | return -ENOSPC; |
437 | 438 | fd = open(fname, O_RDONLY); |
arch/sandbox/cpu/state.c
... | ... | @@ -49,14 +49,14 @@ |
49 | 49 | |
50 | 50 | static int state_read_file(struct sandbox_state *state, const char *fname) |
51 | 51 | { |
52 | - int size; | |
52 | + loff_t size; | |
53 | 53 | int ret; |
54 | 54 | int fd; |
55 | 55 | |
56 | - size = os_get_filesize(fname); | |
57 | - if (size < 0) { | |
56 | + ret = os_get_filesize(fname, &size); | |
57 | + if (ret < 0) { | |
58 | 58 | printf("Cannot find sandbox state file '%s'\n", fname); |
59 | - return -ENOENT; | |
59 | + return ret; | |
60 | 60 | } |
61 | 61 | state->state_fdt = os_malloc(size); |
62 | 62 | if (!state->state_fdt) { |
common/board_f.c
... | ... | @@ -287,7 +287,7 @@ |
287 | 287 | struct sandbox_state *state = state_get_current(); |
288 | 288 | const char *fname = state->fdt_fname; |
289 | 289 | void *blob; |
290 | - ssize_t size; | |
290 | + loff_t size; | |
291 | 291 | int err; |
292 | 292 | int fd; |
293 | 293 | |
294 | 294 | |
... | ... | @@ -300,10 +300,10 @@ |
300 | 300 | return -EINVAL; |
301 | 301 | } |
302 | 302 | |
303 | - size = os_get_filesize(fname); | |
304 | - if (size < 0) { | |
303 | + err = os_get_filesize(fname, &size); | |
304 | + if (err < 0) { | |
305 | 305 | printf("Failed to file FDT file '%s'\n", fname); |
306 | - return -ENOENT; | |
306 | + return err; | |
307 | 307 | } |
308 | 308 | fd = os_open(fname, OS_O_RDONLY); |
309 | 309 | if (fd < 0) { |
fs/sandbox/sandboxfs.c
... | ... | @@ -13,10 +13,10 @@ |
13 | 13 | return 0; |
14 | 14 | } |
15 | 15 | |
16 | -long sandbox_fs_read_at(const char *filename, unsigned long pos, | |
17 | - void *buffer, unsigned long maxsize) | |
16 | +int sandbox_fs_read_at(const char *filename, loff_t pos, void *buffer, | |
17 | + loff_t maxsize, loff_t *actread) | |
18 | 18 | { |
19 | - ssize_t size; | |
19 | + loff_t size; | |
20 | 20 | int fd, ret; |
21 | 21 | |
22 | 22 | fd = os_open(filename, OS_O_RDONLY); |
23 | 23 | |
24 | 24 | |
... | ... | @@ -27,16 +27,31 @@ |
27 | 27 | os_close(fd); |
28 | 28 | return ret; |
29 | 29 | } |
30 | - if (!maxsize) | |
31 | - maxsize = os_get_filesize(filename); | |
30 | + if (!maxsize) { | |
31 | + ret = os_get_filesize(filename, &size); | |
32 | + if (ret) { | |
33 | + os_close(fd); | |
34 | + return ret; | |
35 | + } | |
36 | + | |
37 | + maxsize = size; | |
38 | + } | |
39 | + | |
32 | 40 | size = os_read(fd, buffer, maxsize); |
33 | 41 | os_close(fd); |
34 | 42 | |
35 | - return size; | |
43 | + if (size < 0) { | |
44 | + ret = -1; | |
45 | + } else { | |
46 | + ret = 0; | |
47 | + *actread = size; | |
48 | + } | |
49 | + | |
50 | + return ret; | |
36 | 51 | } |
37 | 52 | |
38 | -long sandbox_fs_write_at(const char *filename, unsigned long pos, | |
39 | - void *buffer, unsigned long towrite) | |
53 | +int sandbox_fs_write_at(const char *filename, loff_t pos, void *buffer, | |
54 | + loff_t towrite, loff_t *actwrite) | |
40 | 55 | { |
41 | 56 | ssize_t size; |
42 | 57 | int fd, ret; |
... | ... | @@ -52,7 +67,14 @@ |
52 | 67 | size = os_write(fd, buffer, towrite); |
53 | 68 | os_close(fd); |
54 | 69 | |
55 | - return size; | |
70 | + if (size == -1) { | |
71 | + ret = -1; | |
72 | + } else { | |
73 | + ret = 0; | |
74 | + *actwrite = size; | |
75 | + } | |
76 | + | |
77 | + return ret; | |
56 | 78 | } |
57 | 79 | |
58 | 80 | int sandbox_fs_ls(const char *dirname) |
59 | 81 | |
60 | 82 | |
... | ... | @@ -74,15 +96,23 @@ |
74 | 96 | |
75 | 97 | int sandbox_fs_exists(const char *filename) |
76 | 98 | { |
77 | - ssize_t sz; | |
99 | + loff_t size; | |
100 | + int ret; | |
78 | 101 | |
79 | - sz = os_get_filesize(filename); | |
80 | - return sz >= 0; | |
102 | + ret = os_get_filesize(filename, &size); | |
103 | + return ret == 0; | |
81 | 104 | } |
82 | 105 | |
83 | 106 | int sandbox_fs_size(const char *filename) |
84 | 107 | { |
85 | - return os_get_filesize(filename); | |
108 | + loff_t size; | |
109 | + int ret; | |
110 | + | |
111 | + ret = os_get_filesize(filename, &size); | |
112 | + if (ret) | |
113 | + return ret; | |
114 | + else | |
115 | + return size; | |
86 | 116 | } |
87 | 117 | |
88 | 118 | void sandbox_fs_close(void) |
89 | 119 | |
90 | 120 | |
91 | 121 | |
92 | 122 | |
93 | 123 | |
94 | 124 | |
95 | 125 | |
... | ... | @@ -91,27 +121,29 @@ |
91 | 121 | |
92 | 122 | int fs_read_sandbox(const char *filename, void *buf, int offset, int len) |
93 | 123 | { |
94 | - int len_read; | |
124 | + int ret; | |
125 | + loff_t actread; | |
95 | 126 | |
96 | - len_read = sandbox_fs_read_at(filename, offset, buf, len); | |
97 | - if (len_read == -1) { | |
127 | + ret = sandbox_fs_read_at(filename, offset, buf, len, &actread); | |
128 | + if (ret) { | |
98 | 129 | printf("** Unable to read file %s **\n", filename); |
99 | - return -1; | |
130 | + return ret; | |
100 | 131 | } |
101 | 132 | |
102 | - return len_read; | |
133 | + return actread; | |
103 | 134 | } |
104 | 135 | |
105 | 136 | int fs_write_sandbox(const char *filename, void *buf, int offset, int len) |
106 | 137 | { |
107 | - int len_written; | |
138 | + int ret; | |
139 | + loff_t actwrite; | |
108 | 140 | |
109 | - len_written = sandbox_fs_write_at(filename, offset, buf, len); | |
110 | - if (len_written == -1) { | |
141 | + ret = sandbox_fs_write_at(filename, offset, buf, len, &actwrite); | |
142 | + if (ret) { | |
111 | 143 | printf("** Unable to write file %s **\n", filename); |
112 | - return -1; | |
144 | + return ret; | |
113 | 145 | } |
114 | 146 | |
115 | - return len_written; | |
147 | + return actwrite; | |
116 | 148 | } |
include/os.h
... | ... | @@ -217,9 +217,10 @@ |
217 | 217 | * Get the size of a file |
218 | 218 | * |
219 | 219 | * @param fname Filename to check |
220 | - * @return size of file, or -1 if an error ocurred | |
220 | + * @param size size of file is returned if no error | |
221 | + * @return 0 on success or -1 if an error ocurred | |
221 | 222 | */ |
222 | -ssize_t os_get_filesize(const char *fname); | |
223 | +int os_get_filesize(const char *fname, loff_t *size); | |
223 | 224 | |
224 | 225 | /** |
225 | 226 | * Write a character to the controlling OS terminal |
include/sandboxfs.h
... | ... | @@ -20,8 +20,10 @@ |
20 | 20 | |
21 | 21 | int sandbox_fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info); |
22 | 22 | |
23 | -long sandbox_fs_read_at(const char *filename, unsigned long pos, | |
24 | - void *buffer, unsigned long maxsize); | |
23 | +int sandbox_fs_read_at(const char *filename, loff_t pos, void *buffer, | |
24 | + loff_t maxsize, loff_t *actread); | |
25 | +int sandbox_fs_write_at(const char *filename, loff_t pos, void *buffer, | |
26 | + loff_t maxsize, loff_t *actwrite); | |
25 | 27 | |
26 | 28 | void sandbox_fs_close(void); |
27 | 29 | int sandbox_fs_ls(const char *dirname); |