/* Don't start if "autostart" is set to "no" */
        if (((s = getenv("autostart")) != NULL) && (strcmp(s, "no") == 0)) {
-               char buf[32];
-               sprintf(buf, "%lX", images.os.image_len);
-               setenv("filesize", buf);
+               setenv_hex("filesize", images.os.image_len);
                return 0;
        }
        appl = (int (*)(int, char * const []))(ulong)ntohl(images.ep);
                case BOOTM_STATE_RAMDISK:
                {
                        ulong rd_len = images.rd_end - images.rd_start;
-                       char str[17];
 
                        ret = boot_ramdisk_high(&images.lmb, images.rd_start,
                                rd_len, &images.initrd_start, &images.initrd_end);
                        if (ret)
                                return ret;
 
-                       sprintf(str, "%lx", images.initrd_start);
-                       setenv("initrd_start", str);
-                       sprintf(str, "%lx", images.initrd_end);
-                       setenv("initrd_end", str);
+                       setenv_hex("initrd_start", images.initrd_start);
+                       setenv_hex("initrd_end", images.initrd_end);
                }
                        break;
 #endif
 
        const struct cbfs_cachenode *file;
        unsigned long offset;
        unsigned long count;
-       char buf[12];
        long size;
 
        if (argc < 3) {
 
        printf("\n%ld bytes read\n", size);
 
-       sprintf(buf, "%lX", size);
-       setenv("filesize", buf);
+       setenv_hex("filesize", size);
 
        return 0;
 }
 
                size = cramfs_load ((char *) offset, &part, filename);
 
        if (size > 0) {
-               char buf[10];
                printf("### CRAMFS load complete: %d bytes loaded to 0x%lx\n",
                        size, offset);
-               sprintf(buf, "%x", size);
-               setenv("filesize", buf);
+               setenv_hex("filesize", size);
        } else {
                printf("### CRAMFS LOAD ERROR<%x> for %s!\n", size, filename);
        }
 
     char *name;
     char *ep;
     int size;
-    char buf [12];
     int drive = CONFIG_SYS_FDC_DRIVE_NUMBER;
 
     /* pre-set load_addr */
     }
     flush_cache (load_addr, size);
 
-    sprintf(buf, "%x", size);
-    setenv("filesize", buf);
+    setenv_hex("filesize", size);
 
     printf("Floppy DOS load complete: %d bytes loaded to 0x%lx\n",
           size, load_addr);
 
                }
 
                if (size > 0) {
-                       char buf[10];
                        printf("### %s load complete: %d bytes loaded to 0x%lx\n",
                                fsname, size, offset);
-                       sprintf(buf, "%x", size);
-                       setenv("filesize", buf);
+                       setenv_hex("filesize", size);
                } else {
                        printf("### %s LOAD ERROR<%x> for %s!\n", fsname, size, filename);
                }
 
        int     type;                           /* return code for record type  */
        ulong   addr;                           /* load address from S-Record   */
        ulong   size;                           /* number of bytes transferred  */
-       char    buf[32];
        ulong   store_addr;
        ulong   start_addr = ~0;
        ulong   end_addr   =  0;
                            start_addr, end_addr, size, size
                    );
                    flush_cache(start_addr, size);
-                   sprintf(buf, "%lX", size);
-                   setenv("filesize", buf);
+                   setenv_hex("filesize", size);
                    return (addr);
                case SREC_START:
                    break;
 static ulong load_serial_bin(ulong offset)
 {
        int size, i;
-       char buf[32];
 
        set_kerm_bin_mode((ulong *) offset);
        size = k_recv();
        flush_cache(offset, size);
 
        printf("## Total Size      = 0x%08x = %d Bytes\n", size, size);
-       sprintf(buf, "%X", size);
-       setenv("filesize", buf);
+       setenv_hex("filesize", size);
 
        return offset;
 }
 static ulong load_serial_ymodem(ulong offset)
 {
        int size;
-       char buf[32];
        int err;
        int res;
        connection_info_t info;
        flush_cache(offset, size);
 
        printf("## Total Size      = 0x%08x = %d Bytes\n", size, size);
-       sprintf(buf, "%X", size);
-       setenv("filesize", buf);
+       setenv_hex("filesize", size);
 
        return offset;
 }
 
  */
 static void index_partitions(void)
 {
-       char buf[16];
        u16 mtddevnum;
        struct part_info *part;
        struct list_head *dentry;
                        dev = list_entry(dentry, struct mtd_device, link);
                        if (dev == current_mtd_dev) {
                                mtddevnum += current_mtd_partnum;
-                               sprintf(buf, "%d", mtddevnum);
-                               setenv("mtddevnum", buf);
+                               setenv_ulong("mtddevnum", mtddevnum);
                                break;
                        }
                        mtddevnum += dev->num_parts;
 
 {
        nand_info_t *nand = &nand_info[idx];
        struct nand_chip *chip = nand->priv;
-       char buf[32];
 
        printf("Device %d: ", idx);
        if (chip->numchips > 1)
        printf("  Erase size %8d b\n", nand->erasesize);
 
        /* Set geometry info */
-       sprintf(buf, "%x", nand->writesize);
-       setenv("nand_writesize", buf);
-
-       sprintf(buf, "%x", nand->oobsize);
-       setenv("nand_oobsize", buf);
-
-       sprintf(buf, "%x", nand->erasesize);
-       setenv("nand_erasesize", buf);
+       setenv_hex("nand_writesize", nand->writesize);
+       setenv_hex("nand_oobsize", nand->oobsize);
+       setenv_hex("nand_erasesize", nand->erasesize);
 }
 
 static int raw_access(nand_info_t *nand, ulong addr, loff_t off, ulong count,
 
                envp->flags = ACTIVE_FLAG;
 #endif
        }
-       sprintf(buf, "%zX", (size_t)(len + offsetof(env_t, data)));
-       setenv("filesize", buf);
+       setenv_hex("filesize", len + offsetof(env_t, data));
 
        return 0;
 
 
        ulong addr = 0, filelen;
        disk_partition_t info;
        block_dev_desc_t *dev_desc = NULL;
-       char buf [12];
        unsigned long count;
        char *addr_str;
 
        load_addr = addr;
 
        printf ("\n%ld bytes read\n", filelen);
-       sprintf(buf, "%lX", filelen);
-       setenv("filesize", buf);
+       setenv_hex("filesize", filelen);
 
        return filelen;
 }
 
 static int do_setexpr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        ulong a, b;
-       char buf[16];
+       ulong value;
        int w;
 
        /* Validate arguments */
        a = get_arg(argv[2], w);
 
        if (argc == 3) {
-               sprintf(buf, "%lx", a);
-               setenv(argv[1], buf);
+               setenv_hex(argv[1], a);
 
                return 0;
        }
        b = get_arg(argv[4], w);
 
        switch (argv[3][0]) {
-       case '|': sprintf(buf, "%lx", (a | b)); break;
-       case '&': sprintf(buf, "%lx", (a & b)); break;
-       case '+': sprintf(buf, "%lx", (a + b)); break;
-       case '^': sprintf(buf, "%lx", (a ^ b)); break;
-       case '-': sprintf(buf, "%lx", (a - b)); break;
-       case '*': sprintf(buf, "%lx", (a * b)); break;
-       case '/': sprintf(buf, "%lx", (a / b)); break;
-       case '%': sprintf(buf, "%lx", (a % b)); break;
+       case '|':
+               value = a | b;
+               break;
+       case '&':
+               value = a & b;
+               break;
+       case '+':
+               value = a + b;
+               break;
+       case '^':
+               value = a ^ b;
+               break;
+       case '-':
+               value = a - b;
+               break;
+       case '*':
+               value = a * b;
+               break;
+       case '/':
+               value = a / b;
+               break;
+       case '%':
+               value = a % b;
+               break;
        default:
                printf("invalid op\n");
                return 1;
        }
 
-       setenv(argv[1], buf);
+       setenv_hex(argv[1], value);
 
        return 0;
 }
 
 {
        unsigned long src, dst;
        unsigned long src_len = ~0UL, dst_len = ~0UL;
-       char buf[32];
 
        switch (argc) {
                case 4:
                return 1;
 
        printf("Uncompressed size: %ld = 0x%lX\n", src_len, src_len);
-       sprintf(buf, "%lX", src_len);
-       setenv("filesize", buf);
+       setenv_hex("filesize", src_len);
 
        return 0;
 }
 
        ulong           data, len, count;
        int             verify;
        int             part = 0;
-       char            pbuf[10];
        image_header_t  *hdr;
 #if defined(CONFIG_FIT)
        const char      *uname = NULL;
                puts("OK\n");
        }
 
-       sprintf(pbuf, "%8lx", data);
-       setenv("fileaddr", pbuf);
-       sprintf(pbuf, "%8lx", len);
-       setenv("filesize", pbuf);
+       setenv_hex("fileaddr", data);
+       setenv_hex("filesize", len);
 
        return 0;
 }
 
        load_addr = addr;
 
        printf("%llu bytes read\n", zfile.size);
-       sprintf(buf, "%llX", zfile.size);
-       setenv("filesize", buf);
+       setenv_hex("filesize", zfile.size);
 
        return 0;
 }
 
 {
        unsigned long src, dst;
        unsigned long src_len, dst_len = ~0UL;
-       char buf[32];
 
        switch (argc) {
                case 5:
                return 1;
 
        printf("Compressed size: %ld = 0x%lX\n", dst_len, dst_len);
-       sprintf(buf, "%lX", dst_len);
-       setenv("filesize", buf);
+       setenv_hex("filesize", dst_len);
 
        return 0;
 }