Simple patch - this removes the files that were obsoleted by the previous patch.
Jordan
[PATCH][LAR] Remove old files
Remove create.c, list.c, extract.c and bootblock.c since their functionality has been integrated into stream.c.
Signed-off-by: Jordan Crouse jordan.crouse@amd.com Index: LinuxBIOSv3/util/lar/create.c =================================================================== --- LinuxBIOSv3.orig/util/lar/create.c 2007-07-11 11:40:29.000000000 -0600 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,278 +0,0 @@ -/* - * lar - LinuxBIOS archiver - * - * Copyright (C) 2006-2007 coresystems GmbH - * (Written by Stefan Reinauer stepan@coresystems.de for coresystems GmbH) - * Copyright (C) 2007 Patrick Georgi patrick@georgi-clan.de - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <fcntl.h> -#include <errno.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/mman.h> -#include <netinet/in.h> -#include <libgen.h> - -#include "lib.h" -#include "lar.h" - -extern enum compalgo algo; - -void compress_impossible(char *in, u32 in_len, char *out, u32 *out_len) -{ - fprintf(stderr, - "The selected compression algorithm wasn't compiled in.\n"); - exit(1); -} - -void do_no_compress(char *in, u32 in_len, char *out, u32 *out_len) -{ - memcpy(out, in, in_len); - out_len[0] = in_len; -} - -int create_lar(const char *archivename, struct file *files) -{ - int i, ret; - int diff = 0; - int bb_header_len = 0; - FILE *archive, *source; - char *tempmem; - char *filebuf, *filetarget; - char *pathname; - u32 *walk; - u32 csum; - int pathlen, entrylen, filelen; - u32 compfilelen; - long currentsize = 0; - struct lar_header *header; - struct stat statbuf; - enum compalgo thisalgo; - - if (!files) { - fprintf(stderr, "No files for archive %s\n", archivename); - exit(1); - } - - if (verbose()) - printf("Opening %s\n", archivename); - - archive = fopen(archivename, "w"); - if (!archive) { - fprintf(stderr, "Could not open archive %s for writing\n", - archivename); - exit(1); - } - - while (files) { - char *name = files->name; - - thisalgo = algo; - - if (strstr(name, "nocompress:") == name) { - name += 11; - thisalgo = none; - } - - /* skip ./ if available */ - if (name[0] == '.' && name[1] == '/') - name += 2; - - if (verbose()) - printf(" Adding %s to archive\n", name); - - ret = stat(name, &statbuf); - if (ret) { - fprintf(stderr, "No such file %s\n", name); - exit(1); - } - filelen = statbuf.st_size; - - tempmem = malloc(sizeof(struct lar_header) + MAX_PATHLEN - + filelen + 16); - if (!tempmem) { - fprintf(stderr, "Out of memory.\n"); - return (1); - } - memset(tempmem, 0, sizeof(struct lar_header) + MAX_PATHLEN - + filelen + 16); - - header = (struct lar_header *)tempmem; - pathname = tempmem + sizeof(struct lar_header); - pathlen = snprintf(pathname, MAX_PATHLEN - 1, name) + 1; - pathlen = (pathlen + 15) & 0xfffffff0; /* Align to 16 bytes. */ - - /* Read file into memory. */ - filebuf = malloc(filelen); - filetarget = pathname + pathlen; - source = fopen(name, "r"); - if (!source) { - fprintf(stderr, "No such file %s\n", name); - exit(1); - } - fread(filebuf, filelen, 1, source); - fclose(source); - compress_functions[thisalgo](filebuf, filelen, filetarget, - &compfilelen); - if ((compfilelen >= filelen) && (thisalgo != none)) { - thisalgo = none; - compress_functions[thisalgo](filebuf, filelen, - filetarget, &compfilelen); - } - free(filebuf); - - /* Create correct header. */ - memcpy(header, MAGIC, 8); - header->compression = htonl(thisalgo); - header->reallen = htonl(filelen); - header->len = htonl(compfilelen); - header->offset = htonl(sizeof(struct lar_header) + pathlen); - - /* Calculate checksum. */ - csum = 0; - for (walk = (u32 *) tempmem; - walk < (u32 *) (tempmem + compfilelen + - sizeof(struct lar_header) + pathlen); - walk++) { - csum += ntohl(*walk); - } - header->checksum = htonl(csum); - - /* Write out entry to archive. */ - entrylen = (compfilelen + pathlen + sizeof(struct lar_header) + - 15) & 0xfffffff0; - - fwrite(tempmem, entrylen, 1, archive); - - free(tempmem); - - /* size counter */ - currentsize += entrylen; - - files = files->next; - } - - /* Calculate difference, if a size has been specified. - * If diff is below zero, the size has been exceeded. - * If diff is above zero, it specifies the number of - * padding bytes required for the image. - * Otherwise diff stays 0 and no action is taken below. - */ - if (get_larsize()) - diff = get_larsize() - currentsize; - - /* If there's a bootblock loaded, some space is required - * _after_ the padding. - * Calculate this size here, but write the bootblock later. - */ - - if (bootblock_len) { - if (verbose()) - printf("Detected bootblock of %d bytes\n", - bootblock_len); - - bb_header_len = sizeof(struct lar_header) + - ((strlen(basename(get_bootblock())) + 15) & 0xfffffff0); - - bb_header_len = (bb_header_len + 15) & 0xfffffff0; - - if (verbose()) - printf("Required bootblock header of %d bytes\n", - bb_header_len); - - diff -= bootblock_len; - diff -= bb_header_len; - } - - /* The image became too big. Print an error message and exit, - * deleting the file. So nobody used an invalid image by accident. - * - * Don't delete the image in "Out of memory" situations. If memory - * is _that_ tight that a few bytes don't fit anymore, everything - * else will fail as well, so just print an error and exit the - * program as soon as possible. - */ - - if (diff < 0) { - fprintf(stderr, - "Error: LAR archive exceeded size (%ld > %ld)\n", - currentsize, get_larsize()); - - /* Open files can not be deleted. */ - fclose(archive); - /* File is too big, delete it. */ - unlink(archivename); - return -1; - } - - /* Pad the image. */ - - if (diff > 0) { - char *padding; - /* generate padding (0xff is flash friendly) */ - padding = malloc(diff); - if (!padding) { - fprintf(stderr, "Out of memory.\n"); - exit(1); - } - memset(padding, 0xff, diff); - fwrite(padding, diff, 1, archive); - free(padding); - } - - if (bootblock_len) { - char *bootblock_header; - struct lar_header *bb; - - bootblock_header = malloc(bb_header_len); - if (!bootblock_header) { - fprintf(stderr, "Out of memory.\n"); - exit(1); - } - - memset(bootblock_header, 0, bb_header_len); - - /* construct header */ - bb = (struct lar_header *)bootblock_header; - memcpy(bb->magic, MAGIC, 8); - bb->reallen = htonl(bootblock_len); - bb->len = htonl(bootblock_len); - bb->offset = htonl(bb_header_len); - - /* TODO checksum */ - - /* Write filename. we calculated the buffer size, - * so no overflow danger here. - */ - strcpy(bootblock_header + sizeof(struct lar_header), - basename(get_bootblock())); - - fwrite(bootblock_header, bb_header_len, 1, archive); - fwrite(bootblock_code, bootblock_len, 1, archive); - } - - fclose(archive); - - if (verbose()) - printf("done.\n"); - - return 0; -} Index: LinuxBIOSv3/util/lar/list.c =================================================================== --- LinuxBIOSv3.orig/util/lar/list.c 2007-07-11 11:40:29.000000000 -0600 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ -/* - * lar - LinuxBIOS archiver - * - * Copyright (C) 2006-2007 coresystems GmbH - * (Written by Stefan Reinauer stepan@coresystems.de for coresystems GmbH) - * Copyright (C) 2007 Patrick Georgi patrick@georgi-clan.de - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <fcntl.h> -#include <errno.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/mman.h> -#include <netinet/in.h> - -#include "lib.h" -#include "lar.h" - -int list_lar(const char *archivename, struct file *files) -{ - int archivefile; - char *inmap; - char *walk; - char *fullname; - struct lar_header *header; - struct stat statbuf; - int archivelen; - int do_extract; - int i; - - if (stat(archivename, &statbuf) != 0) { - fprintf(stderr, "Error opening %s: %s\n", - archivename, strerror(errno)); - exit(1); - } - - if (verbose()) - printf("Opening %s\n", archivename); - - archivefile = open(archivename, O_RDONLY); - if (archivefile == -1) { - printf("Error while opening %s: %s\n", - archivename, strerror(errno)); - exit(1); - } - archivelen = statbuf.st_size; - - inmap = mmap(NULL, statbuf.st_size, PROT_READ, - MAP_SHARED, archivefile, 0); - - for (walk = inmap; walk < inmap + statbuf.st_size; walk += 16) { - if (strcmp(walk, MAGIC) != 0) - continue; - - header = (struct lar_header *)walk; - fullname = walk + sizeof(struct lar_header); - - do_extract = 1; - if (files) { - struct file *fwalk = files; - do_extract = 0; - while (fwalk) { - if (strcmp(fullname, fwalk->name) == 0) { - do_extract = 1; - break; - } - fwalk = fwalk->next; - } - } - - /* Don't extract this one, skip it. */ - if (!do_extract) { - continue; - } - - printf(" %s ", walk + sizeof(struct lar_header)); - - if (ntohl(header->compression) == none) { - printf("(%d bytes @0x%lx)\n", - ntohl(header->len), - (unsigned long)(walk - inmap) + - ntohl(header->offset)); - } else { - printf("(%d bytes, %s compressed to %d bytes " - "@0x%lx)\n", - ntohl(header->reallen), - algo_name[ntohl(header->compression)], - ntohl(header->len), - (unsigned long)(walk - inmap) + - ntohl(header->offset)); - } - - walk += (ntohl(header->len) + ntohl(header->offset) - - 1) & 0xfffffff0; - } - - munmap(inmap, statbuf.st_size); - close(archivefile); - - if (verbose()) - printf("done.\n"); - - return 0; -} Index: LinuxBIOSv3/util/lar/lib.h =================================================================== --- LinuxBIOSv3.orig/util/lar/lib.h 2007-07-11 11:40:29.000000000 -0600 +++ LinuxBIOSv3/util/lar/lib.h 2007-07-11 11:45:41.000000000 -0600 @@ -62,16 +62,4 @@ /* prototypes for extract.c functions */ int extract_lar(const char *archivename, struct file *files);
-/* prototypes for list.c functions */ -int list_lar(const char *archivename, struct file *files); - -/* prototypes for create.c functions */ -int create_lar(const char *archivename, struct file *files); - -/* prototypes for bootblock.c functions */ -extern char *bootblock_code; -extern int bootblock_len; - -int load_bootblock(const char *bootblock); -int fixup_bootblock(void); #endif Index: LinuxBIOSv3/util/lar/bootblock.c =================================================================== --- LinuxBIOSv3.orig/util/lar/bootblock.c 2007-07-11 11:40:29.000000000 -0600 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,89 +0,0 @@ -/* - * lar - LinuxBIOS archiver - * - * Copyright (C) 2007 coresystems GmbH - * (Written by Stefan Reinauer stepan@coresystems.de for coresystems GmbH) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA - */ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/stat.h> - -#include "lar.h" -#include "lib.h" - -char *bootblock_code; -int bootblock_len; - -int load_bootblock(const char *bootblock) -{ - struct stat statbuf; - int ret, filelen; - FILE *fh; - - ret = stat(bootblock, &statbuf); - if (ret) { - fprintf(stderr, "No such file %s\n", bootblock); - exit(1); - } - bootblock_len = statbuf.st_size; - - /* We might want to find additional criteria - * for identifying a bootblock file - */ - if (bootblock_len != BOOTBLOCK_SIZE) { - printf("Warning: %s does not seem to be a bootblock, " - "so ignore it\n", bootblock); - bootblock_code = NULL; - bootblock_len = 0; - // Is this an error condition? - } - - bootblock_code = malloc(bootblock_len); - if (!bootblock_code) { - fprintf(stderr, "Out of memory.\n"); - exit(1); - } - - fh = fopen(bootblock, "r"); - if (!fh) { - fprintf(stderr, "Error while reading file %s\n", bootblock); - exit(1); - } - - fread(bootblock_code, bootblock_len, 1, fh); - fclose(fh); - - return ret; -} - -int fixup_bootblock(void) -{ - int i; - uint32_t *size_pos; - - /* This cleans out the area after the reset vector */ - for (i = 13; i > 0; i--) - bootblock_code[bootblock_len - i] = '\0'; - - /* add lar size to image */ - size_pos = (uint32_t *) (bootblock_code + bootblock_len - 12); - size_pos[0] = get_larsize(); - - return 0; -} Index: LinuxBIOSv3/util/lar/extract.c =================================================================== --- LinuxBIOSv3.orig/util/lar/extract.c 2007-07-11 11:40:29.000000000 -0600 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,155 +0,0 @@ -/* - * lar - LinuxBIOS archiver - * - * Copyright (C) 2006-2007 coresystems GmbH - * (Written by Stefan Reinauer stepan@coresystems.de for coresystems GmbH) - * Copyright (C) 2007 Patrick Georgi patrick@georgi-clan.de - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <fcntl.h> -#include <errno.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/mman.h> -#include <netinet/in.h> - -#include "lib.h" -#include "lar.h" - -void uncompress_impossible(char *dst, char *src, u32 len) -{ - fprintf(stderr, - "Cannot uncompress data (algorithm not compiled in).\n"); - exit(1); -} - -void do_no_uncompress(char *dst, char *src, u32 len) -{ - memcpy(dst, src, len); -} - -int extract_lar(const char *archivename, struct file *files) -{ - int archivefile; - char *inmap; - char *walk; - char *fullname, *pathname, *pos; - struct lar_header *header; - struct stat statbuf; - int archivelen; - int do_extract; - int i; - - if (stat(archivename, &statbuf) != 0) { - printf("Error opening %s: %s\n", archivename, strerror(errno)); - exit(1); - } - - if (verbose()) - printf("Opening %s\n", archivename); - - archivefile = open(archivename, O_RDONLY); - if (archivefile == -1) { - printf("Error while opening %s: %s\n", - archivename, strerror(errno)); - exit(1); - } - archivelen = statbuf.st_size; - - inmap = mmap(NULL, statbuf.st_size, PROT_READ, - MAP_SHARED, archivefile, 0); - - for (walk = inmap; walk < inmap + statbuf.st_size; walk += 16) { - FILE *file_to_extract; - - if (strcmp(walk, MAGIC) != 0) - continue; - - header = (struct lar_header *)walk; - fullname = walk + sizeof(struct lar_header); - - /* FIXME: check checksum. */ - - do_extract = 1; - if (files) { - struct file *fwalk = files; - do_extract = 0; - while (fwalk) { - if (strcmp(fullname, fwalk->name) == 0) { - do_extract = 1; - break; - } - fwalk = fwalk->next; - } - } - - /* Don't extract this one, skip it. */ - if (!do_extract) - continue; - - if (verbose()) - printf(" Extracting file %s\n", - walk + sizeof(struct lar_header)); - - /* Create the directory if it does not exist. */ - pathname = strdup(fullname); - if (!pathname) { - fprintf(stderr, "Out of memory.\n"); - exit(1); - } - - pos = strrchr(pathname, '/'); - if (pos) { - pos[1] = 0; - /* printf("Pathname %s\n",pathname); */ - mkdirp(pathname, 0755); - } - free(pathname); - - file_to_extract = fopen(fullname, "w"); - if (!file_to_extract) { - fprintf(stderr, "error creating file %s.\n", fullname); - exit(1); - } - - if (ntohl(header->compression) == none) { - fwrite(walk + ntohl(header->offset), - ntohl(header->len), 1, file_to_extract); - } else { - char *buf = malloc(ntohl(header->reallen)); - uncompress_functions[ntohl(header->compression)](buf, - walk + ntohl(header->offset), ntohl(header->len)); - fwrite(buf, ntohl(header->reallen), 1, file_to_extract); - free(buf); - } - fclose(file_to_extract); - - walk += (ntohl(header->offset) + ntohl(header->len) - - 1) & 0xfffffff0; - } - - munmap(inmap, statbuf.st_size); - close(archivefile); - - if (verbose()) - printf("done.\n"); - - return 0; -}
On Wed, Jul 11, 2007 at 12:16:19PM -0600, Jordan Crouse wrote:
Simple patch - this removes the files that were obsoleted by the previous patch.
For the next iteration please add these two patches together since they belong together IMHO.
//Peter
* Peter Stuge peter@stuge.se [070712 01:05]:
On Wed, Jul 11, 2007 at 12:16:19PM -0600, Jordan Crouse wrote:
Simple patch - this removes the files that were obsoleted by the previous patch.
For the next iteration please add these two patches together since they belong together IMHO.
Or better: First do the concatenation and deletion and then start changing the new file. If we really have to make one big mess out of it. It makes me think of romcc with 26klocs in a single file :)