diff options
| -rw-r--r-- | tools/irecovery.c | 82 |
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 | ||
| 67 | static 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 | |||
| 67 | static void parse_command(irecv_client_t client, unsigned char* command, unsigned int size) { | 94 | static 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 | ||
| 260 | static 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 | |||
| 287 | static void print_usage(int argc, char **argv) { | 297 | static 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: |
