]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/image.c
JFFS2: Speed up and fix comparison functions
[karo-tx-uboot.git] / common / image.c
index 0f5274f1be4739379551f8a1691afab4da684d11..c3616e2c44f1b37dd13f5f056c9a502d7d5c5f87 100644 (file)
@@ -54,6 +54,10 @@ static const image_header_t *image_get_ramdisk(ulong rd_addr, uint8_t arch,
 #include <u-boot/md5.h>
 #include <time.h>
 #include <image.h>
+
+#ifndef __maybe_unused
+# define __maybe_unused                /* unimplemented */
+#endif
 #endif /* !USE_HOSTCC*/
 
 #include <u-boot/crc.h>
@@ -274,7 +278,7 @@ void image_multi_getimg(const image_header_t *hdr, ulong idx,
 
 static void image_print_type(const image_header_t *hdr)
 {
-       const char *os, *arch, *type, *comp;
+       const char __maybe_unused *os, *arch, *type, *comp;
 
        os = genimg_get_os_name(image_get_os(hdr));
        arch = genimg_get_arch_name(image_get_arch(hdr));
@@ -299,7 +303,7 @@ static void image_print_type(const image_header_t *hdr)
 void image_print_contents(const void *ptr)
 {
        const image_header_t *hdr = (const image_header_t *)ptr;
-       const char *p;
+       const char __maybe_unused *p;
 
        p = IMAGE_INDENT_STRING;
        printf("%sImage Name:   %.*s\n", p, IH_NMLEN, image_get_name(hdr));
@@ -462,7 +466,7 @@ phys_size_t getenv_bootm_size(void)
                tmp = 0;
 
 
-#if defined(CONFIG_ARM)
+#if defined(CONFIG_ARM) && defined(CONFIG_NR_DRAM_BANKS)
        return gd->bd->bi_dram[0].size - tmp;
 #else
        return gd->bd->bi_memsize - tmp;
@@ -543,6 +547,15 @@ void genimg_print_time(time_t timestamp)
 }
 #endif
 
+const table_entry_t *get_table_entry(const table_entry_t *table, int id)
+{
+       for (; table->id >= 0; ++table) {
+               if (table->id == id)
+                       return table;
+       }
+       return NULL;
+}
+
 /**
  * get_table_entry_name - translate entry id to long name
  * @table: pointer to a translation table for entries of a specific type
@@ -559,15 +572,14 @@ void genimg_print_time(time_t timestamp)
  */
 char *get_table_entry_name(const table_entry_t *table, char *msg, int id)
 {
-       for (; table->id >= 0; ++table) {
-               if (table->id == id)
+       table = get_table_entry(table, id);
+       if (!table)
+               return msg;
 #if defined(USE_HOSTCC) || !defined(CONFIG_NEEDS_MANUAL_RELOC)
-                       return table->lname;
+       return table->lname;
 #else
-                       return table->lname + gd->reloc_off;
+       return table->lname + gd->reloc_off;
 #endif
-       }
-       return (msg);
 }
 
 const char *genimg_get_os_name(uint8_t os)
@@ -586,6 +598,20 @@ const char *genimg_get_type_name(uint8_t type)
        return (get_table_entry_name(uimage_type, "Unknown Image", type));
 }
 
+const char *genimg_get_type_short_name(uint8_t type)
+{
+       const table_entry_t *table;
+
+       table = get_table_entry(uimage_type, type);
+       if (!table)
+               return "unknown";
+#if defined(USE_HOSTCC) || !defined(CONFIG_NEEDS_MANUAL_RELOC)
+       return table->sname;
+#else
+       return table->sname + gd->reloc_off;
+#endif
+}
+
 const char *genimg_get_comp_name(uint8_t comp)
 {
        return (get_table_entry_name(uimage_comp, "Unknown Compression",
@@ -610,34 +636,18 @@ int get_table_entry_id(const table_entry_t *table,
                const char *table_name, const char *name)
 {
        const table_entry_t *t;
-#ifdef USE_HOSTCC
-       int first = 1;
-
-       for (t = table; t->id >= 0; ++t) {
-               if (t->sname && strcasecmp(t->sname, name) == 0)
-                       return(t->id);
-       }
 
-       fprintf(stderr, "\nInvalid %s Type - valid names are", table_name);
-       for (t = table; t->id >= 0; ++t) {
-               if (t->sname == NULL)
-                       continue;
-               fprintf(stderr, "%c %s", (first) ? ':' : ',', t->sname);
-               first = 0;
-       }
-       fprintf(stderr, "\n");
-#else
        for (t = table; t->id >= 0; ++t) {
 #ifdef CONFIG_NEEDS_MANUAL_RELOC
-               if (t->sname && strcmp(t->sname + gd->reloc_off, name) == 0)
+               if (t->sname && strcasecmp(t->sname + gd->reloc_off, name) == 0)
 #else
-               if (t->sname && strcmp(t->sname, name) == 0)
+               if (t->sname && strcasecmp(t->sname, name) == 0)
 #endif
                        return (t->id);
        }
        debug("Invalid %s Type: %s\n", table_name, name);
-#endif /* USE_HOSTCC */
-       return (-1);
+
+       return -1;
 }
 
 int genimg_get_os_id(const char *name)