X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/rsbs2/blobdiff_plain/9eb4b3c68c23622076943399ae2c8d298eb32799..1f1fa7b6b361da6fba6ec7f651ca589cb81a88c5:/rsb-lz.c diff --git a/rsb-lz.c b/rsb-lz.c index b624265..3e6e638 100644 --- a/rsb-lz.c +++ b/rsb-lz.c @@ -1,16 +1,12 @@ -#include -#include -#include -#include #include #include #include #include #include #include -#include #include "rsb-crc.h" #include "rsb-lz.h" +#include "extract.h" /* TODO: IMPLEMET THIS! */ /* Probably very broken lzw implementation by Agilent: @@ -638,72 +634,6 @@ unsigned int crc_check_59684(unsigned char *arg1, unsigned int arg2, unsigned in return 4; } -void mkdir_p(char *dir) -{ - char *copy, *parent; - - if ((dir == NULL) || (!strcmp(dir, "."))) - return; - - if ((copy = strdup(dir)) == NULL) { - perror("strdup"); - exit(1); - } - parent = dirname(copy); - mkdir_p(parent); - - errno = 0; - if (mkdir(dir, 0755) == -1) { - if (errno != EEXIST) { - fprintf(stderr, "%s: ", dir); - perror("mkdir"); - exit(1); - } - } - free(copy); -} - -void write_file(char *fname, unsigned char *buf, int len) -{ - char filename[PATH_MAX]; - char *filename_c, *dirn; - int fd; - int remaining; - int ret; - - strcpy(filename, "extracted/"); - strcat(filename, fname); - - if ((filename_c = strdup(filename)) == NULL) { - perror("strdup"); - exit(1); - } - dirn = dirname(filename_c); - mkdir_p(dirn); - free(filename_c); - - if ((fd = open(filename, O_WRONLY|O_CREAT, 0644)) == -1) { - fprintf(stderr, "%s: ", filename); - perror("open"); - exit(1); - } - - remaining = len; - - while(remaining) { - ret = write(fd, buf + (len - remaining), remaining); - if (ret < 0) { - perror("write"); - exit(1); - } - remaining -= ret; - } - - printf(", %s written.\n", filename); - - close(fd); -} - void extract_lz_file(unsigned char *buf, unsigned char *name) { unsigned char *r3; @@ -757,38 +687,3 @@ void extract_lz_file(unsigned char *buf, unsigned char *name) free(r7); } - -void search_lz_sections(unsigned char *fw, int len) -{ - int i; - unsigned char *j; - - for(i = 0; i < len - 4; i++) { - if (*((unsigned int*)(fw+i)) == LZ_MAGIC) { - j = fw + i - 1; - printf("0x%02x: ", i); - j--; - while (j > fw) { - if (!strncmp("SP3", (char*)j, 3)) { - unsigned char fname[5]; - - bzero(fname, sizeof(fname)); - memcpy(fname, j, 4); - printf("Firmware found: %s", fname); - extract_lz_file(fw + i, fname); - break; - } - if (*j == 0x00) { - if ((*(j+1) != '/')) { - printf("ignoring...\n"); - break; - } - printf("%s", j+1); - extract_lz_file(fw + i, j+1); - break; - } - j--; - } - } - } -}