/* -----------------------------------------------------------------------------
- * $Id: Stg.h,v 1.54 2003/07/22 13:23:44 simonmar Exp $
+ * $Id: Stg.h,v 1.55 2003/08/22 22:24:16 sof Exp $
*
* (c) The GHC Team, 1998-1999
*
/* Misc stuff without a home */
DLL_IMPORT_RTS extern char **prog_argv; /* so we can get at these from Haskell */
DLL_IMPORT_RTS extern int prog_argc;
+DLL_IMPORT_RTS extern char *prog_name;
extern void stackOverflow(void);
/* -----------------------------------------------------------------------------
- * $Id: ProfHeap.c,v 1.46 2003/05/16 14:16:53 simonmar Exp $
+ * $Id: ProfHeap.c,v 1.47 2003/08/22 22:24:12 sof Exp $
*
* (c) The GHC Team, 1998-2003
*
initEra( &censuses[era] );
- fprintf(hp_file, "JOB \"%s", prog_argv[0]);
+ fprintf(hp_file, "JOB \"%s", prog_name);
#ifdef PROFILING
{
fprintf(hp_file, "END_SAMPLE 0.00\n");
#ifdef DEBUG_HEAP_PROF
- DEBUG_LoadSymbols(prog_argv[0]);
+ DEBUG_LoadSymbols(prog_name);
#endif
#ifdef PROFILING
/* -----------------------------------------------------------------------------
- * $Id: Profiling.c,v 1.36 2003/02/22 04:51:52 sof Exp $
+ * $Id: Profiling.c,v 1.37 2003/08/22 22:24:13 sof Exp $
*
* (c) The GHC Team, 1998-2000
*
initProfilingLogFile(void)
{
/* Initialise the log file name */
- prof_filename = arenaAlloc(prof_arena, strlen(prog_argv[0]) + 6);
- sprintf(prof_filename, "%s.prof", prog_argv[0]);
+ prof_filename = arenaAlloc(prof_arena, strlen(prog_name) + 6);
+ sprintf(prof_filename, "%s.prof", prog_name);
/* open the log file */
if ((prof_file = fopen(prof_filename, "w")) == NULL) {
if (RtsFlags.ProfFlags.doHeapProfile) {
/* Initialise the log file name */
- hp_filename = arenaAlloc(prof_arena, strlen(prog_argv[0]) + 6);
- sprintf(hp_filename, "%s.hp", prog_argv[0]);
+ hp_filename = arenaAlloc(prof_arena, strlen(prog_name) + 6);
+ sprintf(hp_filename, "%s.hp", prog_name);
/* open the log file */
if ((hp_file = fopen(hp_filename, "w")) == NULL) {
time_str(), "Final");
fprintf(prof_file, "\n\t ");
- fprintf(prof_file, " %s", prog_argv[0]);
+ fprintf(prof_file, " %s", prog_name);
fprintf(prof_file, " +RTS");
for (count = 0; rts_argv[count]; count++)
fprintf(prof_file, " %s", rts_argv[count]);
/* -----------------------------------------------------------------------------
- * $Id: RtsFlags.c,v 1.68 2003/04/21 14:45:28 sof Exp $
+ * $Id: RtsFlags.c,v 1.69 2003/08/22 22:24:13 sof Exp $
*
* (c) The AQUA Project, Glasgow University, 1994-1997
* (c) The GHC Team, 1998-1999
/*
* Split argument lists
*/
-int prog_argc = 0; /* an "int" so as to match normal "argc" */
+int prog_argc = 0; /* an "int" so as to match normal "argc" */
char **prog_argv = NULL;
+char *prog_name = NULL; /* 'basename' of prog_argv[0] */
int rts_argc = 0; /* ditto */
char *rts_argv[MAX_RTS_ARGS];
char *last_slash;
/* Remove directory from argv[0] -- default files in current directory */
-
- if ((last_slash = (char *) strrchr(argv[0], '/')) != NULL)
- strcpy(argv[0], last_slash+1);
+ if ((last_slash = (char *) strrchr(argv[0], '/')) != NULL) {
+ prog_name = last_slash+1;
+ } else {
+ prog_name = argv[0];
+ }
total_arg = *argc;
arg = 1;
/* -----------------------------------------------------------------------------
- * $Id: RtsStartup.c,v 1.74 2003/08/19 16:32:23 simonmar Exp $
+ * $Id: RtsStartup.c,v 1.75 2003/08/22 22:24:15 sof Exp $
*
* (c) The GHC Team, 1998-2002
*
void
getProgArgv(int *argc, char **argv[])
{
- *argc = prog_argc;
- *argv = prog_argv;
+ if (argc) { *argc = prog_argc; }
+ if (argv) { *argv = prog_argv; }
}
void
/* -----------------------------------------------------------------------------
- * $Id: RtsUtils.c,v 1.34 2003/04/01 15:40:27 sof Exp $
+ * $Id: RtsUtils.c,v 1.35 2003/08/22 22:24:16 sof Exp $
*
* (c) The GHC Team, 1998-2002
*
va_list ap;
va_start(ap,s);
/* don't fflush(stdout); WORKAROUND bug in Linux glibc */
- if (prog_argv != NULL && prog_argv[0] != NULL) {
- fprintf(stderr, "%s: internal error: ", prog_argv[0]);
+ if (prog_argv != NULL && prog_name != NULL) {
+ fprintf(stderr, "%s: internal error: ", prog_name);
} else {
fprintf(stderr, "internal error: ");
}
va_list ap;
va_start(ap,s);
/* don't fflush(stdout); WORKAROUND bug in Linux glibc */
- if (prog_argv != NULL && prog_argv[0] != NULL) {
- fprintf(stderr, "%s: ", prog_argv[0]);
+ if (prog_argv != NULL && prog_name != NULL) {
+ fprintf(stderr, "%s: ", prog_name);
}
vfprintf(stderr, s, ap);
fprintf(stderr, "\n");