Example #1
0
YogHandle*
YogVM_import_package(YogEnv* env, YogVM* vm, YogHandle* name)
{
    YogHandle* parent = NULL;
    YogHandle* top = NULL;
    uint_t n = 0;
    while (1) {
        int_t pos = YogString_find_char(env, HDL2VAL(name), n, '.');
        YogHandle* s = pos < 0 ? name : VAL2HDL(env, YogString_slice(env, name, 0, pos));
        YogHandle* pkg = VAL2HDL(env, import_package(env, vm, s));
        set_package_as_parent_attr(env, vm, parent, name, n, pos, pkg);
        if (top == NULL) {
            top = pkg;
        }

        if (pos < 0) {
            break;
        }

        parent = pkg;
        n = pos + 1;
    }

    return top;
}
Example #2
0
int pack_update(const char* srcdir, const char* dstfile) {
    struct update_header header;
    FILE *fp;
    int i;
    char buf[PATH_MAX];

    printf("------ PACKAGE ------\n");
    memset(&header, 0, sizeof(header));

    snprintf(buf, sizeof(buf), "%s/%s", srcdir, "parameter");
    if (parse_parameter(buf))
        return -1;

    snprintf(buf, sizeof(buf), "%s/%s", srcdir, "package-file");
    if (get_packages(buf))
        return -1;

    fp = fopen(dstfile, "w");
    if (!fp)
        return -1;

    fwrite(&header, sizeof(header), 1, fp);

    for (i = 0; i < package_image.num_package; ++i) {
        strcpy(header.parts[i].name, package_image.packages[i].name);
        strcpy(header.parts[i].filename, package_image.packages[i].filename);
        header.parts[i].nand_addr = package_image.packages[i].nand_addr;
        header.parts[i].nand_size = package_image.packages[i].nand_size;

        if (strcmp(package_image.packages[i].filename, "SELF") == 0)
            continue;

        snprintf(buf, sizeof(buf), "%s/%s", srcdir, header.parts[i].filename);
        printf("Add file: %s\n", buf);
        import_package(fp, &header.parts[i], buf);
    }

    strcpy(header.magic, "RKAF");
    strcpy(header.manufacturer, package_image.manufacturer);
    strcpy(header.model, package_image.machine_model);
    strcpy(header.id, package_image.machine_id);
    header.length = ftell(fp);
    header.num_parts = package_image.num_package;
    header.version = package_image.version;

    for (i = header.num_parts - 1; i >= 0; --i)
    {
        if (strcmp(header.parts[i].filename, "SELF") == 0)
        {
            header.parts[i].size = header.length + 4;
            header.parts[i].padded_size = (header.parts[i].size + 511) / 512 *512;
        }
    }

    fseek(fp, 0, SEEK_SET);
    fwrite(&header, sizeof(header), 1, fp);
    fclose(fp);

    append_crc(dstfile);

    printf("------ OK ------\n");

    return 0;
}
int pack_update(const char* srcdir, const char* dstfile) {
	struct update_header header;
	FILE *fp = NULL;
	unsigned int i;

	printf("------ PACKAGE ------\n");
	memset(&header, 0, sizeof(header));

	fp = fopen(dstfile, "wb+");
	if (!fp) {
		printf("Can't open destination file \"%s\": %s\n", dstfile, strerror(errno));
		return -1;
	}

	if (chdir(srcdir))
		return -1;

	if (parse_parameter("parameter"))
		return -1;

	if (get_packages("package-file"))
		return -1;

	fwrite(&header, sizeof(header), 1, fp);

	for (i = 0; i < package_image.num_package; ++i) {
		strcpy(header.parts[i].name, package_image.packages[i].name);
		strcpy(header.parts[i].filename, package_image.packages[i].filename);
		header.parts[i].nand_addr = package_image.packages[i].nand_addr;
		header.parts[i].nand_size = package_image.packages[i].nand_size;

		if (strcmp(package_image.packages[i].filename, "SELF") == 0)
			continue;

		printf("Add file: %s\n", header.parts[i].filename);
		import_package(fp, &header.parts[i], header.parts[i].filename);
	}

	memcpy(header.magic, RKAFP_MAGIC, sizeof(header.magic));
	strcpy(header.manufacturer, package_image.manufacturer);
	strcpy(header.model, package_image.machine_model);
	strcpy(header.id, package_image.machine_id);
	header.length = ftell(fp);
	header.num_parts = package_image.num_package;
	header.version = package_image.version;

	for (i = 0; i < header.num_parts; i++)
	{
		if (strcmp(header.parts[i].filename, "SELF") == 0)
		{
			header.parts[i].size = header.length + 4;
			header.parts[i].padded_size = (header.parts[i].size + 511) / 512 *512;
		}
	}

	fseek(fp, 0, SEEK_SET);
	fwrite(&header, sizeof(header), 1, fp);

	append_crc(fp);

	fclose(fp);

	printf("------ OK ------\n");

	return 0;
}