diff options
Diffstat (limited to 'rbutil/jztool/src')
-rw-r--r-- | rbutil/jztool/src/x1000.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/rbutil/jztool/src/x1000.c b/rbutil/jztool/src/x1000.c index aacad0ef01..f59727a2ca 100644 --- a/rbutil/jztool/src/x1000.c +++ b/rbutil/jztool/src/x1000.c | |||
@@ -21,7 +21,7 @@ | |||
21 | 21 | ||
22 | #include "jztool.h" | 22 | #include "jztool.h" |
23 | #include "jztool_private.h" | 23 | #include "jztool_private.h" |
24 | #include "microtar.h" | 24 | #include "microtar-stdio.h" |
25 | #include <stdbool.h> | 25 | #include <stdbool.h> |
26 | #include <string.h> | 26 | #include <string.h> |
27 | 27 | ||
@@ -52,21 +52,22 @@ static int get_file(jz_context* jz, mtar_t* tar, const char* file, | |||
52 | bool decompress, jz_buffer** buf) | 52 | bool decompress, jz_buffer** buf) |
53 | { | 53 | { |
54 | jz_buffer* buffer = NULL; | 54 | jz_buffer* buffer = NULL; |
55 | mtar_header_t h; | 55 | const mtar_header_t* h; |
56 | int rc; | 56 | int rc; |
57 | 57 | ||
58 | rc = mtar_find(tar, file, &h); | 58 | rc = mtar_find(tar, file); |
59 | if(rc != MTAR_ESUCCESS) { | 59 | if(rc != MTAR_ESUCCESS) { |
60 | jz_log(jz, JZ_LOG_ERROR, "can't find %s in boot file, tar error %d", file, rc); | 60 | jz_log(jz, JZ_LOG_ERROR, "can't find %s in boot file, tar error %d", file, rc); |
61 | return JZ_ERR_BAD_FILE_FORMAT; | 61 | return JZ_ERR_BAD_FILE_FORMAT; |
62 | } | 62 | } |
63 | 63 | ||
64 | buffer = jz_buffer_alloc(h.size, NULL); | 64 | h = mtar_get_header(tar); |
65 | buffer = jz_buffer_alloc(h->size, NULL); | ||
65 | if(!buffer) | 66 | if(!buffer) |
66 | return JZ_ERR_OUT_OF_MEMORY; | 67 | return JZ_ERR_OUT_OF_MEMORY; |
67 | 68 | ||
68 | rc = mtar_read_data(tar, buffer->data, buffer->size); | 69 | rc = mtar_read_data(tar, buffer->data, buffer->size); |
69 | if(rc != MTAR_ESUCCESS) { | 70 | if(rc < 0 || (unsigned)rc != buffer->size) { |
70 | jz_buffer_free(buffer); | 71 | jz_buffer_free(buffer); |
71 | jz_log(jz, JZ_LOG_ERROR, "can't read %s in boot file, tar error %d", file, rc); | 72 | jz_log(jz, JZ_LOG_ERROR, "can't read %s in boot file, tar error %d", file, rc); |
72 | return JZ_ERR_BAD_FILE_FORMAT; | 73 | return JZ_ERR_BAD_FILE_FORMAT; |
@@ -127,7 +128,7 @@ int jz_x1000_boot(jz_usbdev* dev, jz_device_type type, const char* filename) | |||
127 | sprintf(spl_filename, "spl.%s", dev_info->file_ext); | 128 | sprintf(spl_filename, "spl.%s", dev_info->file_ext); |
128 | 129 | ||
129 | /* Now open the archive */ | 130 | /* Now open the archive */ |
130 | rc = mtar_open(&tar, filename, "r"); | 131 | rc = mtar_open(&tar, filename, "rb"); |
131 | if(rc != MTAR_ESUCCESS) { | 132 | if(rc != MTAR_ESUCCESS) { |
132 | jz_log(dev->jz, JZ_LOG_ERROR, "cannot open file %s (tar error: %d)", filename, rc); | 133 | jz_log(dev->jz, JZ_LOG_ERROR, "cannot open file %s (tar error: %d)", filename, rc); |
133 | return JZ_ERR_OPEN_FILE; | 134 | return JZ_ERR_OPEN_FILE; |