void *datasource_cv_coin_create( char *args ) {
    datasource_cv_coin_storage_t *s = fmem_alloc( sizeof( datasource_cv_coin_storage_t ) );

    s->img = cvLoadImage( args, CV_LOAD_IMAGE_COLOR );

    if( !s->img ) {
        return NULL;
    }
    s->cvc = cv_coin_create( s->img );

    return (void*)s;
}
Example #2
0
void test1()
{
    fix_mpool_t *pool = fmem_create(TIMES, sizeof(test));
    int i;
    long long int cost = 0;
    struct timeval tv;
    starttime(&tv);
    //pool_t *pool = mem_init(TIMES, sizeof(test));

    for(i = 0; i < TIMES; i++)
    {
        p[i] = (test *)fmem_alloc(pool);
        //memset(p[i], 0, sizeof(test));
    }
    for(i = 0; i < TIMES; i++)
    {
        fmem_free(pool, p[i]);
    }
    // mem_info(pool);
    cost = stoptime(tv);
    fmem_destroy(pool);
    printf("%lld\n", cost/1000);

}
static size_t
read_alias_file(const unsigned char *fname, int fname_len)
{
	FILE *fp;
	unsigned char *full_fname;
	size_t added;
	static const unsigned char aliasfile[] = "/locale.alias";

	full_fname = (unsigned char *) fmem_alloc(fname_len + sizeof(aliasfile));
	mempcpy(mempcpy(full_fname, fname, fname_len),
		aliasfile, sizeof(aliasfile));

	fp = fopen(full_fname, "rb");
	fmem_free(full_fname);
	if (fp == NULL)
		return 0;

	added = 0;
	while (!feof(fp)) {
		/* It is a reasonable approach to use a fix buffer here because
		   a) we are only interested in the first two fields
		   b) these fields must be usable as file names and so must not
		   be that long
		 */
		unsigned char buf[BUFSIZ];
		unsigned char *alias;
		unsigned char *value;
		unsigned char *cp;

		if (fgets(buf, sizeof(buf), fp) == NULL)
			/* EOF reached.  */
			break;

		/* Possibly not the whole line fits into the buffer.  Ignore
		   the rest of the line.  */
		if (strchr(buf, '\n') == NULL) {
			unsigned char altbuf[BUFSIZ];

			do
				if (fgets(altbuf, sizeof(altbuf), fp) == NULL)
					/* Make sure the inner loop will be left.  The outer loop
					   will exit at the `feof' test.  */
					break;
			while (strchr(altbuf, '\n') == NULL);
		}

		cp = buf;
		/* Ignore leading white space.  */
		skip_space(cp);

		/* A leading '#' signals a comment line.  */
		if (cp[0] != '\0' && cp[0] != '#') {
			alias = cp++;
			skip_nonspace(cp);
			/* Terminate alias name.  */
			if (cp[0] != '\0')
				*cp++ = '\0';

			/* Now look for the beginning of the value.  */
			skip_space(cp);

			if (cp[0] != '\0') {
				size_t alias_len;
				size_t value_len;

				value = cp++;
				skip_nonspace(cp);
				/* Terminate value.  */
				if (cp[0] == '\n') {
					/* This has to be done to make the following test
					   for the end of line possible.  We are looking for
					   the terminating '\n' which do not overwrite here.  */
					*cp++ = '\0';
					*cp = '\n';
				} else if (cp[0] != '\0')
					*cp++ = '\0';

				if (nmap >= maxmap)
					if (extend_alias_table())
						return added;

				alias_len = strlen(alias) + 1;
				value_len = strlen(value) + 1;

				if (string_space_act + alias_len + value_len >
				    string_space_max) {
					/* Increase size of memory pool.  */
					size_t new_size = (string_space_max
							   + (alias_len +
							      value_len >
							      1024 ? alias_len +
							      value_len :
							      1024));
					unsigned char *new_pool =
						(unsigned char *) realloc(string_space,
								 new_size);
					if (new_pool == NULL)
						return added;

					if (string_space != new_pool) {
						size_t i;

						for (i = 0; i < nmap; i++) {
							map[i].alias +=
								new_pool -
								string_space;
							map[i].value +=
								new_pool -
								string_space;
						}
					}

					string_space = new_pool;
					string_space_max = new_size;
				}

				map[nmap].alias =
					memcpy(&string_space[string_space_act],
					       alias, alias_len);
				string_space_act += alias_len;

				map[nmap].value =
					memcpy(&string_space[string_space_act],
					       value, value_len);
				string_space_act += value_len;

				++nmap;
				++added;
			}
		}
	}

	/* Should we test for ferror()?  I think we have to silently ignore
	   errors.  --drepper  */
	fclose(fp);

	if (added > 0)
		qsort(map, nmap, sizeof(struct alias_map),
		      (int (*)(const void *, const void *))
		      alias_compare);

	return added;
}