c_src: update with new intern methods
[nit.git] / c_src / posix._ffi.c
diff --git a/c_src/posix._ffi.c b/c_src/posix._ffi.c
new file mode 100644 (file)
index 0000000..dc65dae
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+       Extern implementation of Nit module posix
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include "posix._ffi.h"
+#define String_to_cstring posix___String_to_cstring
+#define NativeString_to_s posix___NativeString_to_s
+#define new_Array_of_String posix___new_Array_of_String
+#define Array_of_String_add posix___Array_of_String_add
+#line 22 "lib/standard/posix.nit"
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <pwd.h>
+#include <grp.h>
+
+int posix___Sys_uid__assign___impl( Sys recv, int uid )
+{
+#line 30 "lib/standard/posix.nit"
+
+ return setuid(uid); }
+
+int posix___Sys_uid___impl( Sys recv )
+{
+#line 31 "lib/standard/posix.nit"
+
+ return getuid(); }
+
+int posix___Sys_gid__assign___impl( Sys recv, int gid )
+{
+#line 33 "lib/standard/posix.nit"
+
+ return setgid(gid); }
+
+int posix___Sys_gid___impl( Sys recv )
+{
+#line 34 "lib/standard/posix.nit"
+
+ return getgid(); }
+
+int posix___Sys_euid__assign___impl( Sys recv, int uid )
+{
+#line 36 "lib/standard/posix.nit"
+
+ return seteuid(uid); }
+
+int posix___Sys_euid___impl( Sys recv )
+{
+#line 37 "lib/standard/posix.nit"
+
+ return geteuid(); }
+
+int posix___Sys_egid__assign___impl( Sys recv, int gid )
+{
+#line 39 "lib/standard/posix.nit"
+
+ return setegid(gid); }
+
+int posix___Sys_egid___impl( Sys recv )
+{
+#line 40 "lib/standard/posix.nit"
+
+ return getegid(); }
+
+struct passwd* posix___new_Passwd_from_uid___impl( int uid )
+{
+#line 45 "lib/standard/posix.nit"
+
+ return getpwuid(uid); }
+
+struct passwd* posix___new_Passwd_from_name___impl( String name )
+{
+#line 48 "lib/standard/posix.nit"
+
+ return getpwnam( String_to_cstring(name) ); }
+
+String posix___Passwd_name___impl( struct passwd* recv )
+{
+#line 51 "lib/standard/posix.nit"
+
+ return NativeString_to_s(recv->pw_name); }
+
+String posix___Passwd_passwd___impl( struct passwd* recv )
+{
+#line 54 "lib/standard/posix.nit"
+
+ return NativeString_to_s(recv->pw_passwd); }
+
+int posix___Passwd_uid___impl( struct passwd* recv )
+{
+#line 57 "lib/standard/posix.nit"
+
+ return recv->pw_uid; }
+
+int posix___Passwd_gid___impl( struct passwd* recv )
+{
+#line 60 "lib/standard/posix.nit"
+
+ return recv->pw_gid; }
+
+String posix___Passwd_dir___impl( struct passwd* recv )
+{
+#line 63 "lib/standard/posix.nit"
+
+ return NativeString_to_s(recv->pw_dir); }
+
+String posix___Passwd_shell___impl( struct passwd* recv )
+{
+#line 66 "lib/standard/posix.nit"
+
+ return NativeString_to_s(recv->pw_shell); }
+
+struct group* posix___new_Group_from_gid___impl( int gid )
+{
+#line 70 "lib/standard/posix.nit"
+
+ return getgrgid(gid); }
+
+struct group* posix___new_Group_from_name___impl( String name )
+{
+#line 71 "lib/standard/posix.nit"
+
+ return getgrnam( String_to_cstring(name) ); }
+
+String posix___Group_name___impl( struct group* recv )
+{
+#line 73 "lib/standard/posix.nit"
+
+ return NativeString_to_s(recv->gr_name); }
+
+String posix___Group_passwd___impl( struct group* recv )
+{
+#line 74 "lib/standard/posix.nit"
+
+ return NativeString_to_s(recv->gr_passwd); }
+
+int posix___Group_gid___impl( struct group* recv )
+{
+#line 75 "lib/standard/posix.nit"
+
+ return recv->gr_gid; }
+
+Array_of_String posix___Group_mem___impl( struct group* recv )
+{
+#line 76 "lib/standard/posix.nit"
+
+
+               char **mem;
+               int m;
+               Array_of_String ret;
+
+               mem = recv->gr_mem;
+               ret = new_Array_of_String();
+
+               for (m = 0; mem[m] != NULL; m++)
+                       Array_of_String_add(ret, NativeString_to_s(mem[m]));
+
+               return ret;
+       }