예제 #1
0
파일: free.c 프로젝트: kashifsoofi/bygfoot
/** Free the array with the name lists. */
void
free_names(gboolean reset)
{
#ifdef DEBUG
    printf("free_names\n");
#endif

    gint i;

    if(name_lists == NULL)
    {
        if(reset)
            name_lists = g_array_new(FALSE, FALSE, sizeof(NameList));

        return;
    }

    for(i=0; i<name_lists->len; i++)
        free_name_list(&g_array_index(name_lists, NameList, i), FALSE);

    free_g_array(&name_lists);

    if(reset)
        name_lists = g_array_new(FALSE, FALSE, sizeof(NameList));
}
예제 #2
0
static bool print_tree(struct user_auth_info *user_info)
{
        struct smb_name_list *wg, *sv, *sh;

        /* List workgroups */

        if (!get_workgroups(user_info))
                return False;

        for (wg = workgroups; wg; wg = wg->next) {

                printf("%s\n", wg->name);

                /* List servers */

                free_name_list(servers);
                servers = NULL;

                if (level == LEV_WORKGROUP || 
                    !get_servers(wg->name, user_info))
                        continue;

                for (sv = servers; sv; sv = sv->next) {

                        printf("\t\\\\%-15s\t\t%s\n", 
			       sv->name, sv->comment);

                        /* List shares */

                        free_name_list(shares);
                        shares = NULL;

                        if (level == LEV_SERVER ||
                            !get_shares(sv->name, user_info))
                                continue;

                        for (sh = shares; sh; sh = sh->next) {
                                printf("\t\t\\\\%s\\%-15s\t%s\n", 
				       sv->name, sh->name, sh->comment);
                        }
                }
        }

        return True;
}
예제 #3
0
static void free_rx(RESTORE_CTX *rx)
{
   free_bsr(rx->bsr);
   rx->bsr = NULL;
   free_and_null_pool_memory(rx->JobIds);
   free_and_null_pool_memory(rx->BaseJobIds);
   free_and_null_pool_memory(rx->fname);
   free_and_null_pool_memory(rx->path);
   free_and_null_pool_memory(rx->query);
   free_name_list(&rx->name_list);
}
예제 #4
0
/** Fill the name list with names from the
    given names file.
    @param sid The sid of the names file we read.
    @param namelist The name list we fill. */
void
xml_name_read(const gchar *sid, NameList *namelist)
{
#ifdef DEBUG
    printf("xml_name_read\n");
#endif

    gchar *file_name = NULL;
    GMarkupParser parser = {xml_name_read_start_element,
			    xml_name_read_end_element,
			    xml_name_read_text, NULL, NULL};
    GMarkupParseContext *context;
    gchar *file_contents;
    gsize length;
    GError *error = NULL;
    gchar buf[SMALL];

    sprintf(buf, "player_names_%s.xml", sid);
    file_name = file_find_support_file(buf, TRUE);

    context = 
	g_markup_parse_context_new(&parser, 0, NULL, NULL);

    if(!g_file_get_contents(file_name, &file_contents, &length, &error))
    {
	debug_print_message("xml_name_read: error reading file %s\n", file_name);
	misc_print_error(&error, TRUE);
	return;
    }

    free_name_list(namelist, TRUE);
    misc_string_assign(&namelist->sid, sid);

    nlist = namelist;

    if(g_markup_parse_context_parse(context, file_contents, length, &error))
    {
	g_markup_parse_context_end_parse(context, NULL);	
	g_markup_parse_context_free(context);
	g_free(file_contents);
    }
    else
    {
	g_critical("xml_name_read: error parsing file %s\n", buf);
	misc_print_error(&error, TRUE);
    }

    g_free(file_name);
}
예제 #5
0
static void free_rx(RESTORE_CTX *rx)
{
   free_bsr(rx->bsr);
   rx->bsr = NULL;

   if (rx->ClientName) {
      free(rx->ClientName);
      rx->ClientName = NULL;
   }

   if (rx->RestoreClientName) {
      free(rx->RestoreClientName);
      rx->RestoreClientName = NULL;
   }

   free_and_null_pool_memory(rx->JobIds);
   free_and_null_pool_memory(rx->BaseJobIds);
   free_and_null_pool_memory(rx->fname);
   free_and_null_pool_memory(rx->path);
   free_and_null_pool_memory(rx->query);
   free_name_list(&rx->name_list);
}
예제 #6
0
void *get_serverlists(void *value)
{
	struct name_list *wg, *sv;
	//struct smbEventProxyCmd *pcmd = (struct smbEventProxyCmd *)cmd;
	char buf[MAX_NAME_LEN] = {0};
	int get_serverlists_by_nmblookup_state = 0; /*0:fail; 1:ok*/
	int id = (int *)value;
	struct smbEventProxyCmd *pevent = NULL;
	char samba_workgroup[16] = {0};
#ifdef CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS
	securesoho_samba_workgroup_get(samba_workgroup);
#else //CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS
	get_serverlists_by_nmblookup_state = get_serverlists_by_nmblookup(id);
#endif //CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS

	/* List workgroups */
	if(workgroups) {
		free_name_list(workgroups);
		workgroups = NULL;
	}
	if (!get_workgroups(&cmdline_auth_info)) {
		is_getserver_done = 1;
#ifdef CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS
		SMBTREE_send_event_to_OSD(SMB_CMD_REFRESH_SERVER_RESPONSE, SMB_REFRESHED_FAILED, id, NULL);
		printf("%s[%d], It's finish to search samba server(s).\n", __FILE__, __LINE__);
		return NULL;
#else //CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS
		if(get_serverlists_by_nmblookup_state) {
			SMBTREE_send_event_to_OSD(SMB_CMD_REFRESH_SERVER_RESPONSE, SMB_REFRESHED_OK, id, NULL);
			printf("%s[%d], It's finish to search samba server(s). id:[%d]\n", __FILE__, __LINE__, id);
			return NULL;
		} else {
			SMBTREE_send_event_to_OSD(SMB_CMD_REFRESH_SERVER_RESPONSE, SMB_REFRESHED_FAILED, id, NULL);
			printf("%s[%d], It's finish to search samba server(s).\n", __FILE__, __LINE__);
			return NULL;
		}	
#endif //CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS
	}

	for (wg = workgroups; wg; wg = wg->next) {
#ifdef ENABLE_SMBTREE_DEBUG_MODE
		printf("%s[%d], WorkGroup : [%s]\n", __FILE__, __LINE__, wg->name);
#endif //ENABLE_SMBTREE_DEBUG_MODE
		/* List servers */

#ifdef CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS
		printf("samba_workgroup:[%s], wg->name:[%s]\n", samba_workgroup, wg->name);
		if(strcasecmp(samba_workgroup, wg->name) != 0)
			continue;
#endif //CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS
		if(servers) {
			free_name_list(servers);
			servers = NULL;
		}

		if (level == LEV_WORKGROUP || !get_servers(wg->name, &cmdline_auth_info))
			continue;

		for (sv = servers; sv; sv = sv->next) {

			char* ip = NULL;
			nmblookup_ip(sv->name, &ip);
			if(ip != NULL) {
				snprintf(buf, sizeof(buf), "%s\\%s\\0", sv->name,ip); 
#ifdef ENABLE_SMBTREE_DEBUG_MODE
				printf("\t\\\\%-15s\t\t%s buf:%s\n", sv->name, sv->comment, buf);
#endif //ENABLE_SMBTREE_DEBUG_MODE
#ifdef ENABLE_PTHREAD
				pevent = malloc(sizeof(struct smbEventProxyCmd));
				pevent->cmd = SMB_CMD_REFRESH_SERVER_RESPONSE;
				pevent->status = SMB_REFRESHING;
				pevent->id = id;
				pevent->datalen = strlen(buf) + 1;
				strcpy((char *)pevent->data, buf);
				XLinkedList_Lock(serverlist);
					XLinkedList_AddTail(serverlist, (void *)pevent);
				XLinkedList_UnLock(serverlist);
#else
				SMBTREE_send_event_to_OSD(SMB_CMD_REFRESH_SERVER_RESPONSE, SMB_REFRESHING, id, buf);
#endif
				free(ip);
				ip = NULL;
			}
		}
	}

	printf("%s[%d], It's finish to search samba server(s). id:[%d]\n", __FILE__, __LINE__, id);
	SMBTREE_send_event_to_OSD(SMB_CMD_REFRESH_SERVER_RESPONSE, SMB_REFRESHED_OK, id, NULL);
	is_getserver_done = 1;

	if(workgroups) {
		free_name_list(workgroups);
		workgroups = NULL;
	}

	if(servers) {
		free_name_list(servers);
		servers = NULL;
	}

	return NULL;
}
예제 #7
0
Code def_stat(Pnode p)
{
/*
    def_stat
      /
     /
   type ---> ID ---> ID
*/
    int num_id = 0, op;
    Code c_temp, code_ret;
    Pname names;
    Pnode nodo_type = p->child;
    Pschema schema;

    switch (nodo_type->type)
    {
        case N_ATOMIC_TYPE:
            op = T_NEWATOM;
            break;
        case N_TABLE_TYPE:
            op = T_NEWTAB;
            break;
        default:
            noderror(p->child);
    }

    /* Operazioni comuni tra dati atomici e table */

    // Carico la lista di ID delle variabili
    names = id_list(p->child->brother, &num_id);

    // Vincoli semantici
    if (repeated_names(names))
        semerror(p, "Variable redeclaration");

    // Controlliamo che nessuna variabile sia nell'environment
    Pname n;
    for (n = names; n != NULL; n = n->next)
    {
        if (name_in_environment(n->name))
            semerror(p, "Variable redeclaration");
        // Aggiungo la nuova variabile nell'environment
        insert_name_into_environment(n->name);
    }

    // Genero il codice per allocare ognuna delle variabili
    code_ret.head = NULL;
    for (n = names; n != NULL; n = n->next)
    {
        // Aggiungo il nome alla Symbol Table
        schema = type(nodo_type);
        schema->name = n->name;
        insert(schema);

        Value v1; v1.ival = get_size(schema);
        c_temp = makecode1(op, v1);
        code_ret = (code_ret.head == NULL ? c_temp : appcode(code_ret, c_temp));
    }

    // Liberiamo la memoria
    free_name_list(names);

    return code_ret;
}
예제 #8
0
static int
process_asl_data_store(asl_out_dst_data_t *dst)
{
	int32_t today_ymd_stringlen, expire_ymd_stringlen;
	time_t now, ttl, ymd_expire;
	struct tm ctm;
	char today_ymd_string[32], expire_ymd_string[32], *str;
	DIR *dp;
	struct dirent *dent;
	name_list_t *ymd_list, *bb_list, *aux_list, *bb_aux_list, *e;
	size_t file_size, store_size;
	struct stat sb;

	ymd_list = NULL;
	bb_list = NULL;
	aux_list = NULL;
	bb_aux_list = NULL;
	store_size = 0;

	if (dst == NULL) return 0;
	if (dst->path == NULL) return 0;

	debug_log(ASL_LEVEL_NOTICE, "----------------------------------------\n");
	debug_log(ASL_LEVEL_NOTICE, "Processing data store %s\n", dst->path);

	if (dst->rotate_dir != NULL)
	{
		/* check archive */
		memset(&sb, 0, sizeof(struct stat));
		if (stat(dst->rotate_dir, &sb) == 0)
		{
			/* must be a directory */
			if (!S_ISDIR(sb.st_mode))
			{
				debug_log(ASL_LEVEL_ERR, "aslmanager error: archive %s is not a directory", dst->rotate_dir);
				return -1;
			}
		}
		else
		{
			if (errno == ENOENT)
			{
				/* archive doesn't exist - create it */
				if (mkdir(dst->rotate_dir, 0755) != 0)
				{
					debug_log(ASL_LEVEL_ERR, "aslmanager error: can't create archive %s: %s\n", dst->rotate_dir, strerror(errno));
					return -1;
				}
			}
			else
			{
				/* stat failed for some other reason */
				debug_log(ASL_LEVEL_ERR, "aslmanager error: can't stat archive %s: %s\n", dst->rotate_dir, strerror(errno));
				return -1;
			}
		}
	}

	chdir(dst->path);

	/* determine current time */
	now = time(NULL);

	/* ttl 0 means files never expire */
	ymd_expire = 0;
	ttl = dst->ttl[LEVEL_ALL] * SECONDS_PER_DAY;

	if ((ttl > 0) && (ttl <= now)) ymd_expire = now - ttl;

	/* construct today's date as YYYY.MM.DD */
	memset(&ctm, 0, sizeof(struct tm));
	if (localtime_r((const time_t *)&now, &ctm) == NULL) return -1;

	snprintf(today_ymd_string, sizeof(today_ymd_string), "%d.%02d.%02d.", ctm.tm_year + 1900, ctm.tm_mon + 1, ctm.tm_mday);
	today_ymd_stringlen = strlen(today_ymd_string);

	/* construct regular file expiry date as YYYY.MM.DD */
	memset(&ctm, 0, sizeof(struct tm));
	if (localtime_r((const time_t *)&ymd_expire, &ctm) == NULL) return -1;

	snprintf(expire_ymd_string, sizeof(expire_ymd_string), "%d.%02d.%02d.", ctm.tm_year + 1900, ctm.tm_mon + 1, ctm.tm_mday);
	expire_ymd_stringlen = strlen(expire_ymd_string);

	debug_log(ASL_LEVEL_NOTICE, "Expiry Date %s\n", expire_ymd_string);

	dp = opendir(dst->path);
	if (dp == NULL) return -1;

	/* gather a list of YMD files, AUX dirs, BB.AUX dirs, and BB files */
	while ((dent = readdir(dp)) != NULL)
	{
		memset(&sb, 0, sizeof(struct stat));
		file_size = 0;
		if (stat(dent->d_name, &sb) == 0) file_size = sb.st_size;

		if ((dent->d_name[0] >= '0') && (dent->d_name[0] <= '9'))
		{
			ymd_list = add_to_name_list(ymd_list, dent->d_name, file_size);
			store_size += file_size;
		}
		else if (!strncmp(dent->d_name, "AUX.", 4) && (dent->d_name[4] >= '0') && (dent->d_name[4] <= '9') && S_ISDIR(sb.st_mode))
		{
			file_size = directory_size(dent->d_name);
			aux_list = add_to_name_list(aux_list, dent->d_name, file_size);
			store_size += file_size;
		}
		else if (!strncmp(dent->d_name, "BB.AUX.", 7) && (dent->d_name[7] >= '0') && (dent->d_name[7] <= '9') && S_ISDIR(sb.st_mode))
		{
			file_size = directory_size(dent->d_name);
			bb_aux_list = add_to_name_list(bb_aux_list, dent->d_name, file_size);
			store_size += file_size;
		}
		else if (!strncmp(dent->d_name, "BB.", 3) && (dent->d_name[3] >= '0') && (dent->d_name[3] <= '9'))
		{
			bb_list = add_to_name_list(bb_list, dent->d_name, file_size);
			store_size += file_size;
		}
		else if ((!strcmp(dent->d_name, ".")) || (!strcmp(dent->d_name, "..")))
		{}
		else if ((!strcmp(dent->d_name, "StoreData")) || (!strcmp(dent->d_name, "SweepStore")))
		{}
		else
		{
			debug_log(ASL_LEVEL_ERR, "aslmanager: unexpected file %s in ASL data store\n", dent->d_name);
		}
	}

	closedir(dp);

	debug_log(ASL_LEVEL_NOTICE, "Data Store Size = %lu\n", store_size);
	debug_log(ASL_LEVEL_NOTICE, "Data Store YMD Files\n");
	for (e = ymd_list; e != NULL; e = e->next) debug_log(ASL_LEVEL_NOTICE, "	%s   %lu\n", e->name, e->size);
	debug_log(ASL_LEVEL_NOTICE, "Data Store AUX Directories\n");
	for (e = aux_list; e != NULL; e = e->next) debug_log(ASL_LEVEL_NOTICE, "	%s   %lu\n", e->name, e->size);
	debug_log(ASL_LEVEL_NOTICE, "Data Store BB.AUX Directories\n");
	for (e = bb_aux_list; e != NULL; e = e->next) debug_log(ASL_LEVEL_NOTICE, "	%s   %lu\n", e->name, e->size);
	debug_log(ASL_LEVEL_NOTICE, "Data Store BB Files\n");
	for (e = bb_list; e != NULL; e = e->next) debug_log(ASL_LEVEL_NOTICE, "	%s   %lu\n", e->name, e->size);

	/* Delete/achive expired YMD files */
	debug_log(ASL_LEVEL_NOTICE, "Start YMD File Scan\n");

	e = ymd_list;
	while (e != NULL)
	{
		if (strncmp(e->name, expire_ymd_string, expire_ymd_stringlen) <= 0)
		{
			/* file has expired, archive it if required, then unlink it */
			if (dst->rotate_dir != NULL)
			{
				str = NULL;
				asprintf(&str, "%s/%s", dst->rotate_dir, e->name);
				if (str == NULL) return -1;

				filesystem_copy(dst, e->name, str, 0);
				free(str);
			}

			filesystem_unlink(e->name);
			store_size -= e->size;
			e->size = 0;
		}
		else
		{
			/* check if there are any per-level TTLs and filter the file if required */
			uint32_t i, bit, keep_mask;
			uid_t ymd_uid = -1;
			gid_t ymd_gid = -1;
			mode_t ymd_mode = 0600;
			uint32_t age = ymd_file_age(e->name, now, &ymd_uid, &ymd_gid);

			if (age > 0)
			{
				keep_mask = 0x000000ff;
				bit = 1;
				for (i = 0; i <= 7; i++)
				{
					if ((dst->ttl[i] > 0) && (age >= dst->ttl[i])) keep_mask &= ~bit;
					bit *= 2;
				}

				memset(&sb, 0, sizeof(struct stat));
				if (stat(e->name, &sb) == 0) ymd_mode = sb.st_mode & 0777;

				if (keep_mask != 0x000000ff) ymd_file_filter(e->name, dst->path, keep_mask, ymd_mode, ymd_uid, ymd_gid);
			}
		}

		e = e->next;
	}

	debug_log(ASL_LEVEL_NOTICE, "Finished YMD File Scan\n");

	/* Delete/achive expired YMD AUX directories */
	debug_log(ASL_LEVEL_NOTICE, "Start AUX Directory Scan\n");

	e = aux_list;
	while (e != NULL)
	{
		/* stop when a file name/date is after the expire date */
		if (strncmp(e->name + 4, expire_ymd_string, expire_ymd_stringlen) > 0) break;

		if (dst->rotate_dir != NULL)
		{
			str = NULL;
			asprintf(&str, "%s/%s", dst->rotate_dir, e->name);
			if (str == NULL) return -1;

			filesystem_copy(dst, e->name, str, 0);
			free(str);
		}

		remove_directory(e->name);
		store_size -= e->size;
		e->size = 0;

		e = e->next;
	}

	debug_log(ASL_LEVEL_NOTICE, "Finished AUX Directory Scan\n");

	/* Delete/achive expired BB.AUX directories */
	debug_log(ASL_LEVEL_NOTICE, "Start BB.AUX Directory Scan\n");

	e = bb_aux_list;
	while (e != NULL)
	{
		/* stop when a file name/date is after the expire date */
		if (strncmp(e->name + 7, today_ymd_string, today_ymd_stringlen) > 0) break;

		if (dst->rotate_dir != NULL)
		{
			str = NULL;
			asprintf(&str, "%s/%s", dst->rotate_dir, e->name);
			if (str == NULL) return -1;

			filesystem_copy(dst, e->name, str, 0);
			free(str);
		}

		remove_directory(e->name);
		store_size -= e->size;
		e->size = 0;

		e = e->next;
	}

	debug_log(ASL_LEVEL_NOTICE, "Finished BB.AUX Directory Scan\n");

	/* Delete/achive expired BB files */
	debug_log(ASL_LEVEL_NOTICE, "Start BB Scan\n");

	e = bb_list;
	while (e != NULL)
	{
		/* stop when a file name/date is after the expire date */
		if (strncmp(e->name + 3, today_ymd_string, today_ymd_stringlen) > 0) break;

		if (dst->rotate_dir != NULL)
		{
			str = NULL;
			asprintf(&str, "%s/%s", dst->rotate_dir, e->name);
			if (str == NULL) return -1;

			/* syslog -x [str] -f [e->name] */
			filesystem_copy(dst, e->name, str, 0);
			free(str);
		}

		filesystem_unlink(e->name);
		store_size -= e->size;
		e->size = 0;

		e = e->next;
	}

	debug_log(ASL_LEVEL_NOTICE, "Finished BB Scan\n");

	if (dst->all_max > 0)
	{
		/* if data store is over max_size, delete/archive more YMD files */
		if (store_size > dst->all_max) debug_log(ASL_LEVEL_NOTICE, "Additional YMD Scan\n");

		e = ymd_list;
		while ((e != NULL) && (store_size > dst->all_max))
		{
			if (e->size != 0)
			{
				if (strncmp(e->name, today_ymd_string, today_ymd_stringlen) == 0)
				{
					/* do not touch active file YYYY.MM.DD.asl */
					if (strcmp(e->name + today_ymd_stringlen, "asl") == 0)
					{
						e = e->next;
						continue;
					}
				}

				if (dst->rotate_dir != NULL)
				{
					str = NULL;
					asprintf(&str, "%s/%s", dst->rotate_dir, e->name);
					if (str == NULL) return -1;

					/* syslog -x [str] -f [e->name] */
					filesystem_copy(dst, e->name, str, 0);
					free(str);
				}

				filesystem_unlink(e->name);
				store_size -= e->size;
				e->size = 0;
			}

			e = e->next;
		}

		/* if data store is over dst->all_max, delete/archive more BB files */
		if (store_size > dst->all_max) debug_log(ASL_LEVEL_NOTICE, "Additional BB Scan\n");

		e = bb_list;
		while ((e != NULL) && (store_size > dst->all_max))
		{
			if (e->size != 0)
			{
				if (dst->rotate_dir != NULL)
				{
					str = NULL;
					asprintf(&str, "%s/%s", dst->rotate_dir, e->name);
					if (str == NULL) return -1;

					/* syslog -x [str] -f [e->name] */
					filesystem_copy(dst, e->name, str, 0);
					free(str);
				}

				filesystem_unlink(e->name);
				store_size -= e->size;
				e->size = 0;
			}

			e = e->next;
		}
	}

	free_name_list(ymd_list);
	free_name_list(bb_list);
	free_name_list(aux_list);
	free_name_list(bb_aux_list);

	debug_log(ASL_LEVEL_NOTICE, "Data Store Size = %lu\n", store_size);

	return 0;
}
예제 #9
0
void mexFunction(int nlhs, mxArray *plhs[],
                 int nrhs, const mxArray *prhs[])
{
char filename[256];
mxArray *pa1;
mxArray **mat_elem;
double *matData;
const char *field_name[20] = {"name","data"};
int i,j,count;
HEADER_FRAME *first_header_frame;
DATA_FRAME *first_data_frame, *cur_data_frame;
NAME_LIST *first_sig_name, *cur_sig_name;
int num_sigs,num_samples;

first_data_frame = init_data_frame();
first_header_frame = init_header_frame();
first_sig_name = init_name_list();


if (nrhs != 1)
  mexErrMsgTxt("Error: missing filename. Usage:  x = loadsig_cppsim('filename')");
if (!mxIsChar(prhs[0]))
  mexErrMsgTxt("Error: filename must be a string");
if (nlhs != 1)
  mexErrMsgTxt("Error: missing output variable.  Usage:  x = loadsig_cppsim('filename')");

mxGetString(prhs[0],filename,255);


if (load_data_from_file(filename,first_header_frame,first_data_frame,
                        &num_sigs, &num_samples) == -1)
    mexErrMsgTxt("File not read");

extract_signal_names(first_header_frame,num_sigs,first_sig_name);


/* write into MATLAB structure */
plhs[0] = mxCreateStructMatrix(num_sigs,1,2,field_name);


/* copy signal name */
cur_sig_name = first_sig_name;
for (i = 0; i < num_sigs; i++)
    {
     pa1 = mxCreateString(cur_sig_name->name);
     mxSetField(plhs[0],i,field_name[0],pa1);
     cur_sig_name = cur_sig_name->next;  
    }

/* copy data */
if ((mat_elem = (mxArray **) mxCalloc(num_sigs,sizeof(mxArray *))) == NULL)   
    {   
     mexPrintf("error in loadsig_cppsim:  calloc call failed - \n");   
     mexPrintf("  not enough memory!!\n");   
     return;   
    }   
for (i = 0; i < num_sigs; i++)   
     mat_elem[i] = mxCreateDoubleMatrix(num_samples,1,mxREAL);

cur_data_frame = first_data_frame;

count = 0;
for (j = 0; j < num_samples; j++)
  {
   for (i = 0; i < num_sigs; i++)
      {
	if (count == cur_data_frame->length)
	  {
	    cur_data_frame = cur_data_frame->next;
	    if (cur_data_frame == NULL)
	      {
		mexPrintf("error: data frame too short!\n");
		return;
	      }
            count = 0;
	  }
        matData = mxGetPr(mat_elem[i]);
	if (cur_data_frame->data_type == 32)
           matData[j] = cur_data_frame->fbuf[count];
        else
           matData[j] = cur_data_frame->dbuf[count];
        count++;
      }
  }

for (i = 0; i < num_sigs; i++)
    mxSetField(plhs[0],i,field_name[1],mat_elem[i]);

free_header_frames(first_header_frame);
free_data_frames(first_data_frame);
free_name_list(first_sig_name);


return;
}