Пример #1
0
int af_get_segq(AFFILE *af,const char *name,int64_t *aff_quad)
{
    unsigned char buf[8];
    size_t  bufsize = sizeof(buf);

    if(af_get_seg(af,name,0,(unsigned char *)&buf,&bufsize)){
	return -1;			// couldn't get it...
    }
    if(bufsize!=sizeof(struct aff_quad)){		// make sure size is good.
	return -1;
    }
	
    *aff_quad = af_decode_q(buf);
    return 0;
}
Пример #2
0
int		AffNode::addSegmentAttribute(Attributes* vmap, AFFILE* af, const char* segname)
{
#ifdef NEW_AFF_LIB
    uint32_t arg;
#else
    unsigned long arg;
#endif
    unsigned char *data = 0;
    if (segname[0] == 0)
        return (0);

    size_t data_len = 0;

    if(af_get_seg(af, segname, &arg, 0, &data_len))
    {
        return (0);
    }
    data = (unsigned char *)malloc(data_len);
    if(af_get_seg(af, segname, 0, data, &data_len))
    {
        free(data);
        return (0);
    }

    if(strcmp(segname, AF_ACQUISITION_SECONDS) == 0)
    {
        int hours = arg / 3600;
        int minutes = (arg / 60) % 60;
        int seconds = arg % 60;

        vtime*	time = new vtime;
        time->hour = hours;
        time->minute = minutes;
        time->second = seconds;
        (*vmap)[std::string(segname)] = new Variant(time);
        free(data);
        return (1);
    }

    if(((arg == AF_SEG_QUADWORD) && (data_len==8)) || af_display_as_quad(segname))
    {
        switch(data_len)
        {
        case 8:
            (*vmap)[segname] = new Variant(af_decode_q(data));
            break;
        case 0:
            (*vmap)[segname] = new Variant(0);
            break;
        default:
            (*vmap)[segname] = new Variant(std::string("Cannot decode segment"));
        }
        free(data);
        return (1);
    }
    if (data_len == 0 && arg != 0)
    {
        (*vmap)[std::string(segname)] = new Variant((uint64_t)arg);
        free(data);
        return (1);
    }

    if(af_display_as_hex(segname) || (data_len == 16 && strstr(segname, "md5")) || (data_len == 20 && strstr(segname, "sha1")))
    {
        char buf[80];

        af_hexbuf(buf, sizeof(buf), data, data_len, AF_HEXBUF_NO_SPACES);
        (*vmap)[std::string(segname)] = new Variant(std::string(buf));
        free(data);
        return (1);
    }
    else
    {
        (*vmap)[segname] = new Variant(std::string((char *)data));
        free(data);
        return (1);
    }
}