Esempio n. 1
0
void SHash_grow(SHash *self)
{
	unsigned int oldTableSize = self->tableSize;
	SHashRecord* oldRecords = self->records;

	self->records = NULL;
	while (self->records == NULL)
	{
		unsigned int i;

		SHash_tableInit_(self, self->log2tableSize + 1);

		// enumerate old records

		i = 0;
		while (i < oldTableSize*2)
		{
			SHashRecord thisRecord = oldRecords[i];
			i++;

			if (thisRecord.key)
			{
				SHashRecord *record = SHash_cuckoo_(self, &thisRecord);
				if (!record) // collision
				{
					io_free(self->records);
					self->records = NULL;
					break; // grow & rehash
				}
				*record = thisRecord;
			}
		}
	}
	io_free(oldRecords);
}
Esempio n. 2
0
kern_return_t
ipc_object_alloc_name(
	ipc_space_t		space,
	ipc_object_type_t	otype,
	mach_port_type_t	type,
	mach_port_urefs_t	urefs,
	mach_port_name_t	name,
	ipc_object_t		*objectp)
{
	ipc_object_t object;
	ipc_entry_t entry;
	kern_return_t kr;

	assert(otype < IOT_NUMBER);
	assert((type & MACH_PORT_TYPE_ALL_RIGHTS) == type);
	assert(type != MACH_PORT_TYPE_NONE);
	assert(urefs <= MACH_PORT_UREFS_MAX);

	object = io_alloc(otype);
	if (object == IO_NULL)
		return KERN_RESOURCE_SHORTAGE;

	if (otype == IOT_PORT) {
		ipc_port_t port = (ipc_port_t)object;

		bzero((char *)port, sizeof(*port));
#if CONFIG_MACF_MACH
		mac_port_label_init(&port->ip_label);
#endif
	} else if (otype == IOT_PORT_SET) {
		ipc_pset_t pset = (ipc_pset_t)object;

		bzero((char *)pset, sizeof(*pset));
	}

	io_lock_init(object);
	kr = ipc_entry_alloc_name(space, name, &entry);
	if (kr != KERN_SUCCESS) {
		io_free(otype, object);
		return kr;
	}
	/* space is write-locked */

	if (ipc_right_inuse(space, name, entry)) {
		io_free(otype, object);
		return KERN_NAME_EXISTS;
	}

	entry->ie_bits |= type | urefs;
	entry->ie_object = object;

	io_lock(object);
	is_write_unlock(space);

	object->io_references = 1; /* for entry, not caller */
	object->io_bits = io_makebits(TRUE, otype, 0);

	*objectp = object;
	return KERN_SUCCESS;
}
Esempio n. 3
0
File: CHash.c Progetto: doublec/io
int CHash_resizeTo_(CHash *self, size_t newSize)
{
    unsigned char *oldRecords = self->records;
    size_t oldSize = self->size;

    self->isResizing = 1;

    //printf("%p resizeTo %i/%i %i%%\n", (void *)self, self->keyCount, self->size, (int)(100.0*CHash_density(self)));

    do
    {
        self->size = newSize;
        self->records = io_calloc(1, sizeof(CHashRecord) * self->size);
        self->keyCount = 0;
        CHash_updateMask(self);
        if(CHash_insertRecords(self, oldRecords, oldSize) == 0)
        {
            self->isResizing = 0;
        }
        else
        {
            //printf("%p grow collision %i/%i\n", (void *)self, self->keyCount, self->size);
            newSize *= 2;
            io_free(self->records);
        }
    } while(self->isResizing);

    io_free(oldRecords);
    return 0;
}
Esempio n. 4
0
void BStream_free(BStream *self)
{
	if (self->ownsUArray) UArray_free(self->ba);
	UArray_free(self->tmp);
	UArray_free(self->errorBa);
	io_free(self->typeBuf);
	io_free(self);
}
Esempio n. 5
0
void DynLib_free(DynLib *self)
{
	//DynLib_close(self);
	if (self->path) io_free(self->path);
	if (self->initFuncName) io_free(self->initFuncName);
	if (self->freeFuncName) io_free(self->freeFuncName);
	if (self->error) io_free(self->error);
	io_free(self);
}
Esempio n. 6
0
File: IoLexer.c Progetto: Akiyah/io
void IoLexer_free(IoLexer *self)
{
	IoLexer_clear(self);
	io_free(self->s);
	Stack_free(self->posStack);
	Stack_free(self->tokenStack);
	List_free(self->tokenStream);
	List_free(self->charLineIndex);
	if(self->errorDescription) io_free(self->errorDescription);
	io_free(self);
}
Esempio n. 7
0
File: io.c Progetto: JSefara/foma
struct fsm *fsm_read_binary_file(char *filename) {
    char *net_name;
    struct fsm *net;
    struct io_buf_handle *iobh;
    iobh = io_init();
    if (io_gz_file_to_mem(iobh, filename) == 0) {
	io_free(iobh);
        return NULL;
    }
    net = io_net_read(iobh, &net_name);
    io_free(iobh);
    return(net);
}
Esempio n. 8
0
static int print_var_definition(parser_t *p, int comp, const char *varname,
                                const char *buf, size_t bufsz)
{
    codec_t *zip = NULL;
    io_t *ios = NULL;
    int rc, i;
    unsigned char c;

    dbg_err_if(p == NULL);
    dbg_err_if(varname == NULL);
    dbg_err_if(buf == NULL);

    /* create an io_t around the HTML block */
    dbg_err_if(io_mem_create((char*)buf, bufsz, 0, &ios));

#ifdef HAVE_LIBZ
    /* if compression is enabled zip the data block */
    if(comp)
    {
        /* apply a gzip codec */
        dbg_err_if(codec_gzip_create(GZIP_COMPRESS, &zip));
        dbg_err_if(io_codec_add_tail(ios, zip));
        zip = NULL; /* io_free() will free the codec */
    }
#endif

    io_printf(p->out, "static const char %s[] = {\n", varname);

    for(i = 1; (rc = io_getc(ios, (char*)&c)) > 0; ++i)
    {
        io_printf(p->out, "0x%02X, ", c);
        if(i % 12 == 0)
            io_printf(p->out, "\n");
    }
    dbg_err_if(rc < 0); /* input stream error */

    io_printf(p->out, "};\n");

    io_free(ios);

    return 0;
err:
    if(zip)
        codec_free(zip);
    if(ios)
        io_free(ios);
    return ~0;
}
Esempio n. 9
0
void IoCoroutine_free(IoCoroutine *self)
{
	Coro *coro = DATA(self)->cid;
	if (coro) Coro_free(coro);
	Stack_free(DATA(self)->ioStack);
	io_free(DATA(self));
}
Esempio n. 10
0
File: PHash.c Progetto: ADTSH/io
void PHash_copy_(PHash *self, const PHash *other)
{
	io_free(self->records);
	memcpy(self, other, sizeof(PHash));
	self->records = malloc(self->size * sizeof(PHashRecord));
	memcpy(self->records, other->records, self->size * sizeof(PHashRecord));
}
Esempio n. 11
0
File: IoFile.c Progetto: achoy/io
void IoFile_free(IoFile *self)
{
	if (NULL == IoObject_dataPointer(self))
	{
		return;
	}

	IoFile_justClose(self);

	if (DATA(self)->info)
	{
		io_free(DATA(self)->info);
	}

	io_free(IoObject_dataPointer(self));
}
Esempio n. 12
0
IoDynLib *IoDynLib_callPluginInitFunc(IoDynLib *self, IoObject *locals, IoMessage *m)
{
	/*doc DynLib callPluginInit(functionName)
	Call's the dll function of the specified name. 
	Returns the result as a Number or raises an exception on error.
	*/
	
	intptr_t rc = 0;
	intptr_t *params = NULL;
	void *f = DynLib_pointerForSymbolName_(DATA(self),
									CSTRING(IoMessage_locals_symbolArgAt_(m, locals, 0)));
	if (f == NULL)
	{
		IoState_error_(IOSTATE, m, "Error resolving call '%s'.",
					CSTRING(IoMessage_locals_symbolArgAt_(m, locals, 0)));
		return IONIL(self);
	}

	if (IoMessage_argCount(m) < 1)
	{
		IoState_error_(IOSTATE, m, "Error, you must give an init function name to check for.");
		return IONIL(self);
	}

	params = io_calloc(1, sizeof(intptr_t) * 2);

	params[0] = (intptr_t)IOSTATE;
	params[1] = (intptr_t)IOSTATE->lobby;
	rc = ((intptr_t (*)(intptr_t, intptr_t))f)(params[0], params[1]);
	io_free(params);

	return IONUMBER(rc);
}
Esempio n. 13
0
int io_mem_create(char *buf, size_t size, int flags, io_t **pio)
{
    io_mem_t *im = NULL;

    dbg_err_if (buf == NULL);
    dbg_err_if (pio == NULL);
    
    dbg_err_if(io_create(io_mem_t, (io_t**)&im));

    im->io.type = IO_TYPE_MEM;

    im->buf = buf;
    im->size = size;
    im->flags = flags;
    im->off = 0;
    im->io.read = (io_read_op) io_mem_read;
    im->io.write = (io_write_op) io_mem_write;
    im->io.seek = (io_seek_op) io_mem_seek;
    im->io.tell = (io_tell_op) io_mem_tell;
    im->io.close = (io_close_op) io_mem_close; 
    im->io.free = (io_free_op) io_mem_free; 

    *pio = (io_t*)im;

    return 0;
err:
    if(im)
        io_free((io_t *)im);
    return ~0;
}
Esempio n. 14
0
BOOL io_init(io_struct *ps, uint32 size, BOOL io)
{
	io_free(ps);

	ps->io = io;
	ps->bigendian_data = False;
	ps->is_dynamic = False;
	ps->data_offset = 0;
	ps->buffer_size = 0;
	ps->data_p = NULL;
	ps->format_string = NULL;
	ps->format_offset = 0;
	ps->entry_count = NULL;
	ps->receive_buf = NULL;
	ps->receive_len = NULL;
	ps->ctx = NULL;

	if (size != 0) {
		ps->buffer_size = size;
		if((ps->data_p = (char *)talloc(get_ctx(ps), (size_t)size)) == NULL) {
			DEBUG(0,("io_init: malloc fail for %u bytes.\n", (unsigned int)size));
			return False;
		}
		ps->is_dynamic = True; /* We own this memory. */
	}

	return True;
}
Esempio n. 15
0
static void setenv(const char *varName, const char* value, int force)
{
	const char *safeValue;
	char *buf;

	if (!varName)
	{
		return;
	}

	if (!value)
	{
		safeValue = "";
	}
	else
	{
		safeValue = value;
	}

	// buffer for var and value plus '=' and the \0
	buf = (char*)io_calloc(1, strlen(varName) + strlen(safeValue) + 2);

	if (!buf)
	{
		return;
	}

	strcpy(buf, varName);
	strcat(buf, "=");
	strcat(buf, safeValue);

	_putenv(buf);
	io_free(buf);
}
Esempio n. 16
0
gboolean
io_close_and_free (IOStream *io, GError **err)
{
    gboolean retval = FALSE;

    if (io == NULL)
	return FALSE;

    if (io->fd >= 0) {
	if (io->mode == IO_MODE_WRITE) {
	    /* Any pending writes to flush? */

	    if (io->s.write.curpos != 0) {
		if (_io_fd_write (io->fd, io->s.write.buf, io->s.write.curpos, err))
		    retval = TRUE;
	    }
	}

	if (close (io->fd)) {
	    IO_ERRNO_ERR (err, errno, "Failed to close stream");
	    retval = TRUE;
	}
    }

    io_free (io);
    return retval;
}
Esempio n. 17
0
void IoCFFIArray_free(IoCFFIArray *self)
{
	IoCFFIArrayData *data;

	data = DATA(self);

	if ( data->needToFreeBuffer ) {
		io_free(data->buffer);
		data->buffer = NULL;
	}
	
	if ( DATA(self)->needToFreeFFIType ) {
		io_free(DATA(self)->ffiType.elements);
	}

	io_free(data);
}
Esempio n. 18
0
File: IoNumber.c Progetto: Akiyah/io
IO_METHOD(IoNumber, justAsString)
{
	IoSymbol *string;
	char *s = IoNumber_asAllocedCString(self);
	string = IoSeq_newWithCString_((IoState *)IOSTATE, s);
	io_free(s);
	return string;
}
Esempio n. 19
0
void Image_free(Image *self)
{
	if (self->ownsUArray)
	{
		UArray_free(self->byteArray);
	}

	if (self->error)
	{
		io_free(self->error);
	}

	io_free(self->fileType);
	io_free(self->path);

	io_free(self);
}
Esempio n. 20
0
File: IoCoroutine.c Progetto: jdp/io
void IoCoroutine_free(IoCoroutine *self)
{
	//printf("IoCoroutine_free %p\n", (void *)self);
	Coro *coro = DATA(self)->cid;
	if (coro) Coro_free(coro);
	Stack_free(DATA(self)->ioStack);
	io_free(DATA(self));
}
Esempio n. 21
0
File: io.c Progetto: JSefara/foma
int load_defined(struct defined_networks *def, char *filename) {
    struct fsm *net;
    char *net_name;
    struct io_buf_handle *iobh;

    iobh = io_init();
    printf("Loading definitions from %s.\n",filename);
    if (io_gz_file_to_mem(iobh, filename) == 0) {
        fprintf(stderr, "File error.\n");
	io_free(iobh);
        return 0;
    }
    while ((net = io_net_read(iobh, &net_name)) != NULL) {
        add_defined(def, net, net_name);
    }
    io_free(iobh);
    return(1);
}
Esempio n. 22
0
static void closedir(DIR * pDir)
{
    if (pDir->hFind != INVALID_HANDLE_VALUE)
    {
        FindClose(pDir->hFind);
    }

    io_free(pDir);
}
Esempio n. 23
0
/* Close connection. */
void
fetch_pop3_disconnect(struct account *a)
{
	struct fetch_pop3_data	*data = a->data;

	if (data->io != NULL) {
		io_close(data->io);
		io_free(data->io);
		data->io = NULL;
	}
}
Esempio n. 24
0
File: IoNumber.c Progetto: Akiyah/io
IO_METHOD(IoNumber, printNumber)
{
	/*doc Number print
	Prints the number.
	*/
	
	char *s = IoNumber_asAllocedCString(self);
	IoState_print_((IoState *)IOSTATE, s);
	io_free(s);
	return self;
}
Esempio n. 25
0
File: PHash.c Progetto: ADTSH/io
void PHash_resizeTo_(PHash *self, size_t newSize)
{
	unsigned char *oldRecords = self->records;
	size_t oldSize = self->size;
	self->size = newSize;
	self->records = io_calloc(1, sizeof(PHashRecord) * self->size);
	self->keyCount = 0;
	PHash_updateMask(self);
	PHash_insertRecords(self, oldRecords, oldSize);
	io_free(oldRecords);
}
Esempio n. 26
0
void IoMessage_free(IoMessage *self)
{
	//IoMessageData *d = (IoMessageData *)IoObject_dataPointer(self);
	
	if (DATA(self)->args)
	{
		List_free(DATA(self)->args);
	}

	io_free(IoObject_dataPointer(self));
}
Esempio n. 27
0
void DynLib_setError_(DynLib *self,const char *error)
{
	if (error)
	{
		self->error = strcpy((char *)io_realloc(self->error, strlen(error)+1), error);
	}
	else
	{
		if (self->error) io_free(self->error);
		self->error = NULL;
	}
}
Esempio n. 28
0
File: Coro.c Progetto: doublec/io
void Coro_free(Coro *self)
{
#ifdef USE_FIBERS
	// If this coro has a fiber, delete it.
	// Don't delete the main fiber. We don't want to commit suicide.
	if (self->fiber && !self->isMain)
	{
		DeleteFiber(self->fiber);
	}
#else
	STACK_DEREGISTER(self);
#endif
	if (self->stack)
	{
		io_free(self->stack);
	}

	//printf("Coro_%p io_free\n", (void *)self);

	io_free(self);
}
Esempio n. 29
0
kern_return_t
ipc_object_alloc(
	ipc_space_t		space,
	ipc_object_type_t	otype,
	mach_port_type_t	type,
	mach_port_urefs_t	urefs,
	mach_port_name_t	*namep,
	ipc_object_t		*objectp)
{
	ipc_object_t object;
	ipc_entry_t entry;
	kern_return_t kr;

	assert(otype < IOT_NUMBER);
	assert((type & MACH_PORT_TYPE_ALL_RIGHTS) == type);
	assert(type != MACH_PORT_TYPE_NONE);
	assert(urefs <= MACH_PORT_UREFS_MAX);

	object = io_alloc(otype);
	if (object == IO_NULL)
		return KERN_RESOURCE_SHORTAGE;

	if (otype == IOT_PORT) {
		ipc_port_t port = (ipc_port_t)object;

		bzero((char *)port, sizeof(*port));
	} else if (otype == IOT_PORT_SET) {
		ipc_pset_t pset = (ipc_pset_t)object;

		bzero((char *)pset, sizeof(*pset));
	}

	io_lock_init(object);
	*namep = CAST_MACH_PORT_TO_NAME(object);
	kr = ipc_entry_alloc(space, namep, &entry);
	if (kr != KERN_SUCCESS) {
		io_free(otype, object);
		return kr;
	}
	/* space is write-locked */

	entry->ie_bits |= type | urefs;
	entry->ie_object = object;
	ipc_entry_modified(space, *namep, entry);

	io_lock(object);

	object->io_references = 1; /* for entry, not caller */
	object->io_bits = io_makebits(TRUE, otype, 0);

	*objectp = object;
	return KERN_SUCCESS;
}
Esempio n. 30
0
void IoTag_free(IoTag *self)
{
	//printf("io_free tag %p\n", (void *)self);
	//printf("%s\n", self->name ? self->name : "NULL");
	if (--self->referenceCount > 0) {
		return;
	}

	if (self->tagCleanupFunc)
	{
		(self->tagCleanupFunc)(self);
	}

	if (self->name)
	{
		io_free(self->name);
		self->name = NULL;
	}

	//Stack_free(self->recyclableInstances);
	io_free(self);
}