renamed and cleaned up export header files to match linux convention
[lunaix-os.git] / lunaix-os / includes / lunaix / process.h
index faca28491a1719c8eeacdc268b2d2e579e7ef95d..a9f307c704a8688b521cccd8c1817cc39658cd11 100644 (file)
 #include <lunaix/types.h>
 #include <lunaix/spike.h>
 #include <lunaix/hart_state.h>
+#include <lunaix/usrscope.h>
+
+#include <usr/lunaix/wait.h>
+
 #include <stdint.h>
 
 
 #define PS_GrDT (PS_TERMNAT | PS_DESTROY)
 #define PS_Rn (PS_RUNNING | PS_CREATED)
 
-#define proc_terminated(proc) (((proc)->state) & PS_GrDT)
-#define proc_hanged(proc) (((proc)->state) & PS_BLOCKED)
-#define proc_runnable(proc) (!(proc)->state || !(((proc)->state) & ~PS_Rn))
+#define proc_terminated(proc) \
+            (!(proc) || ((proc)->state) & PS_GrDT)
+#define proc_hanged(proc) \
+            ((proc)  && ((proc)->state) & PS_BLOCKED)
+#define proc_runnable(proc) \
+            ((proc) && (!(proc)->state || !(((proc)->state) & ~PS_Rn)))
 
 
 #define TH_DETACHED         0b00000001
@@ -110,7 +117,7 @@ struct thread
 {
     /*
         Any change to *critical section*, including layout, size
-        must be reflected in arch/x86/interrupt.S.inc to avoid
+        must be reflected in arch/<arch>/interrupt.S.inc to avoid
         disaster!
      */
     struct
@@ -164,6 +171,14 @@ struct proc_info
         pid_t pgid;
         time_t created;
 
+        uid_t euid;
+        uid_t suid;
+        gid_t egid;
+        gid_t sgid;
+
+        struct user_scope uscope;
+        struct v_dnode* root;
+
         int state;
         int exit_code;
     };
@@ -367,6 +382,7 @@ spawn_kthread(ptr_t entry) {
     
     assert(th);
     start_thread(th, entry);
+    detach_thread(th);
 }
 
 void 
@@ -459,5 +475,40 @@ thread_stats_user_elapse(struct thread* thread)
     return stats->last_entry - stats->last_leave;
 }
 
+static inline struct user_scope*
+current_user_scope()
+{
+    return &__current->uscope;
+}
+
+static inline uid_t must_inline
+current_euid()
+{
+    return __current->euid;
+}
+
+static inline bool must_inline
+current_is_root()
+{
+    return current_euid() == 0;
+}
+
+static inline gid_t must_inline
+current_egid()
+{
+    return __current->egid;
+}
+
+static inline void must_inline
+current_set_egid(gid_t gid)
+{
+    __current->egid = gid;
+}
+
+static inline void must_inline
+current_set_euid(uid_t uid)
+{
+    __current->euid = uid;
+}
 
 #endif /* __LUNAIX_PROCESS_H */