aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/runtime/main.c
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2009-05-26 23:19:57 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2009-05-26 23:19:57 +0200
commit092231a8d635d601a3d05a284f279286f59cab9e (patch)
tree43a6fbb9dd54816b1c1a284ffc7fba3adac67337 /libgfortran/runtime/main.c
parent9a0bab0be682be2aaee5f1146518c4d94d44ac8e (diff)
downloadgcc-092231a8d635d601a3d05a284f279286f59cab9e.zip
gcc-092231a8d635d601a3d05a284f279286f59cab9e.tar.gz
gcc-092231a8d635d601a3d05a284f279286f59cab9e.tar.bz2
re PR fortran/39178 (Generate main() rather than using a main in libgfortran/fmain.c)
fortran/ 2009-05-26 Tobias Burnus <burnus@net-b.de> PR fortran/39178 * gfortranspec.c (lang_specific_driver): Stop linking libgfortranbegin. * trans-decl.c (gfc_build_builtin_function_decls): Stop making MAIN__ publicly visible. (gfc_build_builtin_function_decls): Add gfor_fndecl_set_args. (create_main_function) New function. (gfc_generate_function_code): Use it. libgfortran/ 2009-05-26 Tobias Burnus <burnus@net-b.de> PR fortran/39178 * runtime/main.c (store_exe_path): Make static and multiple-times callable. (set_args): Call store_exe_path. * libgfortran.h: Remove store_exe_path prototype. * fmain.c (main): Remove store_exe_path call. From-SVN: r147883
Diffstat (limited to 'libgfortran/runtime/main.c')
-rw-r--r--libgfortran/runtime/main.c48
1 files changed, 28 insertions, 20 deletions
diff --git a/libgfortran/runtime/main.c b/libgfortran/runtime/main.c
index 3cccc3d..6df2775 100644
--- a/libgfortran/runtime/main.c
+++ b/libgfortran/runtime/main.c
@@ -69,31 +69,12 @@ determine_endianness (void)
static int argc_save;
static char **argv_save;
-/* Set the saved values of the command line arguments. */
-
-void
-set_args (int argc, char **argv)
-{
- argc_save = argc;
- argv_save = argv;
-}
-
-/* Retrieve the saved values of the command line arguments. */
-
-void
-get_args (int *argc, char ***argv)
-{
- *argc = argc_save;
- *argv = argv_save;
-}
-
-
static const char *exe_path;
static int please_free_exe_path_when_done;
/* Save the path under which the program was called, for use in the
backtrace routines. */
-void
+static void
store_exe_path (const char * argv0)
{
#ifndef PATH_MAX
@@ -106,6 +87,10 @@ store_exe_path (const char * argv0)
char buf[PATH_MAX], *cwd, *path;
+ /* This can only happen if store_exe_path is called multiple times. */
+ if (please_free_exe_path_when_done)
+ free ((char *) exe_path);
+
/* On the simulator argv is not set. */
if (argv0 == NULL || argv0[0] == '/')
{
@@ -128,6 +113,7 @@ store_exe_path (const char * argv0)
please_free_exe_path_when_done = 1;
}
+
/* Return the full path of the executable. */
char *
full_exe_path (void)
@@ -135,6 +121,28 @@ full_exe_path (void)
return (char *) exe_path;
}
+
+/* Set the saved values of the command line arguments. */
+
+void
+set_args (int argc, char **argv)
+{
+ argc_save = argc;
+ argv_save = argv;
+ store_exe_path (argv[0]);
+}
+
+
+/* Retrieve the saved values of the command line arguments. */
+
+void
+get_args (int *argc, char ***argv)
+{
+ *argc = argc_save;
+ *argv = argv_save;
+}
+
+
/* Initialize the runtime library. */
static void __attribute__((constructor))