* (c)2006 Galois Connections, Inc.
*/
+#include "PosixSource.h"
+#include "Rts.h"
+
+#include "Trace.h"
+
#include <stdio.h>
#include <ctype.h>
-#include <stdlib.h>
#include <string.h>
#include <assert.h>
-#include "Rts.h"
-#include "Hpc.h"
-#include "Trace.h"
-
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
static char *tixFilename;
-static void failure(char *msg) {
+static void GNU_ATTRIBUTE(__noreturn__)
+failure(char *msg) {
debugTrace(DEBUG_hpc,"hpc failure: %s\n",msg);
fprintf(stderr,"Hpc failure: %s\n",msg);
if (tixFilename) {
static void hpc_init(void) {
char *hpc_tixdir;
+ char *hpc_tixfile;
if (hpc_inited != 0) {
return;
}
hpc_inited = 1;
hpc_pid = getpid();
hpc_tixdir = getenv("HPCTIXDIR");
-
- if (hpc_tixdir != NULL) {
- /* Make sure the directory is present
+ hpc_tixfile = getenv("HPCTIXFILE");
+
+ /* XXX Check results of mallocs/strdups, and check we are requesting
+ enough bytes */
+ if (hpc_tixfile != NULL) {
+ tixFilename = strdup(hpc_tixfile);
+ } else if (hpc_tixdir != NULL) {
+ /* Make sure the directory is present;
+ * conditional code for mkdir lifted from lndir.c
*/
+#ifdef WIN32
+ mkdir(hpc_tixdir);
+#else
mkdir(hpc_tixdir,0777);
+#endif
/* Then, try open the file
*/
tixFilename = (char *) malloc(strlen(hpc_tixdir) + strlen(prog_name) + 12);