diff packages/compat/posix/current/src/misc.cxx @ 128:0c2b7be0d798 ecos-sw-2000-10-12

Merge from eCos master repository on 2000-10-12-08:46:24-BST
author jlarmour
date Thu, 12 Oct 2000 20:31:43 +0000
parents 6bd9d475ed4b
children 4c750ce71ae3
line wrap: on
line diff
--- a/packages/compat/posix/current/src/misc.cxx
+++ b/packages/compat/posix/current/src/misc.cxx
@@ -61,6 +61,10 @@
 #include <limits.h>
 #include <time.h>
 
+#include <cyg/kernel/sched.hxx>
+
+#include <cyg/kernel/sched.inl>
+
 // -------------------------------------------------------------------------
 // Supply some suitable values for constants that may not be present
 // in all configurations.
@@ -78,7 +82,7 @@
 #define __xstring(_x) __string(_x)
 
 // -------------------------------------------------------------------------
-// utsname()
+// uname()
 
 __externC int uname( struct utsname *name )
 {
@@ -316,5 +320,54 @@
     }
 }
 
+//==========================================================================
+// Some trivial compatibility functions.
+// These are merely present to permit existing code to be ported a little
+// more easily, and to provide adequate standards compatibility.
+
+__externC pid_t getpid    ( void ) { return 42; }
+__externC pid_t getppid   ( void ) { return 41; }
+__externC uid_t getuid    ( void ) { return 666; }
+__externC uid_t geteuid   ( void ) { return 666; }
+__externC gid_t getgid    ( void ) { return 88; }
+__externC gid_t getegid   ( void ) { return 88; }
+__externC int   setuid    ( uid_t uid ) { errno = EPERM; return -1; }
+__externC int   setgid    ( uid_t gid ) { errno = EPERM; return -1; }
+__externC int   getgroups ( int gidsetsize, gid_t grouplist[] ) { return 0; };
+__externC pid_t getpgrp   ( void ) { return 42; }
+__externC pid_t setsid    ( void ) { errno = EPERM; return -1; }
+__externC int   setpgid   ( pid_t pid, pid_t pgid ) { errno = ENOSYS; return -1; }
+
+//==========================================================================
+// Exports to other packages
+
+// -------------------------------------------------------------------------
+// POSIX API function entry
+
+__externC void cyg_posix_function_start()
+{
+    Cyg_Thread *self = Cyg_Scheduler::get_current_thread();
+
+    // Inhibit ASR delivery in this function until it returns.
+    
+    self->set_asr_inhibit();
+}
+
+// -------------------------------------------------------------------------
+
+__externC void cyg_posix_function_finish()
+{
+    Cyg_Thread *self = Cyg_Scheduler::get_current_thread();
+
+    // Re-allow ASR delivery.
+    
+    self->clear_asr_inhibit();
+
+    // After clearing the inhibit flag, blip the scheduler lock
+    // to get any pending ASRs delivered.
+    Cyg_Scheduler::lock();
+    Cyg_Scheduler::unlock();
+}
+
 // -------------------------------------------------------------------------
 // EOF misc.cxx