diff packages/compat/posix/current/src/misc.cxx @ 115:6ed91473a1cd ecos-sw-2000-08-21

Merge from eCos master repository on 2000-08-21-22:40:54-BST
author jlarmour
date Fri, 25 Aug 2000 17:32:38 +0000
parents
children 6bd9d475ed4b
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/compat/posix/current/src/misc.cxx
@@ -0,0 +1,320 @@
+//==========================================================================
+//
+//      misc.cxx
+//
+//      POSIX misc function implementations
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//                                                                          
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):           nickg
+// Contributors:        nickg
+// Date:                2000-07-18
+// Purpose:             POSIX misc function implementation
+// Description:         This file contains the implementation of miscellaneous POSIX
+//                      functions that do not belong elsewhere.
+//              
+//              
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <pkgconf/system.h>
+#include <pkgconf/hal.h>
+#include <pkgconf/kernel.h>
+#include <pkgconf/posix.h>
+
+#include <cyg/kernel/ktypes.h>         // base kernel types
+#include <cyg/infra/cyg_trac.h>        // tracing macros
+#include <cyg/infra/cyg_ass.h>         // assertion macros
+
+#include "pprivate.h"                   // POSIX private header
+
+#include <unistd.h>
+#include <sys/utsname.h>                // My header
+#include <string.h>                     // strcpy
+#include <limits.h>
+#include <time.h>
+
+// -------------------------------------------------------------------------
+// Supply some suitable values for constants that may not be present
+// in all configurations.
+
+#ifndef MQ_OPEN_MAX
+#define MQ_OPEN_MAX 0
+#endif
+#ifndef MQ_PRIO_MAX
+#define MQ_PRIO_MAX 0
+#endif
+
+// -------------------------------------------------------------------------
+
+#define __string(_x) #_x
+#define __xstring(_x) __string(_x)
+
+// -------------------------------------------------------------------------
+// utsname()
+
+__externC int uname( struct utsname *name )
+{
+    CYG_REPORT_FUNCTYPE( "returning %d" );
+
+    strcpy( name->sysname, "eCos" );
+    strcpy( name->nodename, "" );       // should use gethostname()
+    strcpy( name->release, __xstring( CYGNUM_KERNEL_VERSION_MAJOR ) );
+    strcpy( name->version, __xstring( CYGNUM_KERNEL_VERSION_MINOR ) );
+    strcpy( name->machine, "" );
+
+    CYG_REPORT_RETVAL(0);
+    return 0;
+}
+
+// -------------------------------------------------------------------------
+// sysconf()
+
+#define SC_CASE( _name, _val ) case _name: return _val
+
+__externC long sysconf( int name )
+{
+
+    switch( name )
+    {
+        SC_CASE( _SC_AIO_LISTIO_MAX,                    AIO_LISTIO_MAX );
+        SC_CASE( _SC_AIO_MAX,                           AIO_MAX );
+        SC_CASE( _SC_AIO_PRIO_DELTA_MAX,                AIO_PRIO_DELTA_MAX );
+        SC_CASE( _SC_ARG_MAX,                           ARG_MAX );
+        SC_CASE( _SC_CHILD_MAX,                         CHILD_MAX );
+        SC_CASE( _SC_DELAYTIMER_MAX,                    DELAYTIMER_MAX );
+        SC_CASE( _SC_GETGR_R_SIZE_MAX,                  0 );
+        SC_CASE( _SC_GETPW_R_SIZE_MAX,                  0 );
+        SC_CASE( _SC_LOGIN_NAME_MAX,                    LOGIN_NAME_MAX );
+        SC_CASE( _SC_MQ_OPEN_MAX,                       MQ_OPEN_MAX );
+        SC_CASE( _SC_MQ_PRIO_MAX,                       MQ_PRIO_MAX );
+        SC_CASE( _SC_NGROUPS_MAX,                       NGROUPS_MAX );
+        SC_CASE( _SC_OPEN_MAX,                          OPEN_MAX );
+        SC_CASE( _SC_PAGESIZE,                          PAGESIZE );
+        SC_CASE( _SC_RTSIG_MAX,                         RTSIG_MAX );
+        SC_CASE( _SC_SEM_NSEMS_MAX,                     SEM_NSEMS_MAX );
+        SC_CASE( _SC_SEM_VALUE_MAX,                     SEM_VALUE_MAX );
+        SC_CASE( _SC_SIGQUEUE_MAX,                      SIGQUEUE_MAX );
+        SC_CASE( _SC_STREAM_MAX,                        STREAM_MAX );
+        SC_CASE( _SC_THREAD_DESTRUCTOR_ITERATIONS,      PTHREAD_DESTRUCTOR_ITERATIONS );
+        SC_CASE( _SC_THREAD_KEYS_MAX,                   PTHREAD_KEYS_MAX );
+        SC_CASE( _SC_THREAD_STACK_MIN,                  PTHREAD_STACK_MIN );
+        SC_CASE( _SC_THREAD_THREADS_MAX,                PTHREAD_THREADS_MAX );
+        SC_CASE( _SC_TIMER_MAX,                         TIMER_MAX );
+        SC_CASE( _SC_TTY_NAME_MAX,                      TTY_NAME_MAX );
+        SC_CASE( _SC_TZNAME_MAX,                        TZNAME_MAX );
+        SC_CASE( _SC_VERSION,                           _POSIX_VERSION );
+
+    case _SC_CLK_TCK:
+    {
+        struct timespec ts;
+        ts.tv_sec = 1;
+        ts.tv_nsec = 0;
+        cyg_tick_count ticks = cyg_timespec_to_ticks( &ts );
+        return ticks;
+    }
+
+    case _SC_ASYNCHRONOUS_IO:
+    #ifdef _POSIX_ASYNCHRONOUS_IO
+        return 1;
+    #else
+        return 0;
+    #endif
+            
+    case _SC_FSYNC:
+    #ifdef _POSIX_FSYNC
+        return 1;
+    #else
+        return 0;
+    #endif
+                
+    case _SC_JOB_CONTROL:
+    #ifdef _POSIX_JOB_CONTROL
+        return 1;
+    #else
+        return 0;
+    #endif
+                    
+    case _SC_MAPPED_FILES:
+    #ifdef _POSIX_MAPPED_FILES
+        return 1;
+    #else
+        return 0;
+    #endif
+                        
+    case _SC_MEMLOCK:
+    #ifdef _POSIX_MEMLOCK
+        return 1;
+    #else
+        return 0;
+    #endif
+                            
+    case _SC_MEMLOCK_RANGE:
+    #ifdef _POSIX_MEMLOCK_RANGE
+        return 1;
+    #else
+        return 0        ;
+    #endif      
+                                
+    case _SC_MEMORY_PROTECTION:
+    #ifdef _POSIX_MEMORY_PROTECTION
+        return 1;
+    #else
+        return 0;
+    #endif
+            
+    case _SC_MESSAGE_PASSING:
+    #ifdef _POSIX_MESSAGE_PASSING
+        return 1;
+    #else
+        return 0;
+    #endif
+                
+    case _SC_PRIORITIZED_IO:
+    #ifdef _POSIX_PRIORITIZED_IO
+        return 1;
+    #else
+        return 0;
+    #endif
+                    
+    case _SC_PRIORITY_SCHEDULING:
+    #ifdef _POSIX_PRIORITY_SCHEDULING
+        return 1;
+    #else
+        return 0;
+    #endif
+                        
+    case _SC_REALTIME_SIGNALS:
+    #ifdef _POSIX_REALTIME_SIGNALS
+        return 1;
+    #else
+        return 0;
+    #endif
+                            
+    case _SC_SAVED_IDS:
+    #ifdef _POSIX_SAVED_IDS
+        return 1;
+    #else
+        return 0;
+    #endif
+                                
+    case _SC_SEMAPHORES:
+    #ifdef _POSIX_SEMAPHORES
+        return 1;
+    #else
+        return 0;
+    #endif
+                                    
+    case _SC_SHARED_MEMORY_OBJECTS:
+    #ifdef _POSIX_SHARED_MEMORY_OBJECTS
+        return 1;
+    #else
+        return 0;
+    #endif
+                                        
+    case _SC_SYNCHRONIZED_IO:
+    #ifdef _POSIX_SYNCHRONIZED_IO
+        return 1;
+    #else
+        return 0;
+    #endif
+                                            
+    case _SC_THREADS:
+    #ifdef _POSIX_THREADS
+        return 1;
+    #else
+        return 0;
+    #endif
+                                                
+    case _SC_THREAD_ATTR_STACKADDR:
+    #ifdef _POSIX_THREAD_ATTR_STACKADDR
+        return 1;
+    #else
+        return 0;
+    #endif
+                                                    
+    case _SC_THREAD_ATTR_STACKSIZE:
+    #ifdef _POSIX_THREAD_ATTR_STACKSIZE
+        return 1;
+    #else
+        return 0;
+    #endif
+                                                        
+    case _SC_THREAD_PRIO_INHERIT:
+    #ifdef _POSIX_THREAD_PRIO_INHERIT
+        return 1;
+    #else
+        return 0;
+    #endif
+                                                            
+    case _SC_THREAD_PRIO_PROTECT:
+    #ifdef _POSIX_THREAD_PRIO_PROTECT
+        return 1;
+    #else
+        return 0;
+    #endif
+                                                                
+    case _SC_THREAD_PRIORITY_SCHEDULING:
+    #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
+        return 1;
+    #else
+        return 0;
+    #endif
+                                                                    
+    case _SC_THREAD_PROCESS_SHARED:
+    #ifdef _POSIX_THREAD_PROCESS_SHARED
+        return 1;
+    #else
+        return 0;
+    #endif
+                                                                        
+    case _SC_THREAD_SAFE_FUNCTIONS:
+    #ifdef _POSIX_THREAD_SAFE_FUNCTIONS
+        return 1;
+    #else
+        return 0;
+    #endif
+                                                                            
+    case _SC_TIMERS:
+    #ifdef _POSIX_TIMERS
+        return 1;
+    #else
+        return 0;
+    #endif
+                                                                                
+
+    default:
+        errno = EINVAL;
+        return -1;
+    }
+}
+
+// -------------------------------------------------------------------------
+// EOF misc.cxx