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
57extern "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
63int gnat_argc = 0;
64const char **gnat_argv = (const char **) 0;
65const 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
76int
77__gnat_arg_count (void)
78{
79  return gnat_argc;
80}
81
82int
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
91void
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
98int
99__gnat_env_count (void)
100{
101  int i;
102
103  for (i = 0; gnat_envp[i]; i++)
104    ;
105  return i;
106}
107
108int
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
117void
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
127