]> gcc.gnu.org Git - gcc.git/blame - gcc/ada/libgnat/a-comlin.adb
ada: Remove GNATcheck violations
[gcc.git] / gcc / ada / libgnat / a-comlin.adb
CommitLineData
d23b8f57
RK
1------------------------------------------------------------------------------
2-- --
3084fecd 3-- GNAT RUN-TIME COMPONENTS --
d23b8f57
RK
4-- --
5-- A D A . C O M M A N D _ L I N E --
6-- --
7-- B o d y --
8-- --
cccef051 9-- Copyright (C) 1992-2023, 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
1d5a85bd 32with System; use System;
fbf5a39b 33
d23b8f57
RK
34package body Ada.Command_Line is
35
36 function Arg_Count return Natural;
37 pragma Import (C, Arg_Count, "__gnat_arg_count");
38
39 procedure Fill_Arg (A : System.Address; Arg_Num : Integer);
40 pragma Import (C, Fill_Arg, "__gnat_fill_arg");
41
42 function Len_Arg (Arg_Num : Integer) return Integer;
43 pragma Import (C, Len_Arg, "__gnat_len_arg");
44
fbf5a39b
AC
45 -----------------------
46 -- Local Subprograms --
47 -----------------------
48
49 function Initialized return Boolean;
50 -- Checks to ensure that gnat_argc and gnat_argv have been properly
51 -- initialized. Returns false if not, or if argv / argc are
52 -- unsupported on the target (e.g. VxWorks).
53
d23b8f57
RK
54 --------------
55 -- Argument --
56 --------------
57
0ae9f22f 58 function Argument (Number : Positive) return String is
d23b8f57 59 begin
7d827255
AC
60 if Number > Argument_Count then
61 raise Constraint_Error;
62 end if;
63
64 declare
65 Num : constant Positive :=
7ec25b2b 66 (if Remove_Args = null then Number else Remove_Args (Number));
7d827255
AC
67 Arg : aliased String (1 .. Len_Arg (Num));
68 begin
69 Fill_Arg (Arg'Address, Num);
70 return Arg;
71 end;
d23b8f57
RK
72 end Argument;
73
74 --------------------
75 -- Argument_Count --
76 --------------------
77
78 function Argument_Count return Natural is
79 begin
8ce9496f
SB
80 return
81 (if not Initialized then 0 -- RM A.15 (11)
82 elsif Remove_Args = null then Arg_Count - 1
83 else Remove_Count
84 );
d23b8f57
RK
85 end Argument_Count;
86
fbf5a39b
AC
87 -----------------
88 -- Initialized --
89 -----------------
90
91 function Initialized return Boolean is
92 gnat_argv : System.Address;
93 pragma Import (C, gnat_argv, "gnat_argv");
94
95 begin
96 return gnat_argv /= System.Null_Address;
97 end Initialized;
98
d23b8f57
RK
99 ------------------
100 -- Command_Name --
101 ------------------
102
103 function Command_Name return String is
d23b8f57 104 begin
8ce9496f
SB
105 pragma Annotate (Gnatcheck, Exempt_On, "Improper_Returns",
106 "early returns for performance");
fbf5a39b
AC
107 if not Initialized then
108 return "";
109 end if;
110
111 declare
112 Arg : aliased String (1 .. Len_Arg (0));
113
114 begin
115 Fill_Arg (Arg'Address, 0);
116 return Arg;
117 end;
8ce9496f 118 pragma Annotate (Gnatcheck, Exempt_Off, "Improper_Returns");
d23b8f57
RK
119 end Command_Name;
120
121end Ada.Command_Line;
This page took 5.301111 seconds and 5 git commands to generate.