1------------------------------------------------------------------------------ 2-- -- 3-- FLORIST (FSU Implementation of POSIX.5) COMPONENTS -- 4-- -- 5-- P O S I X . C O N F I G U R A B L E _ S Y S T E M _ L I M I T S -- 6-- -- 7-- B o d y -- 8-- -- 9-- -- 10-- Copyright (C) 1996-1997 Florida State University -- 11-- Copyright (C) 1998-2014, AdaCore -- 12-- -- 13-- This file is a component of FLORIST, an implementation of an Ada API -- 14-- for the POSIX OS services, for use with the GNAT Ada compiler and -- 15-- the FSU Gnu Ada Runtime Library (GNARL). The interface is intended -- 16-- to be close to that specified in IEEE STD 1003.5: 1990 and IEEE STD -- 17-- 1003.5b: 1996. -- 18-- -- 19-- FLORIST is free software; you can redistribute it and/or modify it -- 20-- under terms of the GNU General Public License as published by the -- 21-- Free Software Foundation; either version 2, or (at your option) any -- 22-- later version. FLORIST is distributed in the hope that it will be -- 23-- useful, but WITHOUT ANY WARRANTY; without even the implied warranty -- 24-- of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- 25-- General Public License for more details. You should have received a -- 26-- copy of the GNU General Public License distributed with GNARL; see -- 27-- file COPYING. If not, write to the Free Software Foundation, 59 -- 28-- Temple Place - Suite 330, Boston, MA 02111-1307, USA. -- 29-- -- 30-- -- 31-- -- 32-- -- 33-- -- 34-- -- 35-- -- 36-- -- 37------------------------------------------------------------------------------ 38 39with POSIX; 40 41package body POSIX.Configurable_System_Limits is 42 43 package PO renames POSIX.Options; 44 package PL renames POSIX.Limits; 45 use POSIX.C; 46 47 function sysconf (c_name : int) return long; 48 pragma Import (C, sysconf, sysconf_LINKNAME); 49 50 generic 51 type Support_Subtype is range <>; 52 Name : int; 53 function Limit return Support_Subtype; 54 55 function Limit return Support_Subtype is 56 Result : long; 57 begin 58 Result := sysconf (Name); 59 if Result = -1 then 60 return Support_Subtype'Last; 61 end if; 62 return Support_Subtype (Result); 63 end Limit; 64 65 function Asynchronous_IO_Is_Supported 66 return PO.Asynchronous_IO_Support is 67 begin 68 return sysconf (SC_ASYNCHRONOUS_IO) = 1; 69 end Asynchronous_IO_Is_Supported; 70 71 function File_Synchronization_Is_Supported 72 return PO.File_Synchronization_Support is 73 begin 74 return sysconf (SC_FSYNC) = 1; 75 end File_Synchronization_Is_Supported; 76 77 function Job_Control_Supported 78 return Job_Control_Support is 79 begin 80 return sysconf (SC_JOB_CONTROL) = 1; 81 end Job_Control_Supported; 82 83 function Memory_Mapped_Files_Are_Supported 84 return PO.Memory_Mapped_Files_Support is 85 begin 86 return sysconf (SC_MAPPED_FILES) = 1; 87 end Memory_Mapped_Files_Are_Supported; 88 89 function Memory_Locking_Is_Supported 90 return PO.Memory_Locking_Support is 91 begin 92 return sysconf (SC_MEMLOCK) = 1; 93 end Memory_Locking_Is_Supported; 94 95 function Memory_Range_Locking_Is_Supported 96 return PO.Memory_Range_Locking_Support is 97 begin 98 return sysconf (SC_MEMLOCK_RANGE) = 1; 99 end Memory_Range_Locking_Is_Supported; 100 101 function Memory_Protection_Is_Supported 102 return PO.Memory_Protection_Support is 103 begin 104 return sysconf (SC_MEMORY_PROTECTION) = 1; 105 end Memory_Protection_Is_Supported; 106 107 function Message_Queues_Are_Supported 108 return PO.Message_Queues_Support is 109 begin 110 return sysconf (SC_MESSAGE_PASSING) = 1; 111 end Message_Queues_Are_Supported; 112 113 function Mutex_Priority_Ceiling_Is_Supported 114 return PO.Mutex_Priority_Ceiling_Support is 115 begin 116 return sysconf (SC_THREAD_PRIO_PROTECT) = 1; 117 end Mutex_Priority_Ceiling_Is_Supported; 118 119 function Mutex_Priority_Inheritance_Is_Supported 120 return PO.Mutex_Priority_Inheritance_Support is 121 begin 122 return sysconf (SC_THREAD_PRIO_INHERIT) = 1; 123 end Mutex_Priority_Inheritance_Is_Supported; 124 125 function Mutexes_Are_Supported 126 return PO.Mutexes_Support is 127 begin 128 return True; 129 end Mutexes_Are_Supported; 130 131 function Prioritized_IO_Is_Supported 132 return PO.Prioritized_IO_Support is 133 begin 134 return sysconf (SC_PRIORITIZED_IO) = 1; 135 end Prioritized_IO_Is_Supported; 136 137 function Priority_Process_Scheduling_Is_Supported 138 return PO.Priority_Process_Scheduling_Support is 139 begin 140 return sysconf (SC_PRIORITY_SCHEDULING) = 1; 141 end Priority_Process_Scheduling_Is_Supported; 142 143 function Priority_Task_Scheduling_Is_Supported 144 return PO.Priority_Task_Scheduling_Support is 145 begin 146 return sysconf (SC_THREAD_PRIORITY_SCHEDULING) = 1; 147 end Priority_Task_Scheduling_Is_Supported; 148 149 function Realtime_Signals_Are_Supported 150 return PO.Realtime_Signals_Support is 151 begin 152 return sysconf (SC_REALTIME_SIGNALS) = 1; 153 end Realtime_Signals_Are_Supported; 154 155 function Saved_IDs_Supported 156 return PO.Saved_IDs_Support is 157 begin 158 return sysconf (SC_SAVED_IDS) = 1; 159 end Saved_IDs_Supported; 160 161 function Semaphores_Are_Supported 162 return PO.Semaphores_Support is 163 begin 164 return sysconf (SC_SEMAPHORES) = 1; 165 end Semaphores_Are_Supported; 166 167 function Shared_Memory_Objects_Are_Supported 168 return PO.Shared_Memory_Objects_Support is 169 begin 170 return sysconf (SC_SHARED_MEMORY_OBJECTS) = 1; 171 end Shared_Memory_Objects_Are_Supported; 172 173 function Process_Shared_Is_Supported 174 return PO.Process_Shared_Support is 175 begin 176 return sysconf (SC_THREAD_PROCESS_SHARED) = 1; 177 end Process_Shared_Is_Supported; 178 179 function Synchronized_IO_Is_Supported 180 return PO.Synchronized_IO_Support is 181 begin 182 return sysconf (SC_SYNCHRONIZED_IO) = 1; 183 end Synchronized_IO_Is_Supported; 184 185 function Timers_Are_Supported 186 return PO.Timers_Support is 187 begin 188 return sysconf (SC_TIMERS) = 1; 189 end Timers_Are_Supported; 190 191 function System_POSIX_Version 192 return POSIX_Version is 193 begin 194 return POSIX_Version (sysconf (SC_VERSION)); 195 end System_POSIX_Version; 196 197 function System_POSIX_Ada_Version 198 return POSIX_Version is 199 begin 200 return POSIX_Ada_Version; 201 end System_POSIX_Ada_Version; 202 203 function ALM is new Limit 204 (PL.Argument_List_Maxima, SC_ARG_MAX); 205 function Argument_List_Maximum 206 return POSIX.Limits.Argument_List_Maxima renames ALM; 207 208 function AIOM is new Limit 209 (PL.Asynchronous_IO_Maxima, SC_AIO_MAX); 210 function Asynchronous_IO_Maximum 211 return PL.Asynchronous_IO_Maxima renames AIOM; 212 213 function AIOPDM is new Limit 214 (PL.Asynchronous_IO_Priority_Delta_Maxima, SC_AIO_PRIO_DELTA_MAX); 215 function Asynchronous_IO_Priority_Delta_Maximum 216 return PL.Asynchronous_IO_Priority_Delta_Maxima renames AIOPDM; 217 218 function CPM is new Limit 219 (PL.Child_Processes_Maxima, SC_CHILD_MAX); 220 function Child_Processes_Maximum 221 return PL.Child_Processes_Maxima renames CPM; 222 223 function GM is new Limit 224 (PL.Groups_Maxima, SC_NGROUPS_MAX); 225 function Groups_Maximum 226 return PL.Groups_Maxima renames GM; 227 228 function LIOM is new Limit 229 (PL.List_IO_Maxima, SC_AIO_LISTIO_MAX); 230 function List_IO_Maximum 231 return PL.List_IO_Maxima renames LIOM; 232 233 function OMQM is new Limit 234 (PL.Open_Message_Queues_Maxima, SC_MQ_OPEN_MAX); 235 function Open_Message_Queues_Maximum 236 return PL.Open_Message_Queues_Maxima renames OMQM; 237 238 function MPM is new Limit 239 (PL.Message_Priority_Maxima, SC_MQ_PRIO_MAX); 240 function Message_Priority_Maximum 241 return PL.Message_Priority_Maxima renames MPM; 242 243 function OFM is new Limit 244 (PL.Open_Files_Maxima, SC_OPEN_MAX); 245 function Open_Files_Maximum 246 return PL.Open_Files_Maxima renames OFM; 247 248 function PSR is new Limit 249 (PL.Page_Size_Range, SC_PAGESIZE); 250 function Page_Size 251 return PL.Page_Size_Range renames PSR; 252 253 function QSM is new Limit 254 (PL.Queued_Signals_Maxima, SC_SIGQUEUE_MAX); 255 function Queued_Signals_Maximum 256 return PL.Queued_Signals_Maxima renames QSM; 257 258 function RSM is new Limit 259 (PL.Realtime_Signals_Maxima, SC_RTSIG_MAX); 260 function Realtime_Signals_Maximum 261 return PL.Realtime_Signals_Maxima renames RSM; 262 263 function SEM is new Limit 264 (PL.Semaphores_Maxima, SC_SEM_NSEMS_MAX); 265 function Semaphores_Maximum 266 return PL.Semaphores_Maxima renames SEM; 267 268 function SVM is new Limit 269 (PL.Semaphores_Value_Maxima, SC_SEM_VALUE_MAX); 270 function Semaphores_Value_Maximum 271 return PL.Semaphores_Value_Maxima renames SVM; 272 273 function STM is new Limit 274 (PL.Streams_Maxima, SC_STREAM_MAX); 275 function Stream_Maximum 276 return PL.Streams_Maxima renames STM; 277 278 function TM is new Limit 279 (PL.Timers_Maxima, SC_TIMER_MAX); 280 function Timers_Maximum 281 return PL.Timers_Maxima renames TM; 282 283 function TOM is new Limit 284 (PL.Timer_Overruns_Maxima, SC_DELAYTIMER_MAX); 285 function Timer_Overruns_Maximum 286 return PL.Timer_Overruns_Maxima renames TOM; 287 288 function TZSM is new Limit 289 (PL.Time_Zone_String_Maxima, SC_TZNAME_MAX); 290 function Time_Zone_String_Maximum 291 return PL.Time_Zone_String_Maxima renames TZSM; 292 293 -- additions from POSIX.5c [D2] 294 295 -- POSIX.5c/D4 extensions 296 297 function Internet_Datagram_Is_Supported 298 return POSIX.Options.Internet_Datagram_Support is 299 begin 300 return sysconf (SC_PII_INTERNET_DGRAM) = 1; 301 end Internet_Datagram_Is_Supported; 302 303 function Internet_Protocol_Is_Supported 304 return POSIX.Options.Internet_Protocol_Support is 305 begin 306 return sysconf (SC_PII_INTERNET) = 1; 307 end Internet_Protocol_Is_Supported; 308 309 function Internet_Stream_Is_Supported 310 return POSIX.Options.Internet_Stream_Support is 311 begin 312 return sysconf (SC_PII_INTERNET_STREAM) = 1; 313 end Internet_Stream_Is_Supported; 314 315 function ISO_OSI_Protocol_Is_Supported 316 return POSIX.Options.ISO_OSI_Protocol_Support is 317 begin 318 return sysconf (SC_PII_OSI) = 1; 319 end ISO_OSI_Protocol_Is_Supported; 320 321 function Network_Management_Is_Supported 322 return POSIX.Options.Network_Management_Support is 323 begin 324 return sysconf (SC_POSIX_PII_NET_SUPPORT) = 1; 325 end Network_Management_Is_Supported; 326 327 function OSI_Connectionless_Is_Supported 328 return POSIX.Options.OSI_Connectionless_Support is 329 begin 330 return sysconf (SC_PII_OSI_CLTS) = 1; 331 end OSI_Connectionless_Is_Supported; 332 333 function OSI_Connection_Is_Supported 334 return POSIX.Options.OSI_Connection_Support is 335 begin 336 return sysconf (SC_PII_OSI_COTS) = 1; 337 end OSI_Connection_Is_Supported; 338 339 function OSI_Minimal_Is_Supported 340 return POSIX.Options.OSI_Minimal_Support is 341 begin 342 return sysconf (SC_PII_OSI_M) = 1; 343 end OSI_Minimal_Is_Supported; 344 345 function Poll_Is_Supported 346 return POSIX.Options.Poll_Support is 347 begin 348 return sysconf (SC_POLL) = 1; 349 end Poll_Is_Supported; 350 351 function Select_Is_Supported 352 return POSIX.Options.Select_Support is 353 begin 354 return sysconf (SC_SELECT) = 1; 355 end Select_Is_Supported; 356 357 function Sockets_DNI_Is_Supported 358 return POSIX.Options.Sockets_DNI_Support is 359 begin 360 return sysconf (SC_PII_SOCKET) = 1; 361 end Sockets_DNI_Is_Supported; 362 363 function XTI_DNI_Is_Supported 364 return POSIX.Options.XTI_DNI_Support is 365 begin 366 return sysconf (SC_PII_XTI) = 1; 367 end XTI_DNI_Is_Supported; 368 369 function SIOVM is new Limit 370 (PL.Socket_IO_Vector_Maxima, SC_UIO_MAXIOV); 371 function Socket_IO_Vector_Maximum 372 return POSIX.Limits.Socket_IO_Vector_Maxima renames SIOVM; 373 374end POSIX.Configurable_System_Limits; 375