Example #1
0
void parse_oncore_shmem(char *buf, struct gps_status *gps) {
	struct oncore_shmem o;
	memcpy(&o, buf, sizeof(o));
	gps->month = o.month;
	gps->day = o.day;
	gps->year = be16toh(o.year);
	gps->hour = o.hour;
	gps->minute = o.minute;
	gps->second = o.second;
	gps->flags = o.flags;
	gps->visible = o.visible;
	gps->tracking = o.tracking;
	gps->ns = be32toh(o.ns);

	gps->latitude = (int32_t)be32toh(o.latitude) * (1 / 3600000.0);
	gps->longitude = (int32_t)be32toh(o.longitude) * (1 / 3600000.0);
	gps->altitude = (int32_t)be32toh(o.altitude) / 100.0;
	gps->heading = be16toh(o.heading) / 10.0;
	gps->velocity = be16toh(o.velocity) / 100.0;
	gps->dop = be16toh(o.dop) / 10.0;

	gps->ant_uc = ((o.flags & (1<<7)) != 0);
	gps->ant_oc = ((o.flags & (1<<6)) != 0);
	gps->survey = ((o.flags & (1<<5)) != 0);
	gps->dopmode = ((o.flags & 1) != 0) ? 2 : 3;
}
Example #2
0
int usb_handle_packet(usb_t *self)
{
    uint32_t cmd;
    if (self->attached == 0)
    {
        /* only support metadata commands */
        metadata_hdr_t hdr;
        if (self->recv(&hdr, sizeof(hdr)) != sizeof(hdr))
            return 0;
        if (be16toh(hdr.version) != VERSION_CODE)
            return 0;
        const command_t *command = lookup_command((1<<31) | be16toh(hdr.command));
        if (command == NULL)
            return 0;
        return command->handler(self, &hdr);
    }
    else
    {
        /* only support data commands */
        data_hdr_t hdr;
        if (self->recv(&hdr, sizeof(hdr)) != sizeof(hdr))
            return 0;
        const command_t *command = lookup_command(be32toh(hdr.command));
        if (command == NULL)
            return 0;
        return command->handler(self, &hdr);
    }
}
Example #3
0
static vfnt_map_t *
load_vt4mappingtable(unsigned int nmappings, FILE *f)
{
	vfnt_map_t *t;
	unsigned int i;

	if (nmappings == 0)
		return (NULL);

	if ((t = calloc(nmappings, sizeof(*t))) == NULL) {
		warn("calloc");
		return (NULL);
	}

	if (fread(t, sizeof *t * nmappings, 1, f) != 1) {
		warn("read mappings");
		free(t);
		return (NULL);
	}

	for (i = 0; i < nmappings; i++) {
		t[i].src = be32toh(t[i].src);
		t[i].dst = be16toh(t[i].dst);
		t[i].len = be16toh(t[i].len);
	}

	return (t);
}
Example #4
0
void convert_packed(netinfo_packed_t *packed) {
	int i;
	
	packed->nbcpu = be32toh(packed->nbcpu);
	
	packed->memory.ram_total  = be64toh(packed->memory.ram_total);
	packed->memory.ram_used   = be64toh(packed->memory.ram_used);
	packed->memory.swap_total = be64toh(packed->memory.swap_total);
	packed->memory.swap_free  = be64toh(packed->memory.swap_free);
	
	for(i = 0; i < 3; i++)
		packed->loadavg[i]  = be32toh(packed->loadavg[i]);
	
	packed->battery.charge_full = be32toh(packed->battery.charge_full);
	packed->battery.charge_now  = be32toh(packed->battery.charge_now);
	packed->battery.status      = be64toh(packed->battery.status);
	
	packed->uptime.uptime       = be32toh(packed->uptime.uptime);
	
	packed->temp_cpu.critical    = be16toh(packed->temp_cpu.critical);
	packed->temp_cpu.cpu_average = be16toh(packed->temp_cpu.cpu_average);
	
	packed->temp_hdd.peak        = be16toh(packed->temp_hdd.peak);
	packed->temp_hdd.hdd_average = be16toh(packed->temp_hdd.hdd_average);
	
	packed->timestamp = be32toh(packed->timestamp);	
}
Example #5
0
static int
print_mappings(struct file_header *fh, int map_index)
{
	struct file_mapping fm;
	unsigned int nmappings, i, col = 0;

	
	nmappings = be32toh(fh->map_count[map_index]);

	if (nmappings == 0)
		return (0);

	printf("\nstatic struct vt_font_map font_mapping_%s[%u] = {",
	    map_names[map_index], nmappings);

	for (i = 0; i < nmappings; i++) {
		if (fread(&fm, sizeof fm, 1, stdin) != 1) {
			perror("mapping");
			return (1);
		}

		printf(col == 0 ? "\n\t" : " ");
		printf("{ 0x%04x, 0x%04x, 0x%02x },",
		    be32toh(fm.source), be16toh(fm.destination),
		    be16toh(fm.length));
		col = (col + 1) % 2;
	}

	printf("\n};\n");

	return (0);
}
Example #6
0
/* START FUNCTION DESCRIPTION ********************************************
xbee_disc_nd_parse                      <xbee_discovery.c>

SYNTAX:
   int xbee_disc_nd_parse( xbee_node_id_t FAR *parsed,  const void FAR *source)

DESCRIPTION:
     Parse a Node Discovery response and store it in an xbee_node_id_t structure.

**************************************************************************/
int xbee_disc_nd_parse( xbee_node_id_t FAR *parsed, const void FAR *source)
{
	int ni_len;
	const xbee_node_id1_t FAR *id1;
	const xbee_node_id2_t FAR *id2;

	if (parsed == NULL || source == NULL)
	{
		return -EINVAL;
	}

	id1 = (const xbee_node_id1_t FAR *) source;
	ni_len = strlen( id1->node_info);
	if (ni_len > XBEE_DISC_MAX_NODEID_LEN)
	{
		return -EINVAL;
	}

	id2 = (const xbee_node_id2_t FAR *) &id1->node_info[ni_len + 1];
	parsed->ieee_addr_be = id1->ieee_addr_be;
	parsed->network_addr = be16toh( id1->network_addr_be);
	parsed->parent_addr = be16toh( id2->parent_addr_be);
	parsed->device_type = id2->device_type;
	_f_memset( parsed->node_info, 0, sizeof(parsed->node_info));
	_f_memcpy( parsed->node_info, id1->node_info, ni_len);

	return 0;
}
Example #7
0
static void discovery_read_raw(
    struct disk *d, unsigned int tracknr, struct tbuf *tbuf)
{
    struct track_info *ti = &d->di->track[tracknr];
    uint16_t sum, val, *dat = (uint16_t *)ti->dat;
    unsigned int i;

    tbuf_bits(tbuf, SPEED_AVG, bc_raw, 16, dat[ti->len/2+2]);

    val = (ti->type == TRKTYP_sword_sodan) ? 0 :
          (ti->type == TRKTYP_hybris) ? 0 : dat[ti->len/2+2];

    tbuf_bits(tbuf, SPEED_AVG, bc_mfm_even_odd, 16, val);
    tbuf_bits(tbuf, SPEED_AVG, bc_mfm_even_odd, 16, dat[ti->len/2]);
    tbuf_bits(tbuf, SPEED_AVG, bc_mfm_even_odd, 16, ti->len);
    tbuf_bits(tbuf, SPEED_AVG, bc_mfm_even_odd, 16, dat[ti->len/2+1]);
    tbuf_bytes(tbuf, SPEED_AVG, bc_mfm_even_odd, ti->len, dat);
    tbuf_bits(tbuf, SPEED_AVG, bc_mfm_even_odd, 16, 0xdead);

    sum = discovery_sum(be16toh(val), 0);
    sum = discovery_sum(be16toh(dat[ti->len/2]), sum);
    sum = discovery_sum(be16toh(ti->len), sum);
    sum = discovery_sum(be16toh(dat[ti->len/2+1]), sum);

    for (i = 0 ; i < ti->len/2; i++)
        sum = discovery_sum(dat[i], sum);
    sum = discovery_sum(be16toh(0xdead), sum);

    tbuf_bits(tbuf, SPEED_AVG, bc_mfm_even_odd, 16, sum);
}
Example #8
0
int lootr_tlv_next(lootr_tlv_ctx_t *ctx) {
    uint16_t type, length;
	uint8_t *p;
    assert(ctx);

    if (ctx->offset + 2 * sizeof(uint16_t) > ctx->msg_length) {
        return 0;
    }

    p = ctx->msg + ctx->offset;
    type = be16toh(*(uint16_t *)p);
    p += sizeof(uint16_t);
    length = be16toh(*(uint16_t *)p);
    p += sizeof(uint16_t);

    if (ctx->offset + 2 * sizeof(uint16_t) + length > ctx->msg_length) {
        return -ESHORTBUF;
    }

    ctx->tlv.type = type;
    ctx->tlv.length = length;
    ctx->tlv.value = p;
    ctx->offset += 2 * sizeof(uint16_t) + length;
    return 1;
}
Example #9
0
ProcessState * exec(ProcessState * myprocess, char * filename) {

    int fd = open(filename, O_RDONLY);

    //load header
    char header[9];
    read(fd, header, 8);
    header[8] = '\0';

    if(strcmp(header, "SIDECHAN") == 0){
      // printf("SIDECHAN file detected\n");
    } else {
      return NULL;
    }

    //initialize ip and sp from top of file
    read(fd, &(myprocess->registers.ip.reg), sizeof(uint16_t));
    read(fd, &(myprocess->registers.sp.reg), sizeof(uint16_t));

    myprocess->registers.ip.reg = be16toh(myprocess->registers.ip.reg);
    myprocess->registers.sp.reg = be16toh(myprocess->registers.sp.reg);

    int i;
    for(i = 0; i < 65536 && read(fd, myprocess->mem + i, sizeof(char)) > 0; i++);

    // printf("file load complete\n");

    close(fd);

    return myprocess;
  
}
Example #10
0
static int
do_rx_iscsi_data(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m)
{
	struct adapter *sc = iq->adapter;
	struct cxgbei_data *ci = sc->iscsi_ulp_softc;
	struct cpl_iscsi_data *cpl =  mtod(m, struct cpl_iscsi_data *);
	u_int tid = GET_TID(cpl);
	struct toepcb *toep = lookup_tid(sc, tid);
	struct icl_cxgbei_pdu *icp = toep->ulpcb2;

	M_ASSERTPKTHDR(m);
	MPASS(m->m_pkthdr.len == be16toh(cpl->len) + sizeof(*cpl));

	/* Must already have received the header (but not the data). */
	MPASS(icp != NULL);
	MPASS(icp->icp_flags == ICPF_RX_HDR);
	MPASS(icp->ip.ip_data_mbuf == NULL);


	m_adj(m, sizeof(*cpl));
	MPASS(icp->ip.ip_data_len == m->m_pkthdr.len);

	icp->icp_flags |= ICPF_RX_FLBUF;
	icp->ip.ip_data_mbuf = m;
	counter_u64_add(ci->fl_pdus, 1);
	counter_u64_add(ci->fl_bytes, m->m_pkthdr.len);

#if 0
	CTR3(KTR_CXGBE, "%s: tid %u, cpl->len %u", __func__, tid,
	    be16toh(cpl->len));
#endif

	return (0);
}
Example #11
0
void read_mapdesc(int s)
{
	mxbp_header_t header;
	struct msghdr mh;
	struct sockaddr_in addr;
	struct iovec v[3];
	int bytes;

	memset(&addr, 0, sizeof(addr));
	memset(&mh, 0, sizeof(mh));
	memset(recvfilename, 0, FILENAMESIZE);

	v[0].iov_base = &header;
	v[0].iov_len = sizeof(header);
	v[1].iov_base = &mapdesc;
	v[1].iov_len = sizeof(mapdesc);
	v[2].iov_base = recvfilename;
	v[2].iov_len = FILENAMESIZE - 1;

	mh.msg_name = &addr;
	mh.msg_namelen = sizeof(addr);
	mh.msg_iov = v;
	mh.msg_iovlen = 3;

	bytes = recvmsg(s, &mh, 0);
	if (bytes < 0 || bytes < (sizeof(header) + sizeof(mapdesc))) {
		printf("Bad receive: %d %s\n", bytes, strerror(errno));
		printf("header.magic = 0x%08x\n", be32toh(header.magic));
		printf("header.op = %u\n", be16toh(header.op));
		printf("header.size = %u\n", be16toh(header.size));
		printf("header.blockid = %u\n", be32toh(header.blockid));
		printf("sizeof(header) == %ld\n", sizeof(header));
		memset(&mapdesc, 0, sizeof(mapdesc));
		return;
	}

	header.magic = be32toh(header.magic);
	if (header.magic != MXBP_MAGIC) {
		memset(&mapdesc, 0, sizeof(mapdesc));
		return;
	}
	header.op = be16toh(header.op);
	if (header.op != MXBP_BLOCKDESC) {
		memset(&mapdesc, 0, sizeof(mapdesc));
		return;
	}
	header.size = be16toh(header.size);
	if (header.size > FILENAMESIZE - 1) {
		printf
		    ("Holy crap, we got a horrendous filename size of %d bytes, this can't be right.\n",
		     header.size);
		memset(&mapdesc, 0, sizeof(mapdesc));
		return;
	}

	mapdesc.filesize = be64toh(mapdesc.filesize);
	mapdesc.blocksize = be32toh(mapdesc.blocksize);
	mapdesc.nblocks = be32toh(mapdesc.nblocks);
}
Example #12
0
static void *psygnosis_b_write_raw(
    struct disk *d, unsigned int tracknr, struct stream *s)
{
    struct track_info *ti = &d->di->track[tracknr];
    char *block = memalloc(ti->len);
    unsigned int j, k, nr_valid_blocks = 0;

    while ((stream_next_bit(s) != -1) &&
           (nr_valid_blocks != ti->nr_sectors)) {

        uint16_t raw_dat[6*513];
        uint32_t idx_off, new_valid = 0;

        if ((uint16_t)s->word != 0x4489)
            continue;

        idx_off = s->index_offset_bc - 15;

        if (stream_next_bits(s, 32) == -1)
            goto done;

        if (s->word != 0x552aaaaa)
            continue;

        for (j = 0; j < sizeof(raw_dat)/2; j++) {
            uint32_t dat;
            if (stream_next_bytes(s, &dat, 4) == -1)
                goto done;
            mfm_decode_bytes(bc_mfm_even_odd, 2, &dat, &raw_dat[j]);
        }

        for (j = 0; j < 6; j++) {
            uint16_t *sec = &raw_dat[j*513];
            uint16_t csum = be16toh(*sec++), c = 0;
            for (k = 0; k < 512; k++)
                c += be16toh(sec[k]);
            if ((c == csum) && !is_valid_sector(ti, j)) {
                memcpy(&block[j*1024], sec, 1024);
                set_sector_valid(ti, j);
                nr_valid_blocks++;
                new_valid++;
            }
        }

        if (new_valid)
            ti->data_bitoff = idx_off;
    }

done:
    if (nr_valid_blocks == 0) {
        free(block);
        return NULL;
    }

    return block;
}
Example #13
0
void parse_v6_hdr(struct rtas_v6_hdr *v6hdr, struct rtas_v6_hdr_raw *rawv6)
{
    v6hdr->id[0] = rawv6->id[0];
    v6hdr->id[1] = rawv6->id[1];

    v6hdr->length = be16toh(rawv6->length);
    v6hdr->version = rawv6->version;
    v6hdr->subtype = rawv6->subtype;
    v6hdr->creator_comp_id = be16toh(rawv6->creator_comp_id);
}
Example #14
0
static struct container *eadf_open(struct disk *d)
{
    struct disk_header dhdr;
    struct track_header thdr;
    struct disk_info *di;
    struct track_info *ti;
    unsigned int i;

    lseek(d->fd, 0, SEEK_SET);

    read_exact(d->fd, &dhdr, sizeof(dhdr));
    if (strncmp(dhdr.sig, "UAE-1ADF", sizeof(dhdr.sig)))
        return NULL;

    d->di = di = memalloc(sizeof(*di));
    di->nr_tracks = be16toh(dhdr.nr_tracks);
    di->track = memalloc(di->nr_tracks * sizeof(struct track_info));

    for (i = 0; i < di->nr_tracks; i++) {
        ti = &di->track[i];
        read_exact(d->fd, &thdr, sizeof(thdr));
        thdr.type = be16toh(thdr.type);
        if (thdr.type != 1) {
            warnx("Bad track type %u in Ext-ADF", thdr.type);
            goto cleanup_error;
        }
        init_track_info(ti, TRKTYP_raw);
        ti->len = be32toh(thdr.len);
        if (ti->len == 0) {
            init_track_info(ti, TRKTYP_unformatted);
            ti->total_bits = TRK_WEAK;
        } else {
            ti->dat = memalloc(ti->len);
            ti->total_bits = be32toh(thdr.bitlen);
        }
    }

    for (i = 0; i < di->nr_tracks; i++) {
        ti = &di->track[i];
        read_exact(d->fd, ti->dat, ti->len);
    }

    return &container_eadf;

cleanup_error:
    for (i = 0; i < di->nr_tracks; i++)
        memfree(di->track[i].dat);
    memfree(di->track);
    memfree(di);
    d->di = NULL;
    return NULL;
}
Example #15
0
/*
 * Map the ELF headers into the process' address space. We do this in two
 * steps: first the ELF header itself and using that information the whole
 * set of headers.
 */
static int
powerpc_maphdrs(kvm_t *kd)
{
	struct vmstate *vm;
	size_t mapsz;

	vm = kd->vmst;

	vm->mapsz = PAGE_SIZE;
	vm->map = mmap(NULL, vm->mapsz, PROT_READ, MAP_PRIVATE, kd->pmfd, 0);
	if (vm->map == MAP_FAILED) {
		_kvm_err(kd, kd->program, "cannot map corefile");
		return (-1);
	}
	vm->dmphdrsz = 0;
	vm->eh = vm->map;
	if (!valid_elf_header(vm->eh)) {
		/*
		 * Hmmm, no ELF header. Maybe we still have a dump header.
		 * This is normal when the core file wasn't created by
		 * savecore(8), but instead was dumped over TFTP. We can
		 * easily skip the dump header...
		 */
		vm->dmphdrsz = dump_header_size(vm->map);
		if (vm->dmphdrsz == 0)
			goto inval;
		vm->eh = (void *)((uintptr_t)vm->map + vm->dmphdrsz);
		if (!valid_elf_header(vm->eh))
			goto inval;
	}
	mapsz = be16toh(vm->eh->e_phentsize) * be16toh(vm->eh->e_phnum) +
	    be32toh(vm->eh->e_phoff);
	munmap(vm->map, vm->mapsz);

	/* Map all headers. */
	vm->mapsz = vm->dmphdrsz + mapsz;
	vm->map = mmap(NULL, vm->mapsz, PROT_READ, MAP_PRIVATE, kd->pmfd, 0);
	if (vm->map == MAP_FAILED) {
		_kvm_err(kd, kd->program, "cannot map corefle headers");
		return (-1);
	}
	vm->eh = (void *)((uintptr_t)vm->map + vm->dmphdrsz);
	vm->ph = (void *)((uintptr_t)vm->eh + be32toh(vm->eh->e_phoff));
	return (0);

 inval:
	munmap(vm->map, vm->mapsz);
	vm->map = MAP_FAILED;
	_kvm_err(kd, kd->program, "invalid corefile");
	return (-1);
}
Example #16
0
/*
 * Given a pointer to a command buffer and an offset into said buffer that
 * should point to an entry in the auth area this function will return the
 * number of bytes till the next auth entry.
 */
size_t
next_auth_offset (uint8_t *buffer)
{
    UINT16 hash_size, auth_size;
    size_t accumulator = 0;

    accumulator += sizeof (UINT32); /* step over session handle */
    hash_size = be16toh (*(UINT16*)(&buffer [accumulator])); /* get hash size */
    accumulator += sizeof (UINT16) + hash_size; /* step over hash size & hash */
    accumulator += sizeof (UINT8); /* step over session attributes */
    auth_size = be16toh (*(UINT16*)(&buffer [accumulator])); /* get auth size */
    accumulator += sizeof (UINT16) + auth_size; /* step over auth size + auth */

    return accumulator;
}
Example #17
0
/*** EndHeader */
int xbee_route_dump_record_indicator( xbee_dev_t *xbee,
	const void FAR *frame, uint16_t length, void FAR *context)
{
	const xbee_frame_route_record_indicator_t FAR *record = frame;
	char buffer[ADDR64_STRING_LENGTH];
	const uint16_t FAR *addr_be;
	int i;
	
	if (frame == NULL)
	{
		return -EINVAL;
	}
	if (record->address_count == 0
		&& record->address_count > XBEE_ROUTE_MAX_ADDRESS_COUNT)
	{
		printf( "invalid address count, must be 1 to %u (not %u)\n",
			XBEE_ROUTE_MAX_ADDRESS_COUNT, record->address_count);
	}
	else if (length ==
			offsetof( xbee_frame_route_record_indicator_t, route_address_be) +
			record->address_count * sizeof *record->route_address_be)
	{
		printf( "route record indicator from %" PRIsFAR " (0x%04X):\n",
			addr64_format( buffer, &record->ieee_address),
			be16toh( record->network_address_be));
		if (record->receive_options & XBEE_RX_OPT_ACKNOWLEDGED)
		{
			printf( "acknowledged, ");
		}
		if (record->receive_options & XBEE_RX_OPT_BROADCAST)
		{
			printf( "broadcast, ");
		}
		printf( "\t%u addresses:\n\tdest -> ", record->address_count);
		addr_be = record->route_address_be;
		for (i = record->address_count; i; ++addr_be, --i)
		{
			printf( "0x%04X -> ", be16toh( *addr_be));
		}
		puts( "source");

		return 0;
	}
	
	puts( "malformed route record indicator:");
	hex_dump( frame, length, HEX_DUMP_FLAG_TAB);
	return -EINVAL;
}
Example #18
0
static void *puffys_saga_write_raw(
    struct disk *d, unsigned int tracknr, struct stream *s)
{
    struct track_info *ti = &d->di->track[tracknr];

    while (stream_next_bit(s) != -1) {

        uint16_t dat[2*2818], csum;
        unsigned int i;
        char *block;

        if (s->word != 0x44894489)
            continue;
        ti->data_bitoff = s->index_offset - 31;

        for (i = 0; i < 30; i++) {
            if (stream_next_bits(s, 32) == -1)
                goto fail;
            if (mfm_decode_bits(bc_mfm, s->word))
                break;
        }
        if (i != 30)
            continue;

        if (stream_next_bits(s, 16) == -1)
            goto fail;
        if ((uint16_t)s->word != 0x4444)
            continue;

        if (stream_next_bytes(s, dat, sizeof(dat)) == -1)
            goto fail;
        mfm_decode_bytes(bc_mfm, sizeof(dat)/2, dat, dat);

        csum = 0;
        for (i = 1; i < 2818; i++)
            csum += be16toh(dat[i]);
        if ((be16toh(dat[0]) != csum) || (be16toh(dat[1]) != (tracknr/2)))
            continue;

        block = memalloc(ti->len);
        memcpy(block, &dat[2], ti->len);
        set_all_sectors_valid(ti);
        return block;
    }

fail:
    return NULL;
}
Example #19
0
void parse_rtas_date(struct rtas_date *rtas_date,
		     struct rtas_date_raw *rawdate)
{
    rtas_date->year = be16toh(rawdate->year);
    rtas_date->month = rawdate->month;
    rtas_date->day = rawdate->day;
}
Example #20
0
/**
 * parse_usr_hdr_scn
 *
 */
int
parse_usr_hdr_scn(struct rtas_event *re)
{
    struct rtas_usr_hdr_scn *usrhdr;
    struct rtas_usr_hdr_scn_raw *rawhdr;

    usrhdr = malloc(sizeof(*usrhdr));
    if (usrhdr == NULL) {
        errno = ENOMEM;
        return -1;
    }

    memset(usrhdr, 0, sizeof(*usrhdr));
    usrhdr->shdr.raw_offset = re->offset;

    rawhdr = (struct rtas_usr_hdr_scn_raw *)(re->buffer + re->offset);
    parse_v6_hdr(&usrhdr->v6hdr, &rawhdr->v6hdr);
    
    usrhdr->subsystem_id = rawhdr->subsystem_id;
    usrhdr->event_data = rawhdr->event_data;
    usrhdr->event_severity = rawhdr->event_severity;
    usrhdr->event_type = rawhdr->event_type;
    usrhdr->action = be16toh(rawhdr->action);

    re->offset += RE_USR_HDR_SCN_SZ;
    add_re_scn(re, usrhdr, RTAS_USR_HDR_SCN);

    return 0;
}
Example #21
0
static int
getfutxent(struct futx *fu)
{

	if (uf == NULL)
		setutxent();
	if (uf == NULL)
		return (-1);

	if (udb == UTXDB_LOG) {
		uint16_t len;

		if (fread(&len, sizeof(len), 1, uf) != 1)
			return (-1);
		len = be16toh(len);
		if (len > sizeof *fu) {
			/* Forward compatibility. */
			if (fread(fu, sizeof(*fu), 1, uf) != 1)
				return (-1);
			fseek(uf, len - sizeof(*fu), SEEK_CUR);
		} else {
			/* Partial record. */
			memset(fu, 0, sizeof(*fu));
			if (fread(fu, len, 1, uf) != 1)
				return (-1);
		}
	} else {
		if (fread(fu, sizeof(*fu), 1, uf) != 1)
			return (-1);
	}
	return (0);
}
Example #22
0
int16_t readFlat16Integer(ContentBuffer & reader) {
    int16_t value;
    reader.prepare(2);
    memcpy(&value, reader.content + reader.cursor, 2);
    value = be16toh(value);
    return value;
}
Example #23
0
int mem_read(uint32_t addr, uint32_t *val, unsigned int bytes,
             struct amiga_state *s)
{
    struct memory *m = find_memory(s, addr, bytes);

    if (m == NULL) {
        log_warn("Read %u bytes non-RAM", bytes);
        return M68KEMUL_UNHANDLEABLE;
        *val = bytes == 1 ? 0xff : bytes == 2 ? 0xffff : 0xffffffff;
        return M68KEMUL_OKAY;
    }

    addr -= m->start;
    switch (bytes) {
    case 1:
        *val = *(uint8_t *)&m->dat[addr];
        break;
    case 2:
        *val = be16toh(*(uint16_t *)&m->dat[addr]);
        break;
    case 4:
        *val = be32toh(*(uint32_t *)&m->dat[addr]);
        break;
    default:
        return M68KEMUL_UNHANDLEABLE;
    }

    return M68KEMUL_OKAY;
}
Example #24
0
const char * umad_sa_mad_status_str(__be16 _status)
{
	uint16_t status = be16toh(_status);
	switch((status & UMAD_STATUS_CLASS_MASK) >> 8) {
		case UMAD_SA_STATUS_SUCCESS:
			return ("Success");
		case UMAD_SA_STATUS_NO_RESOURCES:
			return ("No Resources");
		case UMAD_SA_STATUS_REQ_INVALID:
			return ("Request Invalid");
		case UMAD_SA_STATUS_NO_RECORDS:
			return ("No Records");
		case UMAD_SA_STATUS_TOO_MANY_RECORDS:
			return ("Too Many Records");
		case UMAD_SA_STATUS_INVALID_GID:
			return ("Invalid GID");
		case UMAD_SA_STATUS_INSUF_COMPS:
			return ("Insufficient Components");
		case UMAD_SA_STATUS_REQ_DENIED:
			return ("Request Denied");
		case UMAD_SA_STATUS_PRI_SUGGESTED:
			return ("Priority Suggested");
	}
	return ("Undefined Error");
}
Example #25
0
static bool is_close_frame(enum ws_status_code code)
{
	const uint8_t *ptr = write_buffer;
	uint8_t header;
	::memcpy(&header, ptr, sizeof(header));
	if ((header & WS_HEADER_FIN) != WS_HEADER_FIN) {
		return false;
	}
	if ((header & WS_OPCODE_CLOSE) != WS_OPCODE_CLOSE) {
		return false;
	}
	ptr += sizeof(header);

	uint8_t length;
	::memcpy(&length, ptr, sizeof(length));
	if ((length & WS_HEADER_MASK) == WS_HEADER_MASK) {
		return false;
	}
	if (length != 2) {
		return false;
	}
	ptr += sizeof(length);

	uint16_t status_code;
	::memcpy(&status_code, ptr, sizeof(status_code));
	status_code = be16toh(status_code);
	if (status_code != code) {
		return false;
	}
	return true;
}
// see xbee/device.h for documentation
xbee_wpan_debug
int _xbee_handle_transmit_status( xbee_dev_t *xbee,
	const void FAR *payload, uint16_t length, void FAR *context)
{
	#ifdef XBEE_DEVICE_VERBOSE
		const xbee_frame_transmit_status_t FAR *frame = payload;
	#else
		XBEE_UNUSED_PARAMETER( payload);
	#endif

	// standard XBee frame handler; stub isn't using any parameters yet
	XBEE_UNUSED_PARAMETER( xbee);
	XBEE_UNUSED_PARAMETER( length);
	XBEE_UNUSED_PARAMETER( context);

	// it may be necessary to push information up to user code so they know when
	// a packet has been received or if it didn't make it out
	#ifdef XBEE_DEVICE_VERBOSE
	xSerialxPrintf_P( &xSerial1Port, PSTR( "%s: id 0x%02x to 0x%04x retries=%d del=0x%02x disc=0x%02x\n"),
			__FUNCTION__, frame->frame_id,
			be16toh( frame->network_address_be), frame->retries, frame->delivery,
			frame->discovery);
	#endif

	return 0;
}
Example #27
0
static const char * umad_cm_attr_str(__be16 attr_id)
{
	switch(be16toh(attr_id)) {
		case UMAD_CM_ATTR_REQ:
			return "ConnectRequest";
		case UMAD_CM_ATTR_MRA:
			return "MsgRcptAck";
		case UMAD_CM_ATTR_REJ:
			return "ConnectReject";
		case UMAD_CM_ATTR_REP:
			return "ConnectReply";
		case UMAD_CM_ATTR_RTU:
			return "ReadyToUse";
		case UMAD_CM_ATTR_DREQ:
			return "DisconnectRequest";
		case UMAD_CM_ATTR_DREP:
			return "DisconnectReply";
		case UMAD_CM_ATTR_SIDR_REQ:
			return "ServiceIDResReq";
		case UMAD_CM_ATTR_SIDR_REP:
			return "ServiceIDResReqResp";
		case UMAD_CM_ATTR_LAP:
			return "LoadAlternatePath";
		case UMAD_CM_ATTR_APR:
			return "AlternatePathResponse";
		case UMAD_CM_ATTR_SAP:
			return "SuggestAlternatePath";
		case UMAD_CM_ATTR_SPR:
			return "SuggestPathResponse";
		default:
			return (umad_common_attr_str(attr_id));
	}
	return ("<unknown>");
}
Example #28
0
int sd_netlink_message_read_u16(sd_netlink_message *m, unsigned short type, uint16_t *data) {
        void *attr_data;
        bool net_byteorder;
        int r;

        assert_return(m, -EINVAL);

        r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_U16);
        if (r < 0)
                return r;

        r = netlink_message_read_internal(m, type, &attr_data, &net_byteorder);
        if (r < 0)
                return r;
        else if ((size_t) r < sizeof(uint16_t))
                return -EIO;

        if (data) {
                if (net_byteorder)
                        *data = be16toh(*(uint16_t *) attr_data);
                else
                        *data = *(uint16_t *) attr_data;
        }

        return 0;
}
Example #29
0
    void put_status(uint8_t *data, size_t *decoder_rank)
    {
        auto hdr = header(data);

        *decoder_rank = be16toh(hdr->rank);
        m_coder->read_feedback(hdr->status);
    }
Example #30
0
int utf16_gb(const uint16_t *utf16, char *gb, size_t cnt, int endian)
{
        int wc = 0; /* word count */
        uint16_t utf_16; /* UTF-16 data */
        uint16_t gb2; /* GB 2-byte data */
        size_t max = sizeof(UCS_GB) / 4 - 1; /* high index */

        while(cnt > 0) {
                utf_16 = *utf16++;
                utf_16 = (BIG_ENDIAN == endian) ? be16toh(utf_16) : le16toh(utf_16);

                if((0xD800 <= utf_16) && (utf_16 <= 0xDFFF)) {
                        fprintf(stderr, "Unsupported UTF-16 data(0x%04X)!\n", utf_16);
                        break;
                }

                if(utf_16 == 0x0000) {
                        break;
                }
                else if(utf_16 <= 0x007F) {
                        *gb++ = (char)utf_16;
                        cnt -= 2;
                }
                else {
                        gb2 = half_search(utf_16, DFLT_GB, max, UCS_GB);
                        *gb++ = (char)(gb2 >> 8);
                        *gb++ = (char)(gb2 >> 0);
                        cnt -= 2;
                }
                wc++;
        }
        *gb = '\0';

        return wc;
}