]>
Commit | Line | Data |
---|---|---|
d23b8f57 RK |
1 | /**************************************************************************** |
2 | * * | |
3 | * GNAT COMPILER COMPONENTS * | |
4 | * * | |
5 | * A R G V * | |
6 | * * | |
7 | * C Implementation File * | |
8 | * * | |
748086b7 | 9 | * Copyright (C) 1992-2009, Free Software Foundation, Inc. * |
d23b8f57 RK |
10 | * * |
11 | * GNAT is free software; you can redistribute it and/or modify it under * | |
12 | * terms of the GNU General Public License as published by the Free Soft- * | |
748086b7 | 13 | * ware Foundation; either version 3, or (at your option) any later ver- * |
d23b8f57 RK |
14 | * sion. GNAT is distributed in the hope that it will be useful, but WITH- * |
15 | * OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * | |
748086b7 JJ |
16 | * or FITNESS FOR A PARTICULAR PURPOSE. * |
17 | * * | |
18 | * As a special exception under Section 7 of GPL version 3, you are granted * | |
19 | * additional permissions described in the GCC Runtime Library Exception, * | |
20 | * version 3.1, as published by the Free Software Foundation. * | |
21 | * * | |
22 | * You should have received a copy of the GNU General Public License and * | |
23 | * a copy of the GCC Runtime Library Exception along with this program; * | |
24 | * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see * | |
25 | * <http://www.gnu.org/licenses/>. * | |
d23b8f57 RK |
26 | * * |
27 | * GNAT was originally developed by the GNAT team at New York University. * | |
71ff80dc | 28 | * Extensive contributions were provided by Ada Core Technologies Inc. * |
d23b8f57 RK |
29 | * * |
30 | ****************************************************************************/ | |
31 | ||
32 | /* Routines for accessing command line arguments from both the runtime | |
33 | library and from the compiler itself. In the former case, gnat_argc | |
34 | and gnat_argv are the original argc and argv values as stored by the | |
35 | binder generated main program, and these routines are accessed from | |
36 | the Ada.Command_Line package. In the compiler case, gnat_argc and | |
37 | gnat_argv are the values as modified by toplev, and these routines | |
38 | are accessed from the Osint package. */ | |
39 | ||
40 | /* Also routines for accessing the environment from the runtime library. | |
41 | Gnat_envp is the original envp value as stored by the binder generated | |
42 | main program, and these routines are accessed from the | |
43 | Ada.Command_Line.Environment package. */ | |
44 | ||
45 | #ifdef IN_RTS | |
46 | #include "tconfig.h" | |
47 | #include "tsystem.h" | |
48 | #include <sys/stat.h> | |
49 | #else | |
50 | #include "config.h" | |
51 | #include "system.h" | |
52 | #endif | |
53 | ||
54 | #include "adaint.h" | |
55 | ||
56 | /* argc and argv of the main program are saved under gnat_argc and gnat_argv, | |
57 | envp of the main program is saved under gnat_envp. */ | |
58 | ||
59 | int gnat_argc = 0; | |
60 | const char **gnat_argv = (const char **) 0; | |
61 | const char **gnat_envp = (const char **) 0; | |
62 | ||
f921a1cd | 63 | #if defined (_WIN32) && !defined (RTX) |
bcea76b6 GB |
64 | /* Note that on Windows environment the environ point to a buffer that could |
65 | be reallocated if needed. It means that gnat_envp needs to be updated | |
66 | before using gnat_envp to point to the right environment space */ | |
67 | #include <stdlib.h> | |
68 | /* for the environ variable definition */ | |
69 | #define gnat_envp (environ) | |
70 | #endif | |
71 | ||
d23b8f57 | 72 | int |
9373164a | 73 | __gnat_arg_count (void) |
d23b8f57 RK |
74 | { |
75 | return gnat_argc; | |
76 | } | |
77 | ||
78 | int | |
9373164a | 79 | __gnat_len_arg (int arg_num) |
d23b8f57 | 80 | { |
b11e8d6f RD |
81 | if (gnat_argv != NULL) |
82 | return strlen (gnat_argv[arg_num]); | |
83 | else | |
84 | return 0; | |
d23b8f57 RK |
85 | } |
86 | ||
87 | void | |
12e0c41c | 88 | __gnat_fill_arg (char *a, int i) |
d23b8f57 | 89 | { |
b11e8d6f RD |
90 | if (gnat_argv != NULL) |
91 | strncpy (a, gnat_argv[i], strlen(gnat_argv[i])); | |
d23b8f57 RK |
92 | } |
93 | ||
94 | int | |
9373164a | 95 | __gnat_env_count (void) |
d23b8f57 RK |
96 | { |
97 | int i; | |
98 | ||
99 | for (i = 0; gnat_envp[i]; i++) | |
100 | ; | |
101 | return i; | |
102 | } | |
103 | ||
104 | int | |
9373164a | 105 | __gnat_len_env (int env_num) |
d23b8f57 | 106 | { |
b11e8d6f RD |
107 | if (gnat_envp != NULL) |
108 | return strlen (gnat_envp[env_num]); | |
109 | else | |
110 | return 0; | |
d23b8f57 RK |
111 | } |
112 | ||
113 | void | |
9373164a | 114 | __gnat_fill_env (char *a, int i) |
d23b8f57 | 115 | { |
b11e8d6f RD |
116 | if (gnat_envp != NULL) |
117 | strncpy (a, gnat_envp[i], strlen (gnat_envp[i])); | |
d23b8f57 | 118 | } |