/* This file is part of the Linux Trace Toolkit viewer
- * Copyright (C) 2009 Benjamin Poirier <benjamin.poirier@polymtl.ca>
+ * Copyright (C) 2009, 2010 Benjamin Poirier <benjamin.poirier@polymtl.ca>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License Version 2 as
- * published by the Free Software Foundation;
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 2.1 of the License, or (at
+ * your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA 02111-1307, USA.
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#define _GNU_SOURCE
#define NANOSECONDS_PER_SECOND 1000000000
#define CPU_FREQ 1e9
// Functions common to all processing modules
static void initProcessingText(SyncState* const syncState, ...);
static void destroyProcessingText(SyncState* const syncState);
-static void finalizeProcessingText(SyncState* const syncState);
+static GArray* finalizeProcessingText(SyncState* const syncState);
static void printProcessingStatsText(SyncState* const syncState);
static void writeProcessingTraceTimeOptionsText(SyncState* const syncState,
const unsigned int i, const unsigned int j);
const unsigned int i);
// Functions specific to this module
-static void registerProcessingText() __attribute__((constructor (102)));
-
static unsigned int readTraceNb(FILE* testCase);
static void skipCommentLines(FILE* testCase);
/*
* Processing Module registering function
*/
-static void registerProcessingText()
+void registerProcessingText()
{
g_queue_push_tail(&processingModules, &processingModuleText);
}
return;
}
+ fclose(processingData->testCase);
+
if (syncState->stats && processingData->factors)
{
g_array_free(processingData->factors, TRUE);
*
* Args:
* syncState: container for synchronization data.
+ *
+ * Returns:
+ * Factors[traceNb] synchronization factors for each trace
*/
-static void finalizeProcessingText(SyncState* const syncState)
+static GArray* finalizeProcessingText(SyncState* const syncState)
{
- size_t len;
int retval;
unsigned int* seq;
GArray* factors;
syncState->processingData;
FILE* testCase= processingData->testCase;
char* line= NULL;
+ size_t bufLen;
seq= calloc(syncState->traceNb, sizeof(unsigned int));
skipCommentLines(testCase);
- retval= getline(&line, &len, testCase);
+ retval= getline(&line, &bufLen, testCase);
while(!feof(testCase))
{
unsigned int sender, receiver;
g_error(strerror(errno));
}
- if (line[len - 1] == '\n')
+ if (line[retval - 1] == '\n')
{
- line[len - 1]= '\0';
+ line[retval - 1]= '\0';
}
retval= sscanf(line, " %u %u %lf %lf %c", &sender, &receiver,
seq[sender]++;
skipCommentLines(testCase);
- retval= getline(&line, &len, testCase);
+ retval= getline(&line, &bufLen, testCase);
}
free(seq);
{
processingData->factors= factors;
}
- else
- {
- g_array_free(factors, TRUE);
- }
+
+ return factors;
}
abort();
}
+ if (line)
+ {
+ free(line);
+ }
+
return result;
}