Esempio n. 1
0
void zzjson_free(ZZJSON_CONFIG *config, ZZJSON *zzjson) {
    while (zzjson) {
        ZZJSON *next;
        switch(zzjson->type) {
        case ZZJSON_OBJECT:
            config->free(zzjson->value.object.label);
            zzjson_free(config, zzjson->value.object.val);
            break;
        case ZZJSON_ARRAY:
            zzjson_free(config, zzjson->value.array.val);
            break;
        case ZZJSON_STRING:
            config->free(zzjson->value.string.string);
            break;
        default:
            break;
        }
        next = zzjson->next;
        config->free(zzjson);
        zzjson = next;
    }
}
Esempio n. 2
0
void show_disk(struct s_hardware *hardware, ZZJSON_CONFIG *conf, ZZJSON **it, int drive) {
	config=conf;
	item=it;
	int i = drive - 0x80;
	struct driveinfo *d = &hardware->disk_info[i];
	char mbr_name[50]={0};
	char disk_size[11]={0};

	get_mbr_string(hardware->mbr_ids[i], &mbr_name,sizeof(mbr_name));
	if ((int)d->edd_params.sectors > 0)
		sectors_to_size((int)d->edd_params.sectors, disk_size);

	char disk[5]={0};
	char edd_version[5]={0};
	snprintf(disk,sizeof(disk),"0x%X",d->disk);
	snprintf(edd_version,sizeof(edd_version),"%X",d->edd_version);
	zzjson_print(config, *item);
	zzjson_free(config, *item);

	CREATE_ARRAY
		add_as("disk->number",disk) 
		add_ai("disk->cylinders",d->legacy_max_cylinder +1) 
		add_ai("disk->heads",d->legacy_max_head +1)
		add_ai("disk->sectors_per_track",d->legacy_sectors_per_track)
		add_as("disk->edd_version",edd_version)
		add_as("disk->size",disk_size)
		add_ai("disk->bytes_per_sector",(int)d->edd_params.bytes_per_sector)
		add_ai("disk->sectors_per_track",(int)d->edd_params.sectors_per_track)
		add_as("disk->host_bus",remove_spaces((char *)d->edd_params.host_bus_type))
		add_as("disk->interface_type",remove_spaces((char *)d->edd_params.interface_type))
		add_as("disk->mbr_name",mbr_name)
		add_ai("disk->mbr_id",hardware->mbr_ids[i])
	END_OF_ARRAY;

	if (parse_partition_table(d, &show_partition_information)) {
	        if (errno_disk) { 
			APPEND_ARRAY
				add_as("disk->error", "IO Error")
			END_OF_APPEND;
		} else  {
			APPEND_ARRAY
				add_as("disk->error", "Unrecognized Partition Layout")
			END_OF_APPEND;
		}
	}
}
Esempio n. 3
0
ZZJSON *zzjson_parse(ZZJSON_CONFIG *config) {
    ZZJSON *retval;
    int c;

    SKIPWS();   
    c = GETC();
    UNGETC(c);
    if (c == '[')       retval = parse_array(config);
    else if (c == '{')  retval = parse_object(config);
    else                { ERROR("expected '[' or '{'"); return NULL; }

    if (!retval) return NULL;

    SKIPWS();
    c = GETC();
    if (c >= 0 && !ALLOW_GARBAGE_AT_END) {
        ERROR("parse: garbage at end of file");
        zzjson_free(config, retval);
        return NULL;
    }

    return retval;
}
Esempio n. 4
0
static ZZJSON *parse_object(ZZJSON_CONFIG *config) {
    ZZJSON *retval = NULL;
    int c;
    ZZJSON **next = &retval;

    SKIPWS();
    c = GETC();
    if (c != '{') {
        ERROR("object: expected '{'");
        return NULL;
    }

    SKIPWS();
    c = GETC();
    while (c > 0 && c != '}') {
        ZZJSON *zzjson = NULL, *val = NULL;
        char *str;

        UNGETC(c);

        str = parse_string(config);
        if (!str) {
            ERROR("object: expected string");
errout_with_str:
            config->free(str);
            goto errout;
        }

        SKIPWS();
        c = GETC();
        if (c != ':') {
            ERROR("object: expected ':'");
            goto errout_with_str;
        }

        SKIPWS();
        val = parse_value(config);
        if (!val) {
            ERROR("object: value expected");
            goto errout_with_str;
        }

        SKIPWS();
        c = GETC();
        if (c != ',' && c != '}') {
            ERROR("object: expected ',' or '}'");
errout_with_str_and_val:
            zzjson_free(config, val);
            goto errout_with_str;
        }
        if (c == ',') {
            SKIPWS();
            c = GETC();
            if (c == '}' && !ALLOW_EXTRA_COMMA) {
                ERROR("object: expected pair after ','");
                goto errout_with_str_and_val;
            }
        }
        UNGETC(c);

        zzjson = config->calloc(1, sizeof(ZZJSON));
        if (!zzjson) {
            MEMERROR();
            goto errout_with_str_and_val;
        }
        zzjson->type                = ZZJSON_OBJECT;
        zzjson->value.object.label  = str;
        zzjson->value.object.val    = val;
        *next = zzjson;
        next = &zzjson->next;

        c = GETC();
    }

    if (c != '}') {
        ERROR("object: expected '}'");
        goto errout;
    }

    if (!retval) {  /* empty object, { } */
        retval = config->calloc(1, sizeof(ZZJSON));
        if (!retval) {
            MEMERROR();
            return NULL;
        }
        retval->type = ZZJSON_OBJECT;
    }
            
    return retval;

errout:
    zzjson_free(config, retval);
    return NULL;
}
Esempio n. 5
0
static ZZJSON *parse_array(ZZJSON_CONFIG *config) {
    ZZJSON *retval = NULL, **next = &retval;
    int c;

    SKIPWS();
    c = GETC();
    if (c != '[') {
        ERROR("array: expected '['");
        return NULL;
    }

    SKIPWS();
    c = GETC();
    while (c > 0 && c != ']') {
        ZZJSON *zzjson = NULL, *val = NULL;

        UNGETC(c);

        SKIPWS();
        val = parse_value(config);
        if (!val) {
            ERROR("array: value expected");
            goto errout;
        }

        SKIPWS();
        c = GETC();
        if (c != ',' && c != ']') {
            ERROR("array: expected ',' or ']'");
errout_with_val:
            zzjson_free(config, val);
            goto errout;
        }
        if (c == ',') {
            SKIPWS();
            c = GETC();
            if (c == ']' && !ALLOW_EXTRA_COMMA) {
                ERROR("array: expected value after ','");
                goto errout_with_val;
            }
        }
        UNGETC(c);

        zzjson = config->calloc(1, sizeof(ZZJSON));
        if (!zzjson) {
            MEMERROR();
            zzjson_free(config, val);
            goto errout_with_val;
        }
        zzjson->type            = ZZJSON_ARRAY;
        zzjson->value.array.val = val;
        *next = zzjson;
        next = &zzjson->next;

        c = GETC();
    }

    if (c != ']') {
        ERROR("array: expected ']'");
        goto errout;
    }

    if (!retval) {  /* empty array, [ ] */
        retval = config->calloc(1, sizeof(ZZJSON));
        if (!retval) {
            MEMERROR();
            return NULL;
        }
        retval->type = ZZJSON_ARRAY;
    }
            
    return retval;

errout:
    zzjson_free(config, retval);
    return NULL;
}
Esempio n. 6
0
void flush (ZZJSON_CONFIG *config, ZZJSON ** item) { 
   zzjson_print(config, *item);
   zzjson_free(config, *item);
   *item=NULL;
}