[LinuxBIOS] PATCH][LAR] Allow user to specify pathnames for create and add
ron minnich
rminnich at gmail.com
Wed Jul 11 20:44:26 CEST 2007
Acked-by: Ronald G. Minnich <rminnnich at gmail.com>
On 7/11/07, Jordan Crouse <jordan.crouse at amd.com> wrote:
> We we get around to adding blobs to a LAR from within buildROM, we have
> an interesting situation, best described with an example.
>
> For Geode we need a VSA blob to operate correctly. BuildROM wants to
> download this blob from a website, and insert it into the the LAR
> with a well known name, lets use 'vsa' for giggles.
>
> This patch allows you to specify an arbitrary filename as well as a
> pathname for files in create & add mode in the following manner:
>
> [flags]:[filename]:[pathname]
>
> So instead of copying the VSA binary into a local directory and renaming
> it 'vsa' before adding it o a LAR, instead we use something like this:
>
> ./lar -a my.lar ../sources/vsa.bin:vsa
>
> This puts the blob into the LAR, and names it 'vsa'.
>
> (the -a functionality is coming in the next patch).
>
> Jordan
>
> [PATCH][LAR] Allow user to specify pathnames for create and add
>
> Add another field to the filename specified for create and add operations
> to specify the intended pathname for the blob.
>
> Signed-off-by: Jordan Crouse <jordan.crouse at amd.com>
> Index: LinuxBIOSv3/util/lar/stream.c
> ===================================================================
> --- LinuxBIOSv3.orig/util/lar/stream.c 2007-07-11 11:48:23.000000000 -0600
> +++ LinuxBIOSv3/util/lar/stream.c 2007-07-11 11:48:51.000000000 -0600
> @@ -436,6 +436,8 @@
> int lar_add_file(struct lar *lar, char *name)
> {
> char *filename, *ptr, *temp;
> + char *pathname;
> +
> enum compalgo thisalgo;
> struct lar_header *header;
> int offset, ret, fd, hlen;
> @@ -456,6 +458,18 @@
> thisalgo = none;
> }
>
> + pathname = strchr(filename, ':');
> +
> + if (pathname != NULL) {
> + *pathname = '\0';
> + pathname++;
> +
> + if (!strlen(pathname)) {
> + err("Invalid pathname specified.\n");
> + return -1;
> + }
> + }
> +
> if (filename[0] == '.' && filename[1] == '/')
> filename += 2;
>
> @@ -508,7 +522,7 @@
> munmap(ptr, s.st_size);
> close(fd);
>
> - pathlen = strlen(filename) + 1 > MAX_PATHLEN ? MAX_PATHLEN : strlen(filename) + 1;
> + pathlen = strlen(pathname) + 1 > MAX_PATHLEN ? MAX_PATHLEN : strlen(pathname) + 1;
>
> /* Figure out how big our header will be */
> hlen = sizeof(struct lar_header) + pathlen;
> @@ -535,7 +549,7 @@
>
> /* Copy the path name */
> strncpy((char *) (lar->map + offset + sizeof(struct lar_header)),
> - filename, pathlen - 1);
> + pathname, pathlen - 1);
>
> /* Copy in the data */
> memcpy(lar->map + (offset + hlen), temp, complen);
> Index: LinuxBIOSv3/util/lar/lib.c
> ===================================================================
> --- LinuxBIOSv3.orig/util/lar/lib.c 2007-07-11 11:40:29.000000000 -0600
> +++ LinuxBIOSv3/util/lar/lib.c 2007-07-11 11:49:00.000000000 -0600
> @@ -148,16 +148,29 @@
> {
> struct stat filestat;
> int ret = -1;
> - const char *realname;
> + char *realname;
> + char *c;
> +
> + realname = strdup(name);
> +
> + if (realname == NULL) {
> + fprintf(stderr, "Out of memory.\n");
> + exit(1);
> + }
>
> - realname = name;
> if (strstr(name, "nocompress:") == name) {
> - realname = name + 11;
> + realname += 11;
> }
>
> + c = strchr(realname, ':');
> +
> + if (c != NULL)
> + *c = '\0';
> +
> /* printf("... add_files %s\n", name); */
> if (stat(realname, &filestat) == -1) {
> fprintf(stderr, "Error getting file attributes of %s\n", name);
> + free(realname);
> return -1;
> }
>
> @@ -202,6 +215,7 @@
> ret = 0;
> }
>
> + free(realname);
> return ret;
> }
>
>
> --
> linuxbios mailing list
> linuxbios at linuxbios.org
> http://www.linuxbios.org/mailman/listinfo/linuxbios
>
More information about the coreboot
mailing list