static int do_zfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { const char *filename = "/"; int part; block_dev_desc_t *dev_desc; disk_partition_t info; struct device_s vdev; if (argc < 2) return cmd_usage(cmdtp); if (argc == 4) filename = argv[3]; part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1); if (part < 0) return 1; zfs_set_blk_dev(dev_desc, &info); vdev.part_length = info.size; zfs_ls(&vdev, filename, zfs_print); return 0; }
static int do_zfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { const char *filename = "/@/"; int part; struct blk_desc *dev_desc; disk_partition_t info; struct zfs_device_s vdev; if (argc < 2) return cmd_usage(cmdtp); if (argc == 4) filename = argv[3]; else printf("zfsls %s %s %s\n", argv[1], argv[2], filename); part = blk_get_device_part_str(argv[1], argv[2], &dev_desc, &info, 1); if (part < 0) return 1; zfs_set_blk_dev(&vdev, dev_desc, &info); zfs_ls(&vdev, filename, zfs_print, NULL); return 0; }
static int do_zfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { const char *filename = "/"; int dev; unsigned long part = 1; char *ep; int part_length; struct device_s vdev; if (argc < 3) return cmd_usage(cmdtp); dev = (int)simple_strtoul(argv[2], &ep, 16); zfs_dev_desc = get_dev(argv[1], dev); if (zfs_dev_desc == NULL) { printf("\n** Block device %s %d not supported\n", argv[1], dev); return 1; } if (*ep) { if (*ep != ':') { puts("\n** Invalid boot device, use `dev[:part]' **\n"); return 1; } part = simple_strtoul(++ep, NULL, 16); } if (argc == 4) filename = argv[3]; part_length = zfs_set_blk_dev(zfs_dev_desc, part); if (part_length == 0) { printf("** Bad partition - %s %d:%lu **\n", argv[1], dev, part); return 1; } vdev.part_length = part_length; zfs_ls(&vdev, filename, zfs_print); return 0; }
static int do_zfs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { char *filename = NULL; int dev; int part; ulong addr = 0; disk_partition_t info; block_dev_desc_t *dev_desc; char buf[12]; unsigned long count; const char *addr_str; struct zfs_file zfile; struct device_s vdev; if (argc < 3) return CMD_RET_USAGE; count = 0; addr = simple_strtoul(argv[3], NULL, 16); filename = getenv("bootfile"); switch (argc) { case 3: addr_str = getenv("loadaddr"); if (addr_str != NULL) addr = simple_strtoul(addr_str, NULL, 16); else addr = CONFIG_SYS_LOAD_ADDR; break; case 4: break; case 5: filename = argv[4]; break; case 6: filename = argv[4]; count = simple_strtoul(argv[5], NULL, 16); break; default: return cmd_usage(cmdtp); } if (!filename) { puts("** No boot file defined **\n"); return 1; } part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1); if (part < 0) return 1; dev = dev_desc->dev; printf("Loading file \"%s\" from %s device %d%c%c\n", filename, argv[1], dev, part ? ':' : ' ', part ? part + '0' : ' '); zfs_set_blk_dev(dev_desc, &info); vdev.part_length = info.size; memset(&zfile, 0, sizeof(zfile)); zfile.device = &vdev; if (zfs_open(&zfile, filename)) { printf("** File not found %s\n", filename); return 1; } if ((count < zfile.size) && (count != 0)) zfile.size = (uint64_t)count; if (zfs_read(&zfile, (char *)addr, zfile.size) != zfile.size) { printf("** Unable to read \"%s\" from %s %d:%d **\n", filename, argv[1], dev, part); zfs_close(&zfile); return 1; } zfs_close(&zfile); /* Loading ok, update default load address */ load_addr = addr; printf("%llu bytes read\n", zfile.size); setenv_hex("filesize", zfile.size); return 0; }
static int do_zfs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { char *filename = NULL; char *ep; int dev; unsigned long part = 1; ulong addr = 0; ulong part_length; disk_partition_t info; char buf[12]; unsigned long count; const char *addr_str; struct zfs_file zfile; struct device_s vdev; if (argc < 3) return CMD_RET_USAGE; count = 0; addr = simple_strtoul(argv[3], NULL, 16); filename = getenv("bootfile"); switch (argc) { case 3: addr_str = getenv("loadaddr"); if (addr_str != NULL) addr = simple_strtoul(addr_str, NULL, 16); else addr = CONFIG_SYS_LOAD_ADDR; break; case 4: break; case 5: filename = argv[4]; break; case 6: filename = argv[4]; count = simple_strtoul(argv[5], NULL, 16); break; default: return cmd_usage(cmdtp); } if (!filename) { puts("** No boot file defined **\n"); return 1; } dev = (int)simple_strtoul(argv[2], &ep, 16); zfs_dev_desc = get_dev(argv[1], dev); if (zfs_dev_desc == NULL) { printf("** Block device %s %d not supported\n", argv[1], dev); return 1; } if (*ep) { if (*ep != ':') { puts("** Invalid boot device, use `dev[:part]' **\n"); return 1; } part = simple_strtoul(++ep, NULL, 16); } if (part != 0) { if (get_partition_info(zfs_dev_desc, part, &info)) { printf("** Bad partition %lu **\n", part); return 1; } if (strncmp((char *)info.type, BOOT_PART_TYPE, strlen(BOOT_PART_TYPE)) != 0) { printf("** Invalid partition type \"%s\" (expect \"" BOOT_PART_TYPE "\")\n", info.type); return 1; } printf("Loading file \"%s\" " "from %s device %d:%lu %s\n", filename, argv[1], dev, part, info.name); } else { printf("Loading file \"%s\" from %s device %d\n", filename, argv[1], dev); } part_length = zfs_set_blk_dev(zfs_dev_desc, part); if (part_length == 0) { printf("**Bad partition - %s %d:%lu **\n", argv[1], dev, part); return 1; } vdev.part_length = part_length; memset(&zfile, 0, sizeof(zfile)); zfile.device = &vdev; if (zfs_open(&zfile, filename)) { printf("** File not found %s\n", filename); return 1; } if ((count < zfile.size) && (count != 0)) zfile.size = (uint64_t)count; if (zfs_read(&zfile, (char *)addr, zfile.size) != zfile.size) { printf("** Unable to read \"%s\" from %s %d:%lu **\n", filename, argv[1], dev, part); zfs_close(&zfile); return 1; } zfs_close(&zfile); /* Loading ok, update default load address */ load_addr = addr; printf("%llu bytes read\n", zfile.size); sprintf(buf, "%llX", zfile.size); setenv("filesize", buf); return 0; }