[LinuxBIOS] PATCH][LAR] Allow user to specify pathnames for create and add
Jordan Crouse
jordan.crouse at amd.com
Wed Jul 11 20:22:27 CEST 2007
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
-------------- next part --------------
[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;
}
More information about the coreboot
mailing list