예제 #1
0
파일: write.c 프로젝트: Cyofanni/speect
static void textgrid_header(SDatasource *ds, float end_time, int size, s_erc *error)
{
	const char *str = "File type = \"ooTextFile\"\nObject class = \"TextGrid\"\n\nxmin = 0\nxmax = %f\ntiers? <exists>\nsize = %d\nitem []:\n";
	char *buff = NULL;
	size_t str_size;


	S_CLR_ERR(error);
	s_asprintf(&buff, error, str, end_time, size);
	if (S_CHK_ERR(error, S_CONTERR,
				  "textgrid_header",
				  "Call to \"s_asprintf\" failed"))
		return;

	str_size = s_strsize(buff, error);
	if (S_CHK_ERR(error, S_CONTERR,
				  "textgrid_header",
				  "Call to \"s_strsize\" failed"))
	{
		S_FREE(buff);
		return;
	}

	SDatasourceWrite(ds, buff, sizeof(char), str_size, error);
	if (S_CHK_ERR(error, S_CONTERR,
				  "textgrid_header",
				  "Call to \"SDatasourceWrite\" failed"))
	{
		S_FREE(buff);
		return;
	}

	S_FREE(buff);
}
예제 #2
0
파일: str_list.c 프로젝트: Cyofanni/speect
/**
 * Replace the string list element's string. The replaced string is
 * freed.
 */
S_API void s_str_list_element_replace(s_str_list_element *self, const char *string,
									  s_erc *error)
{
	char *replaced;
	char *new_string;


	S_CLR_ERR(error);
	if ((self == NULL) || (string == NULL))
		return;

	new_string = s_strdup(string, error);
	if (S_CHK_ERR(error, S_CONTERR,
				  "s_str_list_element_replace",
				  "Call to \"s_strdup\" failed"))
		return;

	replaced = s_list_element_replace(self, new_string, error);
	if (S_CHK_ERR(error, S_CONTERR,
				  "s_str_list_element_replace",
				  "Call to \"s_list_element_replace\" failed"))
	{
		S_FREE(new_string);
		return;
	}

	S_FREE(replaced);
}
예제 #3
0
파일: pyext.c 프로젝트: hahnakane/junkcode
static void
py_syck_node_free( SyckNode *self )
{
    PyObject *value = PyObject_GetAttrString( (PyObject *)self, "value" );
    Py_XDECREF( value );
    if ( self->type_id != NULL )
        S_FREE( self->type_id );
    if ( self->anchor != NULL )
        S_FREE( self->anchor );
    S_FREE( self );
    PyMem_DEL( self );
}
예제 #4
0
파일: source.c 프로젝트: Cyofanni/speect
static void Resize(SYour *self, uint32 new_size, s_erc *error)
{
	float *samples;


	S_CLR_ERR(error);

	samples = S_CALLOC(float, new_size);
	if (samples == NULL)
	{
		S_FTL_ERR(error, S_MEMERROR,
				  "Resize",
				  "Failed to allocate memory for 'float' object");
		return;
	}

	if (self->samples != NULL)
	{
		memmove(samples, self->samples,
				sizeof(float) * ((new_size < self->num_samples) ? new_size : self->num_samples));

		S_FREE(self->samples);
	}

	self->samples = samples;
	self->num_samples = new_size;
}
예제 #5
0
파일: syck.c 프로젝트: TheFrozenFire/syck
static int syck_load(lua_State *L)
{
	struct parser_xtra *bonus;
	SyckParser *parser;
	SYMID v;
	int obj;

	if (!luaL_checkstring(L, 1))
		luaL_typerror(L, 1, "string");

	parser = syck_new_parser();
	parser->bonus = S_ALLOC_N(struct parser_xtra, 1);

	bonus = (struct parser_xtra *)parser->bonus;
	bonus->orig = L;
	bonus->L = lua_newthread(L);

	syck_parser_str(parser, (char *)lua_tostring(L, 1), lua_strlen(L, 1), NULL);
	syck_parser_handler(parser, lua_syck_parser_handler);
	syck_parser_error_handler(parser, lua_syck_error_handler);
	v = syck_parse(parser);
	syck_lookup_sym(parser, v, (char **)&obj);

	syck_free_parser(parser);

	lua_pop(L,1); //pop the thread, we don't need it anymore.
	lua_xmove(bonus->L, L, 1);

	if ( parser->bonus != NULL )
		S_FREE( parser->bonus );
	
	return 1;
}
예제 #6
0
/*ARGSUSED*/
static scfga_ret_t
drv_to_dyncomp(di_node_t node, const char *phys, char **dyncompp, int *l_errnop)
{
	char *drv;
	int inst;
	const int dynlen = MAXPATHLEN;
	scfga_ret_t ret;

	*l_errnop = 0;

	if ((*dyncompp = calloc(1, dynlen)) == NULL) {
		*l_errnop = errno;
		return (SCFGA_LIB_ERR);
	}

	drv = di_driver_name(node);
	inst = di_instance(node);
	if (drv != NULL && inst != -1) {
		if (snprintf(*dyncompp, dynlen, "%s%d", drv, inst) < dynlen) {
			return (SCFGA_OK);
		} else {
			ret = SCFGA_LIB_ERR;
		}
	} else {
		ret = SCFGA_APID_NOEXIST;
	}

	S_FREE(*dyncompp);
	return (ret);
}
예제 #7
0
/*
 * Ensure that our base64 encoder can do some basic
 * binary encoding.
 */
void TestBase64Encode( CuTest *tc )
{
    char gif[] = "GIF89a\f\000\f\000\204\000\000\377\377\367\365\365\356\351\351\345fff\000\000\000\347\347\347^^^\363\363\355\216\216\216\340\340\340\237\237\237\223\223\223\247\247\247\236\236\236iiiccc\243\243\243\204\204\204\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371!\376\016Made with GIMP\000,\000\000\000\000\f\000\f\000\000\005,  \216\2010\236\343@\024\350i\020\304\321\212\010\034\317\200M$z\357\3770\205p\270\2601f\r\e\316\001\303\001\036\020' \202\n\001\000;"; 
    char *enc = syck_base64enc( gif, 185 );
    CuAssertStrEquals( tc, enc, "R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLCAgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=\n" );
    S_FREE( enc );
}
예제 #8
0
/* Make logical name for HBA  based on driver and instance */
static int
drv_to_hba_logid(di_node_t node, di_minor_t minor, void *arg)
{
	int inst;
	char *drv, *mn, *log;
	pathm_t *ptp;
	const size_t loglen = MAXPATHLEN;

	ptp = (pathm_t *)arg;

	errno = 0;

	mn = di_minor_name(minor);
	drv = di_driver_name(node);
	inst = di_instance(node);
	log = calloc(1, loglen);

	if (mn != NULL && drv != NULL && inst != -1 && log != NULL) {
		/* Count does not include terminating NULL */
		if (snprintf(log, loglen, "%s%d:%s", drv, inst, mn) < loglen) {
			ptp->ret = SCFGA_OK;
			ptp->log = log;
			return (DI_WALK_TERMINATE);
		}
	}

	S_FREE(log);
	return (DI_WALK_CONTINUE);
}
예제 #9
0
파일: str_list.c 프로젝트: Cyofanni/speect
/**
 * Insert a string after given string list element. Return reference
 * to inserted string element.
 */
S_API const s_str_list_element *s_str_list_insert_after(s_str_list_element *self,
														const char *string, s_erc *error)
{
	const s_str_list_element *el;
	char *new_string;


	S_CLR_ERR(error);
	if ((self == NULL) || (string == NULL))
		return NULL;

	new_string = s_strdup(string, error);
	if (S_CHK_ERR(error, S_CONTERR,
				  "s_str_list_insert_after",
				  "Call to \"s_strdup\" failed"))
		return NULL;

	el = s_list_insert_after(self, new_string, error);
	if (S_CHK_ERR(error, S_CONTERR,
				  "s_str_list_insert_after",
				  "Call to \"s_list_insert_after\" failed"))
	{
		S_FREE(new_string);
		return NULL;
	}

	return el;
}
예제 #10
0
파일: read.c 프로젝트: Cyofanni/speect
/* search for item, if not found create a new one and add it. */
static SItem *get_item(s_hash_table *relation_items, uint32 item_node_number, s_erc *error)
{
	uint32 *item_node_number_copy;
	SItem *item;
	const s_hash_element *he;


	/* search for item, if not found create a new one and add it. */
	he = s_hash_table_find(relation_items, (void*)&item_node_number,
						   sizeof(uint32), error);
	if (S_CHK_ERR(error, S_CONTERR,
				  "get_item",
				  "Call to \"s_hash_table_find\" failed"))
		return NULL;

	if (he == NULL)
	{
		/* create new item */
		item = S_NEW(SItem, error);
		if (S_CHK_ERR(error, S_CONTERR,
					  "get_item",
					  "Failed to create new Item"))
			return NULL;

		item_node_number_copy = S_MALLOC(uint32, 1);
		if (item_node_number_copy == NULL)
		{
			S_FTL_ERR(error, S_MEMERROR,
					  "get_item",
					  "Failed to allocated memory for 'uint32' object");
			S_FORCE_DELETE(item, "get_item", error);
			return NULL;
		}

		*item_node_number_copy = item_node_number;

		/* add to hash table */
		s_hash_table_add(relation_items, (void*)item_node_number_copy,
						 sizeof(uint32), (void*)item, error);
		if (S_CHK_ERR(error, S_CONTERR,
					  "get_item",
					  "Call to \"s_hash_table_add\" failed"))
		{
			S_FREE(item_node_number_copy);
			S_FORCE_DELETE(item, "get_item", error);
			return NULL;
		}
	}
	else
	{
		item = (SItem*)s_hash_element_get_data(he, error);
		if (S_CHK_ERR(error, S_CONTERR,
					  "get_item",
					  "Call to \"s_hash_element_get_data\" failed"))
			return NULL;
	}

	return item;
}
예제 #11
0
파일: primitives.c 프로젝트: Oghma/speect
static void DestroyString(void *obj, s_erc *error)
{
    SString *self = obj;


    S_CLR_ERR(error);
    S_FREE(self->s);
}
예제 #12
0
파일: str_list.c 프로젝트: Cyofanni/speect
/* required for s_list to free an elements */
static void s_str_list_free_fp(void *le, s_erc *error)
{
	char *str = le;


	S_CLR_ERR(error);
	S_FREE(str);
}
예제 #13
0
static void filter_destructor(SHTSEngineMESynthUttProc105 *HTSsynth)
{
	int i;

	for (i = 0; i < HTSsynth->me_num_filters; i++)
	{
		if (HTSsynth->me_filter[i] != NULL)
			S_FREE(HTSsynth->me_filter[i]);
	}

	if (HTSsynth->me_filter != NULL)
		S_FREE(HTSsynth->me_filter);

	if (HTSsynth->xp_sig != NULL)
		S_FREE(HTSsynth->xp_sig);

	if (HTSsynth->xn_sig != NULL)
		S_FREE(HTSsynth->xn_sig);

	if (HTSsynth->hp != NULL)
		S_FREE(HTSsynth->hp);

	if (HTSsynth->hn != NULL)
		S_FREE(HTSsynth->hn);

	if (HTSsynth->pd_filter != NULL)
		S_FREE(HTSsynth->pd_filter);
}
예제 #14
0
static void Destroy(void *obj, s_erc *error)
{
	SUttBreakUttProc *self = obj;


	S_CLR_ERR(error);
	if (self->white_space_chars != NULL)
		S_FREE(self->white_space_chars);

	if (self->single_char_symbols != NULL)
		S_FREE(self->single_char_symbols);

	if (self->pre_punc_symbols != NULL)
		S_FREE(self->pre_punc_symbols);

	if (self->post_punc_symbols != NULL)
		S_FREE(self->post_punc_symbols);
}
예제 #15
0
static void Destroy(void *obj, s_erc *error)
{
    SCostFunction *self = obj;


    S_CLR_ERR(error);
    if (self->feature_name != NULL)
        S_FREE(self->feature_name);
}
예제 #16
0
static scfga_recur_t
def_dyncomp_to_devlink(dyn_t *dyntp)
{
	struct stat sbuf;
	int top;
	size_t prelen, linklen;

	assert(dyntp->dyncomp != NULL);

	dyntp->l_errno = 0;

	if (dyntp->devlink != NULL) {
		goto lib_err;
	}

	prelen = strlen(DEV_DIR SLASH);
	linklen = strlen(dyntp->dyncomp) + 1;

	/*
	 * Check if the dynamic component was derived from a top level entry
	 * in "/dev"
	 */
	if (strncmp(dyntp->dyncomp, DEV_DIR SLASH, prelen) == 0) {
		top = 1;
	} else if (*dyntp->dyncomp != '/' && linklen > 1 &&
	    strchr(dyntp->dyncomp + 1, '/') != NULL) {
		top = 0;
		linklen += prelen;  /* The "/dev/" needs to be prepended */
	} else {
		/* Not a dynamic component we handle */
		return (SCFGA_CONTINUE);
	}

	if ((dyntp->devlink = calloc(1, linklen)) == NULL) {
		dyntp->l_errno = errno;
		goto lib_err;
	}

	*dyntp->devlink = '\0';
	if (!top) {
		(void) strcpy(dyntp->devlink, DEV_DIR SLASH);
	}
	(void) strcat(dyntp->devlink, dyntp->dyncomp);

	if (lstat(dyntp->devlink, &sbuf) != -1 && S_ISLNK(sbuf.st_mode)) {
		dyntp->ret = SCFGA_OK;
		return (SCFGA_TERMINATE);
	}


	S_FREE(dyntp->devlink);
	return (SCFGA_CONTINUE);

lib_err:
	dyntp->ret = SCFGA_LIB_ERR;
	return (SCFGA_TERMINATE);
}
예제 #17
0
파일: py_map.c 프로젝트: Cyofanni/speect
static s_bool MapPyValPresent(const SMap *self, const char *key, s_erc *error)
{
	SMapPy *pMap = (SMapPy*)self;
	PyObject *pKey = NULL;
	int rv;


	S_CLR_ERR(error);
	S_CHECK_PY_MAP(pMap, "MapPyValPresent");

	pKey = s_set_pyobject_str(key, error);
	if (S_CHK_ERR(error, S_CONTERR,
				  "MapPyValPresent",
				  "Call to \"s_set_pyobject_str\" failed"))
		return FALSE;

	rv = PyDict_Contains(S_PY_DICT(pMap), pKey);
	if (rv == -1)
	{
		char *py_error = s_get_python_error_str();

		if (py_error)
		{
			S_CTX_ERR(error, S_FAILURE,
					  "MapPyValPresent",
					  "Call to \"PyDict_Contains\" failed. Reported error: %s",
					  py_error);
			S_FREE(py_error);
		}
		else
		{
			S_CTX_ERR(error, S_FAILURE,
					  "MapPyValPresent",
					  "Call to \"PyDict_Contains\" failed");
		}

		/* decrement reference of pKey */
		Py_XDECREF(pKey);

		return FALSE;
	}

	/* decrement reference of pKey */
	Py_XDECREF(pKey);

	if (rv == 1)
		return TRUE;

	return FALSE;

	/* for S_CHECK_PY_MAP */
failure:
	return FALSE;
}
예제 #18
0
파일: read.c 프로젝트: Cyofanni/speect
static void items_content_table_free_fp(void *key, void *data, s_erc *error)
{
	uint32 *item_content_id;
	s_items_content_container *ic;


	S_CLR_ERR(error);

	item_content_id = key;
	ic = data;

	S_FREE(item_content_id);

	if (ic != NULL)
	{
		if (ic->content != NULL)
			S_FORCE_DELETE(ic->content, "items_content_table_free_fp", error);
		S_FREE(ic);
	}
}
예제 #19
0
scfga_ret_t
make_dyncomp(
	di_node_t node,
	const char *physpath,
	char **dyncompp,
	int *l_errnop)
{
	char *devlink = NULL;
	scfga_ret_t ret;
	di_minor_t minor;
	char *path;
	char pathbuf[MAXPATHLEN];
	int match_minor;

	if (*dyncompp != NULL) {
		return (SCFGA_LIB_ERR);
	}

	/* tag on minor name */
	minor = di_minor_next(node, DI_MINOR_NIL);
	if (minor == DI_MINOR_NIL) {
		match_minor = 0;
		path = (char *)physpath;
	} else {
		match_minor = 1;
		(void) snprintf(pathbuf, MAXPATHLEN, "%s:%s", physpath,
		    di_minor_name(minor));
		path = pathbuf;
	}

	/* Get the corresponding devlink from the physical path */
	ret = physpath_to_devlink(path, &devlink, l_errnop, match_minor);
	if (ret == SCFGA_OK) {
		assert(devlink != NULL);

		/* Create dynamic component. */
		ret = devlink_to_dyncomp(devlink, dyncompp, l_errnop);
		S_FREE(devlink);
		if (ret == SCFGA_OK) {
			assert(*dyncompp != NULL);
			return (SCFGA_OK);
		}

		/*
		 * Failed to get devlink based dynamic component.
		 * Try driver and instance
		 */
	}

	ret = drv_to_dyncomp(node, physpath, dyncompp, l_errnop);
	assert(ret != SCFGA_OK || *dyncompp != NULL);

	return (ret);
}
예제 #20
0
파일: str_list.c 프로젝트: Cyofanni/speect
S_API char *s_str_list_to_string(s_str_list *self, const char *separator,
								 s_erc *error)
{
	char *buf = NULL;
	const s_str_list_element *itr;


	S_CLR_ERR(error);
	if ((self == NULL) || (separator == NULL))
		return NULL;

	itr = s_str_list_first(self, error);
	if (S_CHK_ERR(error, S_CONTERR,
				  "s_str_list_to_string",
				  "Call to \"s_str_list_first\" failed"))
		goto error_return;

	while (itr != NULL)
	{
		const char *element;


		element = s_str_list_element_get(itr, error);
		if (S_CHK_ERR(error, S_CONTERR,
					  "s_str_list_to_string",
					  "Call to \"s_str_list_element_get\" failed"))
			goto error_return;

		if (buf == NULL)
			s_asprintf(&buf, error, "%s", element);
		else
			s_asprintf(&buf, error, "%s%s%s", buf, separator, element);

		if (S_CHK_ERR(error, S_CONTERR,
					  "s_str_list_to_string",
					  "Call to \"s_asprintf\" failed"))
			goto error_return;

		itr = s_str_list_element_next(itr, error);
		if (S_CHK_ERR(error, S_CONTERR,
					  "s_str_list_merge",
					  "Call to \"s_str_list_element_next\" failed"))
			goto error_return;
	}

	return buf;

error_return:
	if (buf != NULL)
		S_FREE(buf);

	return NULL;
}
예제 #21
0
static void DestroyMMapFilesource(void *obj, s_erc *error)
{
	SMMapFilesource *self = S_MMAPFILESOURCE(obj);


	S_CLR_ERR(error);

	s_mmapfile_close(self->handle, self->mem, error);
	S_CHK_ERR(error, S_CONTERR,
			  "Call to \"s_mmapfile_close\" failed for file \"%s\"",
			  self->path? self->path : "NULL");

	if (self->path != NULL)
		S_FREE(self->path);
}
예제 #22
0
파일: hunpos_proc.c 프로젝트: Oghma/speect
static void clear_hunpos_data(SHunposUttProc *hunposProc, s_erc *error)
{
	S_CLR_ERR(error);

	if (hunposProc->model_file != NULL)
		S_FREE(hunposProc->model_file);

	if (hunposProc->hunpos_instance != NULL)
		hunpos_tagger_destroy(hunposProc->hunpos_instance, error);
	hunposProc->hunpos_instance = NULL;
	if (S_CHK_ERR(error, S_CONTERR,
		      "clear_hunpos_data",
		      "Call to \"hunpos_tagger_destroy\" failed"))
		return;
}
예제 #23
0
/* For disks remove partition information, (s or p) */
static scfga_recur_t
disk_devlink_to_dyncomp(dyn_t *dyntp)
{
	char *cp = NULL, *cp1 = NULL;

	assert(dyntp->devlink != NULL);

	dyntp->l_errno = 0;

	if (dyntp->dyncomp != NULL) {
		goto lib_err;
	}

	/* Check if a disk devlink */
	if (strncmp(dyntp->devlink, DEV_DSK SLASH, strlen(DEV_DSK SLASH)) &&
	    strncmp(dyntp->devlink, DEV_RDSK SLASH, strlen(DEV_RDSK SLASH))) {
		return (SCFGA_CONTINUE);
	}

	cp = dyntp->devlink + strlen(DEV_DIR SLASH);

	if ((dyntp->dyncomp = strdup(cp)) == NULL) {
		dyntp->l_errno = errno;
		goto lib_err;
	}

	/* Get the leaf component from dsk/cXtYdZsN */
	cp1 = strrchr(dyntp->dyncomp, '/');

	/* Blank out partition information */
	dyntp->ret = SCFGA_OK;
	if ((cp = strchr(cp1 + 1, 's')) != NULL) {
		*cp = '\0';
	} else if ((cp = strchr(cp1 + 1, 'p')) != NULL) {
		*cp = '\0';
	} else {
		S_FREE(dyntp->dyncomp);
		dyntp->ret = SCFGA_ERR;
	}

	return (SCFGA_TERMINATE);

lib_err:
	dyntp->ret = SCFGA_LIB_ERR;
	return (SCFGA_TERMINATE);
}
예제 #24
0
파일: primitives.c 프로젝트: Oghma/speect
static void DestroyVoid(void *obj, s_erc *error)
{
    SVoid *self = obj;


    S_CLR_ERR(error);

    if (self->free_func != NULL)
        self->free_func(self->ptr, error);

    S_CHK_ERR(error, S_FAILURE,
              "DestroyVoid",
              "Call to SVoid object free function failed");

    if (self->type_name != NULL)
        S_FREE(self->type_name);
}
예제 #25
0
/*
 * Generates the HBA logical ap_id from physical ap_id.
 */
scfga_ret_t
make_hba_logid(const char *hba_phys, char **hba_logpp, int *l_errnop)
{
	walkarg_t u;
	pathm_t pmt = {NULL};
	scfga_ret_t ret;


	if (*hba_logpp != NULL) {
		return (SCFGA_ERR);
	}

	/* A devlink for the HBA may or may not exist */
	if (get_hba_devlink(hba_phys, hba_logpp, l_errnop) == SCFGA_OK) {
		assert(*hba_logpp != NULL);
		return (SCFGA_OK);
	}

	/*
	 * No devlink based logical ap_id.
	 * Try driver name and instance number.
	 */
	u.minor_args.nodetype = DDI_NT_SCSI_ATTACHMENT_POINT;
	u.minor_args.fcn = drv_to_hba_logid;

	pmt.phys = (char *)hba_phys;
	pmt.ret = SCFGA_APID_NOEXIST;

	errno = 0;
	ret = walk_tree(pmt.phys, &pmt, DINFOMINOR | DINFOPROP, &u,
	    SCFGA_WALK_MINOR, &pmt.l_errno);
	if (ret == SCFGA_OK && (ret = pmt.ret) == SCFGA_OK) {
		assert(pmt.log != NULL);
		*hba_logpp = pmt.log;
		return (SCFGA_OK);
	}

	/* failed to create logical ap_id */
	if (pmt.log != NULL) {
		S_FREE(pmt.log);
	}


	*l_errnop = pmt.l_errno;
	return (ret);
}
예제 #26
0
파일: primitives.c 프로젝트: Oghma/speect
S_API void SObjectResetString(SObject *self, const char *s, s_erc *error)
{
    char *tmp;
    s_bool type_is_good;


    S_CLR_ERR(error);

    if (self == NULL)
    {
        S_CTX_ERR(error, S_ARGERROR,
                  "SObjectResetString",
                  "Argument \"self\" is NULL");
        return;
    }

    type_is_good = SObjectIsType(self, "SString", error);
    if (S_CHK_ERR(error, S_CONTERR,
                  "SObjectResetString",
                  "Call to \"SObjectIsType\" failed"))
        return;

    if (type_is_good == FALSE)
    {
        S_CTX_ERR(error, S_FAILURE,
                  "SObjectResetString",
                  "Given object \"self\" is not of type SString");
        return;
    }

    tmp = ((SString*)self)->s;
    S_FREE(tmp); /* checks !NULL */

    if (s != NULL)
    {
        ((SString*)self)->s = s_strdup(s, error);
        S_CHK_ERR(error, S_CONTERR,
                  "SObjectResetString",
                  "Failed to copy new string");
    }
    else
    {
        ((SString*)self)->s = NULL;
    }
}
예제 #27
0
static void InitWindow(SWinFunc **self, sint32 size, sint32 centre, s_erc *error)
{
	uint32 i;


	S_CLR_ERR(error);

	if (size <= 0)
	{
		S_CTX_ERR(error, S_FAILURE,
				  "InitWindow",
				  "Window function given a 0 or negative size (%d)",
				  size);
		goto quit_error;
	}

	/* nothing to do, window is correct */
	if ((uint32)size == (*self)->num_samples)
		return;

	if ((*self)->samples != NULL)
		S_FREE((*self)->samples);

	(*self)->samples = S_MALLOC(float, size);
	if ((*self)->samples == NULL)
	{
		S_FTL_ERR(error, S_MEMERROR,
				  "InitWindow",
				  "Failed to allocate memory for 'float' object");
		goto quit_error;
	}

	(*self)->num_samples = size;

	for (i = 0; i < (*self)->num_samples; i++)
		(*self)->samples[i] = 1.0;


quit_error:
	S_DELETE(*self, "InitWindow", error);
	*self = NULL;

	S_UNUSED(centre);
}
예제 #28
0
파일: py_map.c 프로젝트: Cyofanni/speect
static void MapPyValDelete(SMap *self, const char *key, s_erc *error)
{
	SMapPy *pMap = (SMapPy*)self;
	PyObject *pKey = NULL;


	S_CLR_ERR(error);
	S_CHECK_PY_MAP(pMap, "MapPyValDelete");

	pKey = s_set_pyobject_str(key, error);
	if (S_CHK_ERR(error, S_CONTERR,
				  "MapPyValDelete",
				  "Call to \"s_set_pyobject_str\" failed"))
		return;

	if (PyObject_DelItem(S_PY_DICT(pMap), pKey) == -1)
	{
		char *py_error = s_get_python_error_str();

		if (py_error)
		{
			S_CTX_ERR(error, S_FAILURE,
					  "MapPyValDelete",
					  "Call to \"PyObject_DelItem\" failed. Reported error: %s",
					  py_error);
			S_FREE(py_error);
		}
		else
		{
			S_CTX_ERR(error, S_FAILURE,
					  "MapPyValDelete",
					  "Call to \"PyObject_DelItem\" failed");
		}
	}

	/* decrement reference of pkey */
	Py_XDECREF(pKey);

	/* for S_CHECK_PY_MAP */
failure:
	return;
}
예제 #29
0
파일: read.c 프로젝트: Cyofanni/speect
static void relation_items_table_free_fp(void *key, void *data, s_erc *error)
{
	uint32 *item_node_number;


	S_CLR_ERR(error);

	item_node_number = key;

	/*
	 * data are items. As soon as get_item is called (the item is
	 * either retrieved from the table or created and added to the table)
	 * then the item is also connected to the relation. So we do not need
	 * to delete the item, as when we delete the relation the item will go
	 * as well.
	 */
	if (item_node_number != NULL)
		S_FREE(item_node_number);
	S_UNUSED(data);
}
예제 #30
0
파일: primitives.c 프로젝트: Oghma/speect
static char *PrintVoid(const SObject *self, s_erc *error)
{
    const char *type = "[SVoid] %p";
    char *buf;


    S_CLR_ERR(error);

    s_asprintf(&buf, error, type, ((SVoid*)self)->ptr);
    if (S_CHK_ERR(error, S_CONTERR,
                  "PrintVoid",
                  "Call to \"s_asprintf\" failed"))
    {
        if (buf != NULL)
            S_FREE(buf);
        return NULL;
    }

    return buf;
}