summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/irecovery.c82
1 files changed, 47 insertions, 35 deletions
diff --git a/tools/irecovery.c b/tools/irecovery.c
index 12f05b7..bb6afea 100644
--- a/tools/irecovery.c
+++ b/tools/irecovery.c
@@ -64,6 +64,33 @@ static void shell_usage() {
64 printf("\t/exit\t\tExit interactive shell.\n"); 64 printf("\t/exit\t\tExit interactive shell.\n");
65} 65}
66 66
67static void buffer_read_from_filename(const char *filename, char **buffer, uint64_t *length) {
68 FILE *f;
69 uint64_t size;
70
71 *length = 0;
72
73 f = fopen(filename, "rb");
74 if (!f) {
75 return;
76 }
77
78 fseek(f, 0, SEEK_END);
79 size = ftell(f);
80 rewind(f);
81
82 if (size == 0) {
83 fclose(f);
84 return;
85 }
86
87 *buffer = (char*)malloc(sizeof(char)*(size+1));
88 fread(*buffer, sizeof(char), size, f);
89 fclose(f);
90
91 *length = size;
92}
93
67static void parse_command(irecv_client_t client, unsigned char* command, unsigned int size) { 94static void parse_command(irecv_client_t client, unsigned char* command, unsigned int size) {
68 char* cmd = strdup((char*)command); 95 char* cmd = strdup((char*)command);
69 char* action = strtok(cmd, " "); 96 char* action = strtok(cmd, " ");
@@ -119,7 +146,17 @@ static void parse_command(irecv_client_t client, unsigned char* command, unsigne
119 char* filename = strtok(NULL, " "); 146 char* filename = strtok(NULL, " ");
120 debug("Executing script %s\n", filename); 147 debug("Executing script %s\n", filename);
121 if (filename != NULL) { 148 if (filename != NULL) {
122 irecv_execute_script(client, filename); 149 char* buffer = NULL;
150 uint64_t buffer_length = 0;
151 buffer_read_from_filename(filename, &buffer, &buffer_length);
152 if (buffer) {
153 buffer[buffer_length] = '\0';
154
155 irecv_execute_script(client, buffer);
156 free(buffer);
157 } else {
158 printf("Could not read file '%s'\n", filename);
159 }
123 } 160 }
124 } 161 }
125 162
@@ -257,33 +294,6 @@ void print_progress_bar(double progress) {
257 } 294 }
258} 295}
259 296
260static void buffer_read_from_filename(const char *filename, char **buffer, uint64_t *length) {
261 FILE *f;
262 uint64_t size;
263
264 *length = 0;
265
266 f = fopen(filename, "rb");
267 if (!f) {
268 return;
269 }
270
271 fseek(f, 0, SEEK_END);
272 size = ftell(f);
273 rewind(f);
274
275 if (size == 0) {
276 fclose(f);
277 return;
278 }
279
280 *buffer = (char*)malloc(sizeof(char)*(size+1));
281 fread(*buffer, sizeof(char), size, f);
282 fclose(f);
283
284 *length = size;
285}
286
287static void print_usage(int argc, char **argv) { 297static void print_usage(int argc, char **argv) {
288 char *name = NULL; 298 char *name = NULL;
289 name = strrchr(argv[0], '/'); 299 name = strrchr(argv[0], '/');
@@ -445,16 +455,18 @@ int main(int argc, char* argv[]) {
445 455
446 case kSendScript: 456 case kSendScript:
447 buffer_read_from_filename(argument, &buffer, &buffer_length); 457 buffer_read_from_filename(argument, &buffer, &buffer_length);
448 buffer[buffer_length] = '\0'; 458 if (buffer) {
459 buffer[buffer_length] = '\0';
449 460
450 error = irecv_execute_script(client, buffer); 461 error = irecv_execute_script(client, buffer);
451 if(error != IRECV_E_SUCCESS) { 462 if(error != IRECV_E_SUCCESS) {
452 debug("%s\n", irecv_strerror(error)); 463 debug("%s\n", irecv_strerror(error));
453 } 464 }
454 465
455 if (buffer)
456 free(buffer); 466 free(buffer);
457 467 } else {
468 fprintf(stderr, "Could not read file '%s'\n", argument);
469 }
458 break; 470 break;
459 471
460 case kShowMode: 472 case kShowMode: