Make setProgArgv() set the RTS's idea of the prog name too.
/* -----------------------------------------------------------------------------
*
- * (c) The GHC Team, 2002
+ * (c) The GHC Team, 2005
*
* RTS entry points as mandated by the FFI addendum to the Haskell 98 report
*
void
hs_set_argv(int argc, char *argv[])
{
- prog_argc = argc;
- prog_argv = argv;
+ setProgArgv(argc,argv);
}
void
rtsBool error = rtsFalse;
I_ mode;
I_ arg, total_arg;
- char *last_slash;
-
- /* Remove directory from argv[0] -- default files in current directory */
- if ((last_slash = (char *) strrchr(argv[0],
-#if !defined(mingw32_HOST_OS)
- '/')
-#else
- '\\')
-#endif
- ) != NULL) {
- prog_name = last_slash+1;
- } else {
- prog_name = argv[0];
- }
+ setProgName (argv);
total_arg = *argc;
arg = 1;
errorBelch("bad RTS option: %s", s);
stg_exit(EXIT_FAILURE);
}
+
+/* -----------------------------------------------------------------------------
+ Getting/Setting the program's arguments.
+
+ These are used by System.Environment, and parts of the RTS.
+ -------------------------------------------------------------------------- */
+
+void
+setProgName(char *argv[])
+{
+ char *last_slash;
+
+ /* Remove directory from argv[0] -- default files in current directory */
+ if ((last_slash = (char *) strrchr(argv[0],
+#if !defined(mingw32_HOST_OS)
+ '/'
+#else
+ '\\'
+#endif
+ )) != NULL) {
+ prog_name = last_slash+1;
+ } else {
+ prog_name = argv[0];
+ }
+}
+
+void
+getProgArgv(int *argc, char **argv[])
+{
+ if (argc) { *argc = prog_argc; }
+ if (argv) { *argv = prog_argv; }
+}
+
+void
+setProgArgv(int argc, char *argv[])
+{
+ /* Usually this is done by startupHaskell, so we don't need to call this.
+ However, sometimes Hugs wants to change the arguments which Haskell
+ getArgs >>= ... will be fed. So you can do that by calling here
+ _after_ calling startupHaskell.
+ */
+ prog_argc = argc;
+ prog_argv = argv;
+ setProgName(prog_argv);
+}
/* Parse the flags, separating the RTS flags from the programs args */
if (argc != NULL && argv != NULL) {
setupRtsFlags(argc, *argv, &rts_argc, rts_argv);
- prog_argc = *argc;
- prog_argv = *argv;
+ setProgArgv(*argc,*argv);
}
#if defined(PAR)
/* -----------------------------------------------------------------------------
- Getting/Setting the program's arguments.
-
- These are used by System.Environment.
- -------------------------------------------------------------------------- */
-
-void
-getProgArgv(int *argc, char **argv[])
-{
- if (argc) { *argc = prog_argc; }
- if (argv) { *argv = prog_argv; }
-}
-
-void
-setProgArgv(int argc, char *argv[])
-{
- /* Usually this is done by startupHaskell, so we don't need to call this.
- However, sometimes Hugs wants to change the arguments which Haskell
- getArgs >>= ... will be fed. So you can do that by calling here
- _after_ calling startupHaskell.
- */
- prog_argc = argc;
- prog_argv = argv;
-}
-
-/* -----------------------------------------------------------------------------
Per-module initialisation
This process traverses all the compiled modules in the program