Esempio n. 1
0
File: data.c Progetto: banken/scarab
ScarabDatum *scarab_new_float( double num) 
{
	ScarabDatum *d=scarab_new_atomic();
	d->type=SCARAB_FLOAT;
	d->data.floatp=num;
	return d;
}
Esempio n. 2
0
File: data.c Progetto: banken/scarab
ScarabDatum *scarab_new_integer(long long num) 
{
	ScarabDatum *d=scarab_new_atomic();
	d->type=SCARAB_INTEGER;
	d->data.integer=num;
	return d;
}
Esempio n. 3
0
File: data.c Progetto: banken/scarab
ScarabDatum *scarab_new_opaque(const char* opaque, int size) 
{
	ScarabDatum *d=scarab_new_atomic();
	d->type=SCARAB_OPAQUE;
	d->data.opaque.size=size;
	
	d->data.opaque.data = (unsigned char *)calloc(size, sizeof(unsigned char));
	memcpy(d->data.opaque.data, opaque, size); 
	return d;
}
Esempio n. 4
0
File: data.c Progetto: mworks/mworks
ScarabDatum *scarab_new_opaque(const char* opaque, int size) 
{
	ScarabDatum *d = scarab_new_atomic();
	d->type = SCARAB_OPAQUE;
    
    if (size < 0) {
        size = 0;
    }
    
	d->data.opaque.size = size;

    // Allocate space for size+1 bytes, and set the extra byte to NUL to protect against
    // code that blindly assumes the data is NUL-terminated
	d->data.opaque.data = (unsigned char *)scarab_mem_malloc((size + 1) * sizeof(unsigned char));
    d->data.opaque.data[size] = '\0';
    
    if (opaque != NULL) {
        memcpy(d->data.opaque.data, opaque, size);
    }
    
	return d;
}
Esempio n. 5
0
static ScarabDatum *
ldo_read(ScarabSession * session)
{
	LDO_Session    *s;
	ScarabDatum    *attrib;
	ScarabDatum    *value;
	long long             refid;
	long long             sign;
	long long             esign;
	long long             len;
	unsigned char   lastByte;

	s = (LDO_Session *) session->encoder;
	attrib = NULL;
	refid = -1;
	sign = 1;
	esign = 1;

    // PAJ really wish the guys who wrote this left some comments in here
    // this read calls the stream head read which calls stream_read in
    // stream_tcpip.c.  This is the place where all the socket comm stuff 
    // happens.  This is where recv is called....and will block
	if (scarab_session_read(session, &lastByte, 1) != 1)
		return NULL;

	if (DEFINE_REFERENCE == lastByte)
	{
		refid = ldo_readber(session);
		if (scarab_session_read(session, &lastByte, 1) != 1)
			return NULL;
	}

	if (ATTRIBUTES == lastByte)
	{
		if (scarab_session_read(session, &lastByte, 1) != 1)
			return NULL;

		if (REFERENCE == lastByte)
		{
			refid = ldo_readber(session);
		} else if (DEFINE_REFERENCE == lastByte)
		{
			refid = ldo_readber(session);
			ldo_putref(session, refid, ldo_read_dict(session));
		}
		attrib = ldo_getref(session, refid);
		if (scarab_session_read(session, &lastByte, 1) != 1)
			return NULL;
	}

	switch (lastByte)
	{
		/*
		 * integer
		 */
	case INTEGER_N:
		sign = -1;
	case INTEGER_P:
		value = scarab_new_integer(ldo_readber(session) * sign);
		break;

		/*
		 * float
		 */
	case FLOAT_NN:
		esign = -1;
	case FLOAT_NP:
		sign = -1;
		value = scarab_new_float(ldo_readfloat(session, sign, esign));
		break;
	case FLOAT_PN:
		esign = -1;
	case FLOAT_PP:
		value = scarab_new_float(ldo_readfloat(session, sign, esign));
		break;
	case FLOAT_INF:
		value = scarab_new_atomic();
		value->type = SCARAB_FLOAT_INF;
		break;
	case FLOAT_OPAQUE:
		//value = scarab_new_atomic();
		//value->type = SCARAB_FLOAT_NAN;
//        fprintf(stderr, "This is f***ing ridiculous!!!!!\n");
//        fprintf(stderr, "Reading a god damn float nan\n");
		len = ldo_readber(session);
		value = scarab_new_atomic();
		value->type = SCARAB_FLOAT_OPAQUE; //HAXXOR WARNING
		value->data.opaque.size = len;
		value->data.opaque.data = (unsigned char*)scarab_mem_malloc(
													sizeof(char) * len);
        
		scarab_session_read(session, value->data.opaque.data, len);
		break;

		/*
		 * opaque thingies
		 */
	case OPAQUE:
		len = ldo_readber(session);
		value = scarab_new_atomic();
		value->type = SCARAB_OPAQUE;
		value->data.opaque.size = len;
		value->data.opaque.data = (unsigned char*)scarab_mem_malloc(
													sizeof(char) * len);

		scarab_session_read(session, value->data.opaque.data, len);
		break;

		/*
		 * compound
		 */
	case DICTIONARY:
		value = ldo_read_dict(session);
		break;
	case LIST:
		value = ldo_read_list(session);
		break;
	case REFERENCE:
		value = ldo_getref(session, ldo_readber(session));
		break;
	case 0x0:  // DDC August 10, 2005, changed from NULL
		value = scarab_new_atomic();
		value->type = SCARAB_NULL;
		break;
	default:
		return NULL;
	}

	/*
	 * save the reference if there is one
	 */
	if (refid != -1)
		ldo_putref(session, refid, value);

	/*
	 * if attributes were used, add them to the value
	 */
	if (attrib != NULL)
		value->attributes = attrib;

	return value;
}
Esempio n. 6
0
File: data.c Progetto: mworks/mworks
ScarabDatum  *
scarab_new_molecular() 
{
	return scarab_new_atomic();
}