strdup the input of dirname, as dirname is free
(according to the spec) to change the string in-situ, even if glibc doesn't do it. This avoids errors on Mac OS and Solaris. Kill nrv2b support in CBFS (we have lzma), slightly improve debug output in CBFS, properly declare all functions of CBFS in the header. Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de> Acked-by: Uwe Hermann <uwe@hermann-uwe.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4436 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
19bc45d1e8
commit
f107538e33
|
@ -57,7 +57,6 @@
|
||||||
|
|
||||||
#define CBFS_COMPRESS_NONE 0
|
#define CBFS_COMPRESS_NONE 0
|
||||||
#define CBFS_COMPRESS_LZMA 1
|
#define CBFS_COMPRESS_LZMA 1
|
||||||
#define CBFS_COMPRESS_NRV2B 2
|
|
||||||
|
|
||||||
/** These are standard component types for well known
|
/** These are standard component types for well known
|
||||||
components (i.e - those that coreboot needs to consume.
|
components (i.e - those that coreboot needs to consume.
|
||||||
|
@ -165,8 +164,12 @@ int cbfs_execute_stage(const char *name);
|
||||||
void * cbfs_get_file(const char *name);
|
void * cbfs_get_file(const char *name);
|
||||||
void *cbfs_load_optionrom(u16 vendor, u16 device, void * dest);
|
void *cbfs_load_optionrom(u16 vendor, u16 device, void * dest);
|
||||||
int run_address(void *f);
|
int run_address(void *f);
|
||||||
|
int cbfs_decompress(int algo, void *src, void *dst, int len);
|
||||||
struct cbfs_stage *cbfs_find_file(const char *name, int type);
|
struct cbfs_stage *cbfs_find_file(const char *name, int type);
|
||||||
|
int cbfs_check_magic(struct cbfs_file *file);
|
||||||
|
struct cbfs_header *cbfs_master_header(void);
|
||||||
|
struct cbfs_file *cbfs_find(const char *name);
|
||||||
|
void cbfs_and_run_core(char* filename, unsigned int ebp);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,6 @@
|
||||||
#define ntohl(x) (x)
|
#define ntohl(x) (x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int run_address(void *f);
|
|
||||||
|
|
||||||
int cbfs_decompress(int algo, void *src, void *dst, int len)
|
int cbfs_decompress(int algo, void *src, void *dst, int len)
|
||||||
{
|
{
|
||||||
switch(algo) {
|
switch(algo) {
|
||||||
|
@ -44,15 +42,6 @@ int cbfs_decompress(int algo, void *src, void *dst, int len)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#if CONFIG_COMPRESSED_PAYLOAD_NRV2B==1
|
|
||||||
case CBFS_COMPRESS_NRV2B: {
|
|
||||||
unsigned long unrv2b(u8 *src, u8 *dst, unsigned long *ilen_p);
|
|
||||||
unsigned long tmp;
|
|
||||||
|
|
||||||
unrv2b(src, dst, &tmp);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
default:
|
default:
|
||||||
printk_info( "CBFS: Unknown compression type %d\n",
|
printk_info( "CBFS: Unknown compression type %d\n",
|
||||||
algo);
|
algo);
|
||||||
|
@ -103,11 +92,11 @@ struct cbfs_file *cbfs_find(const char *name)
|
||||||
|
|
||||||
int flen = ntohl(file->len);
|
int flen = ntohl(file->len);
|
||||||
int foffset = ntohl(file->offset);
|
int foffset = ntohl(file->offset);
|
||||||
printk_spew("CBFS: follow chain: %p + %x + %x + align -> ", offset, foffset, flen);
|
printk_spew("CBFS: follow chain: %p + %x + %x + align -> ", (void *)offset, foffset, flen);
|
||||||
|
|
||||||
unsigned long oldoffset = offset;
|
unsigned long oldoffset = offset;
|
||||||
offset = ALIGN(offset + foffset + flen, align);
|
offset = ALIGN(offset + foffset + flen, align);
|
||||||
printk_spew("%p\n", offset);
|
printk_spew("%p\n", (void *)offset);
|
||||||
if (offset <= oldoffset) return NULL;
|
if (offset <= oldoffset) return NULL;
|
||||||
|
|
||||||
if (offset < 0xFFFFFFFF - ntohl(header->romsize))
|
if (offset < 0xFFFFFFFF - ntohl(header->romsize))
|
||||||
|
@ -182,7 +171,8 @@ void * cbfs_load_stage(const char *name)
|
||||||
if (stage == NULL)
|
if (stage == NULL)
|
||||||
return (void *) -1;
|
return (void *) -1;
|
||||||
|
|
||||||
printk_info("Stage: load @ %d/%d bytes, enter @ %llx\n",
|
printk_info("Stage: load %s @ %d/%d bytes, enter @ %llx\n",
|
||||||
|
name,
|
||||||
(u32) stage->load, stage->memlen,
|
(u32) stage->load, stage->memlen,
|
||||||
stage->entry);
|
stage->entry);
|
||||||
memset((void *) (u32) stage->load, 0, stage->memlen);
|
memset((void *) (u32) stage->load, 0, stage->memlen);
|
||||||
|
|
|
@ -488,7 +488,7 @@ int main(int argc, char **argv)
|
||||||
/* See if we want to output a C source file */
|
/* See if we want to output a C source file */
|
||||||
if(option) {
|
if(option) {
|
||||||
int err=0;
|
int err=0;
|
||||||
strncpy(tmpfilename, dirname(option), TMPFILE_LEN);
|
strncpy(tmpfilename, dirname(strdup(option)), TMPFILE_LEN);
|
||||||
strncat(tmpfilename, TMPFILE_TEMPLATE, TMPFILE_LEN);
|
strncat(tmpfilename, TMPFILE_TEMPLATE, TMPFILE_LEN);
|
||||||
tmpfile = mkstemp(tmpfilename);
|
tmpfile = mkstemp(tmpfilename);
|
||||||
if(tmpfile == -1) {
|
if(tmpfile == -1) {
|
||||||
|
@ -539,7 +539,7 @@ int main(int argc, char **argv)
|
||||||
struct cmos_option_table *hdr;
|
struct cmos_option_table *hdr;
|
||||||
struct lb_record *ptr, *end;
|
struct lb_record *ptr, *end;
|
||||||
|
|
||||||
strncpy(tmpfilename, dirname(option), TMPFILE_LEN);
|
strncpy(tmpfilename, dirname(strdup(option)), TMPFILE_LEN);
|
||||||
strncat(tmpfilename, TMPFILE_TEMPLATE, TMPFILE_LEN);
|
strncat(tmpfilename, TMPFILE_TEMPLATE, TMPFILE_LEN);
|
||||||
tmpfile = mkstemp(tmpfilename);
|
tmpfile = mkstemp(tmpfilename);
|
||||||
if(tmpfile == -1) {
|
if(tmpfile == -1) {
|
||||||
|
|
Loading…
Reference in New Issue