summaryrefslogtreecommitdiff
path: root/rbutil/jztool/src/x1000.c
diff options
context:
space:
mode:
Diffstat (limited to 'rbutil/jztool/src/x1000.c')
-rw-r--r--rbutil/jztool/src/x1000.c13
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;