+ LttTrace * t;
+ LttSystemDescription * sys_description;
+ char eventdefs[DIR_NAME_SIZE];
+ char info[DIR_NAME_SIZE];
+ char control[DIR_NAME_SIZE];
+ char cpu[DIR_NAME_SIZE];
+ char tmp[DIR_NAME_SIZE];
+ char abs_path[DIR_NAME_SIZE];
+ gboolean has_slash = FALSE;
+
+ get_absolute_pathname(pathname, abs_path);
+ //establish the pathname to different directories
+ if(abs_path[strlen(abs_path)-1] == '/')has_slash = TRUE;
+ strcpy(eventdefs,abs_path);
+ if(!has_slash)strcat(eventdefs,"/");
+ strcat(eventdefs,"eventdefs/");
+
+ strcpy(info,abs_path);
+ if(!has_slash)strcat(info,"/");
+ strcat(info,"info/");
+
+ strcpy(control,abs_path);
+ if(!has_slash)strcat(control,"/");
+ strcat(control,"control/");
+
+ strcpy(cpu,abs_path);
+ if(!has_slash)strcat(cpu,"/");
+ strcat(cpu,"cpu/");
+
+ //new trace
+ sys_description = g_new(LttSystemDescription, 1);
+ t = g_new(LttTrace, 1);
+ t->pathname = g_strdup(abs_path);
+ t->facility_number = 0;
+ t->control_tracefile_number = 0;
+ t->per_cpu_tracefile_number = 0;
+ t->system_description = sys_description;
+ t->control_tracefiles = g_ptr_array_new();
+ t->per_cpu_tracefiles = g_ptr_array_new();
+ t->facilities = g_ptr_array_new();
+ getDataEndianType(&(t->my_arch_size), &(t->my_arch_endian));
+
+ //get system description
+ strcpy(tmp,info);
+ strcat(tmp,"system.xml");
+ if(getSystemInfo(sys_description, tmp)) {
+ g_ptr_array_free(t->facilities, TRUE);
+ g_ptr_array_free(t->per_cpu_tracefiles, TRUE);
+ g_ptr_array_free(t->control_tracefiles, TRUE);
+ g_free(sys_description);
+ g_free(t->pathname);
+ g_free(t);
+ return NULL;
+ }
+
+
+
+ //get facilities info
+ if(getFacilityInfo(t,eventdefs)) {
+ g_ptr_array_free(t->facilities, TRUE);
+ g_ptr_array_free(t->per_cpu_tracefiles, TRUE);
+ g_ptr_array_free(t->control_tracefiles, TRUE);
+ g_free(sys_description);
+ g_free(t->pathname);
+ g_free(t);
+ return NULL;
+ }
+
+ //get control tracefile info
+ getControlFileInfo(t,control);
+ /*
+ if(getControlFileInfo(t,control)) {
+ g_ptr_array_free(t->facilities, TRUE);
+ g_ptr_array_free(t->per_cpu_tracefiles, TRUE);
+ g_ptr_array_free(t->control_tracefiles, TRUE);
+ g_free(sys_description);
+ g_free(t->pathname);
+ g_free(t);
+ return NULL;
+ }*/ // With fatal error
+
+ //get cpu tracefile info
+ if(getCpuFileInfo(t,cpu)) {
+ g_ptr_array_free(t->facilities, TRUE);
+ g_ptr_array_free(t->per_cpu_tracefiles, TRUE);
+ g_ptr_array_free(t->control_tracefiles, TRUE);
+ g_free(sys_description);
+ g_free(t->pathname);
+ g_free(t);
+ return NULL;
+ }
+
+ return t;