void InventoryWidget::set_prev_container() { if(!container_obj) return; if(container_obj->get_engine_loc() == OBJ_LOC_CONT) set_container((Obj *)container_obj->parent); else set_container(NULL); return; }
inline container* _set_clone( container *C ) { set_container_priv *LP = C->priv; container *N = LP->Key->clone(LP->Key); return set_container(N); }
static int build_container(soc_type_t soc, uint32_t sector_size, bool emmc_fastboot, image_t *image_stack, bool dcd_skip, uint8_t fuse_version, uint16_t sw_version, int ofd) { static imx_header_v3_t imx_header; image_t *img_sp = image_stack; int file_off; uint8_t *tmp; struct stat sbuf; char *tmp_filename = NULL; uint32_t size = 0; uint32_t file_padding = 0; int ret; int container = -1; int cont_img_count = 0; /* indexes to arrange the container */ memset((char *)&imx_header, 0, sizeof(imx_header_v3_t)); if (!image_stack) { fprintf(stderr, "Empty image stack "); exit(EXIT_FAILURE); } if (soc == QX) fprintf(stdout, "Platform:\ti.MX8QXP B0\n"); else if (soc == QM) fprintf(stdout, "Platform:\ti.MX8QM B0\n"); set_imx_hdr_v3(&imx_header, 0); set_imx_hdr_v3(&imx_header, 1); file_off = get_container_image_start_pos(image_stack, sector_size); fprintf(stdout, "container image offset (aligned):%x\n", file_off); /* step through image stack and generate the header */ img_sp = image_stack; /* stop once we reach null terminator */ while (img_sp->option != NO_IMG) { switch (img_sp->option) { case AP: case M40: case M41: case SCFW: case DATA: case MSG_BLOCK: if (container < 0) { fprintf(stderr, "No container found\n"); exit(EXIT_FAILURE); } check_file(&sbuf, img_sp->filename); tmp_filename = img_sp->filename; set_image_array_entry(&imx_header.fhdr[container], soc, img_sp, file_off, ALIGN(sbuf.st_size, sector_size), tmp_filename, dcd_skip); img_sp->src = file_off; file_off += ALIGN(sbuf.st_size, sector_size); cont_img_count++; break; case SECO: if (container < 0) { fprintf(stderr, "No container found\n"); exit(EXIT_FAILURE); } check_file(&sbuf, img_sp->filename); tmp_filename = img_sp->filename; set_image_array_entry(&imx_header.fhdr[container], soc, img_sp, file_off, sbuf.st_size, tmp_filename, dcd_skip); img_sp->src = file_off; file_off += sbuf.st_size; cont_img_count++; break; case NEW_CONTAINER: container++; set_container(&imx_header.fhdr[container], sw_version, CONTAINER_ALIGNMENT, CONTAINER_FLAGS_DEFAULT, fuse_version); /* reset img count when moving to new container */ cont_img_count = 0; scfw_flags = 0; break; case APPEND: /* * nothing to do here, the container is appended * in the output */ break; case FLAG: /* * override the flags for scfw in current container * mask off bottom 16 bits. */ scfw_flags = img_sp->entry & 0xFFFF0000; break; case FILEOFF: if (file_off > img_sp->dst) { fprintf(stderr, "FILEOFF address less than current file offset!!!\n"); exit(EXIT_FAILURE); } if (img_sp->dst != ALIGN(img_sp->dst, sector_size)) { fprintf(stderr, "FILEOFF address is not aligned to sector size!!!\n"); exit(EXIT_FAILURE); } file_off = img_sp->dst; break; case PARTITION: /* * keep custom partition until next executable image * use a global var for default behaviour */ custom_partition = img_sp->entry; break; default: fprintf(stderr, "unrecognized option in input stack (%d)\n", img_sp->option); exit(EXIT_FAILURE); } img_sp++; /* advance index */ } /* Append container (if specified) */ img_sp = image_stack; do { if (img_sp->option == APPEND) { copy_file(ofd, img_sp->filename, 0, 0); file_padding += FIRST_CONTAINER_HEADER_LENGTH; } img_sp++; } while (img_sp->option != NO_IMG); /* Add padding or skip appended container */ ret = lseek(ofd, file_padding, SEEK_SET); if (ret < 0) { fprintf(stderr, "%s: lseek error %s\n", __func__, strerror(errno)); exit(EXIT_FAILURE); } if (container >= 0) { /* Note: Image offset are not contained in the image */ tmp = flatten_container_header(&imx_header, container + 1, &size, file_padding); /* Write image header */ if (write(ofd, tmp, size) != size) { fprintf(stderr, "error writing image hdr\n"); exit(EXIT_FAILURE); } /* Clean-up memory used by the headers */ free(tmp); } /* * step through the image stack again this time copying * images to final bin, stop once we reach null terminator. */ img_sp = image_stack; while (img_sp->option != NO_IMG) { if (img_sp->option == M40 || img_sp->option == M41 || img_sp->option == AP || img_sp->option == DATA || img_sp->option == SCD || img_sp->option == SCFW || img_sp->option == SECO || img_sp->option == MSG_BLOCK) { copy_file_aligned(ofd, img_sp->filename, img_sp->src, sector_size); } img_sp++; } return 0; }