Mercurial > hg > CbC > CbC_gcc
comparison gcc/ada/argv.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /**************************************************************************** | |
2 * * | |
3 * GNAT COMPILER COMPONENTS * | |
4 * * | |
5 * A R G V * | |
6 * * | |
7 * C Implementation File * | |
8 * * | |
9 * Copyright (C) 1992-2012, Free Software Foundation, Inc. * | |
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- * | |
13 * ware Foundation; either version 3, or (at your option) any later ver- * | |
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 * | |
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/>. * | |
26 * * | |
27 * GNAT was originally developed by the GNAT team at New York University. * | |
28 * Extensive contributions were provided by Ada Core Technologies Inc. * | |
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 #ifdef __cplusplus | |
57 extern "C" { | |
58 #endif | |
59 | |
60 /* argc and argv of the main program are saved under gnat_argc and gnat_argv, | |
61 envp of the main program is saved under gnat_envp. */ | |
62 | |
63 int gnat_argc = 0; | |
64 const char **gnat_argv = (const char **) 0; | |
65 const char **gnat_envp = (const char **) 0; | |
66 | |
67 #if defined (_WIN32) && !defined (RTX) | |
68 /* Note that on Windows environment the environ point to a buffer that could | |
69 be reallocated if needed. It means that gnat_envp needs to be updated | |
70 before using gnat_envp to point to the right environment space */ | |
71 #include <stdlib.h> | |
72 /* for the environ variable definition */ | |
73 #define gnat_envp (environ) | |
74 #endif | |
75 | |
76 int | |
77 __gnat_arg_count (void) | |
78 { | |
79 return gnat_argc; | |
80 } | |
81 | |
82 int | |
83 __gnat_len_arg (int arg_num) | |
84 { | |
85 if (gnat_argv != NULL) | |
86 return strlen (gnat_argv[arg_num]); | |
87 else | |
88 return 0; | |
89 } | |
90 | |
91 void | |
92 __gnat_fill_arg (char *a, int i) | |
93 { | |
94 if (gnat_argv != NULL) | |
95 strncpy (a, gnat_argv[i], strlen(gnat_argv[i])); | |
96 } | |
97 | |
98 int | |
99 __gnat_env_count (void) | |
100 { | |
101 int i; | |
102 | |
103 for (i = 0; gnat_envp[i]; i++) | |
104 ; | |
105 return i; | |
106 } | |
107 | |
108 int | |
109 __gnat_len_env (int env_num) | |
110 { | |
111 if (gnat_envp != NULL) | |
112 return strlen (gnat_envp[env_num]); | |
113 else | |
114 return 0; | |
115 } | |
116 | |
117 void | |
118 __gnat_fill_env (char *a, int i) | |
119 { | |
120 if (gnat_envp != NULL) | |
121 strncpy (a, gnat_envp[i], strlen (gnat_envp[i])); | |
122 } | |
123 | |
124 #ifdef __cplusplus | |
125 } | |
126 #endif |