コード例 #1
0
ファイル: cg.c プロジェクト: LeeThompson/replaypc
int parse_fixed_program_record(unsigned char **pp,
                               struct fixed_program_record * prog,
                               int varsize)
{
    unsigned char * p = *pp;
    int data_len;
    u8 offset;
    
    memset(prog, 0, sizeof prog);
    
    prog->flags            = rtv_to_u32(&p);              
    prog->event_time       = rtv_to_u32(&p);
    prog->tmsid            = rtv_to_u32(&p);
    prog->minutes          = rtv_to_u16(&p);
    prog->genre1           = *p++;
    prog->genre2           = *p++;
    prog->genre3           = *p++;
    prog->genre4           = *p++;
    prog->record_len       = rtv_to_u16(&p);
    prog->title_len        = *p++;
    prog->episode_len      = *p++;
    prog->description_len  = *p++;
    prog->actor_len        = *p++;
    prog->guest_len        = *p++;
    prog->suzuki_len       = *p++;
    prog->producer_len     = *p++;
    prog->director_len     = *p++;
    if (varsize)
        data_len = prog->record_len - 28;
    else
        data_len = sizeof(prog->datablock);
    memcpy(prog->datablock, p, data_len);
    p                     += data_len;

    *pp = p;
    
    p = prog->datablock;
    if (prog->flags & 0x0040)
        parse_parts(&p, &prog->parts);
    if (prog->flags & 0x0020)
        parse_movie(&p, &prog->movie);
    offset = p - prog->datablock;
    prog->title_offset       = offset; offset += prog->title_len;
    prog->episode_offset     = offset; offset += prog->episode_len;
    prog->description_offset = offset; offset += prog->description_len;
    prog->actor_offset       = offset; offset += prog->actor_len;
    prog->guest_offset       = offset; offset += prog->guest_len;
    prog->suzuki_offset      = offset; offset += prog->suzuki_len;
    prog->producer_offset    = offset; offset += prog->producer_len;
    prog->director_offset    = offset; offset += prog->director_len;

    expect(prog->record_len == 0 ||
           ((offset + 28 + 3) & 0xfffc) == prog->record_len);

    return 0;
}
コード例 #2
0
ファイル: flash_part.c プロジェクト: armfun/boot-hix5hd2
static int parse_cmdline(struct cmdline_parts **parts, const char *cmdline)
{
	int ret;
	char *buf;
	char *pbuf;
	char *next;
	struct cmdline_parts **next_parts;

	*parts = NULL;

	next = pbuf = buf = strdup(cmdline);
	if (!buf) {
		DBG_MSG("Fail to dup cmdline, size=%d\n", strlen(cmdline));
		return -ENOMEM;
	}

	next_parts = parts;

	while (next && *pbuf) {
		next = strchr(pbuf, ';');
		if (next)
			*next = '\0';

		ret = parse_parts(next_parts, pbuf);
		if (ret)
			goto fail;

		if (next)
			pbuf = ++next;

		next_parts = &(*next_parts)->next_parts;
	}

	if (!*parts) {
		DBG_MSG("cmdline partition has not valid partition.");
		ret = -EINVAL;
		goto fail;
	}

	ret = 0;
done:
	free(buf);
	return ret;

fail:
	free_parts(parts);
	goto done;
}