Put X11 and EGL into the kernel leaving ES 2.0 only in driver
[cilux] / src / platform / linux / cilux.c
index 2c9e301..fa07879 100644 (file)
@@ -1,66 +1,78 @@
 
+/* -------------------------------------------------------------------------- */
+
 #include <kernelplat.h>
 #include <container.h>
 #include <version.h>
 
 /* -------------------------------------------------------------------------- */
 
+static void cilux_terminate(void);
 static void re_exec_as_other();
 
 /* -------------------------------------------------------------------------- */
 
 int main(int argc, char* argv[])
 {
-       c_init(0, cilux_version, cilux_ciux, 0);
-       re_exec_as_other();
-       c_run(0);
+    c_init(cilux_version, cilux_ciux, cilux_terminate);
+
+    re_exec_as_other();
+    c_run(0);
 
-       return 0;
+    return 0;
 }
 
+/* -------------------------------------------------------------------------- */
+
 void re_exec_as_other()
 {
-       char* other="other";
-       uid_t uid=0;
-       gid_t gid=0;
-       if(getuid()==0){
-               struct passwd* pw=getpwnam(other);
-               if(!pw){ printf("fail: getpwnam(\"%s\");\n", other); exit(1); }
-               uid=pw->pw_uid;
-               gid=pw->pw_gid;
-       }
-
-       pid_t pid=fork();
-       switch(pid){
-               case 0:
-                       break;
-               case -1:
-                       printf("Failed to fork\n");
-                       exit(1);
-               default:
-                       printf("pid %d\n", pid);
-                       exit(0);
-       }
-       setsid();
-
-       if(getuid()==0){
-               if(setgroups(0,0)== -1){
-                       printf("fail: setgroups(0,0)\n");
-                       exit(1);
-               }
-               if(setgid(gid)== -1){
-                       printf("fail: setgid(%d)\n", gid);
-                       exit(1);
-               }
-               if(initgroups(other, gid)== -1){
-                       printf("fail: initgroups(\"%s\",%d)\n", other, gid);
-                       exit(1);
-               }
-               if(setuid(uid)== -1){
-                       printf("fail: setuid(%d)\n", uid);
-                       exit(1);
-               }
-       }
+    char* other="other";
+    uid_t uid=0;
+    gid_t gid=0;
+    if(getuid()==0){
+        struct passwd* pw=getpwnam(other);
+        if(!pw){ printf("fail: getpwnam(\"%s\");\n", other); exit(1); }
+        uid=pw->pw_uid;
+        gid=pw->pw_gid;
+    }
+
+    pid_t pid=fork();
+    switch(pid){
+        case 0:
+            break;
+        case -1:
+            printf("Failed to fork\n");
+            exit(1);
+        default:
+            printf("pid %d\n", pid);
+            exit(0);
+    }
+    setsid();
+
+    if(getuid()==0){
+        if(setgroups(0,0)== -1){
+            printf("fail: setgroups(0,0)\n");
+            exit(1);
+        }
+        if(setgid(gid)== -1){
+            printf("fail: setgid(%d)\n", gid);
+            exit(1);
+        }
+        if(initgroups(other, gid)== -1){
+            printf("fail: initgroups(\"%s\",%d)\n", other, gid);
+            exit(1);
+        }
+        if(setuid(uid)== -1){
+            printf("fail: setuid(%d)\n", uid);
+            exit(1);
+        }
+    }
+}
+
+void cilux_terminate(void)
+{
+    c_running(0);
+    exit(0);
 }
 
 /* -------------------------------------------------------------------------- */