summaryrefslogtreecommitdiffstats
path: root/otherlibs/unix/access.c
diff options
context:
space:
mode:
Diffstat (limited to 'otherlibs/unix/access.c')
-rw-r--r--otherlibs/unix/access.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/otherlibs/unix/access.c b/otherlibs/unix/access.c
new file mode 100644
index 000000000..d23ee68b6
--- /dev/null
+++ b/otherlibs/unix/access.c
@@ -0,0 +1,30 @@
+#include <mlvalues.h>
+#include <alloc.h>
+#include "unix.h"
+
+#ifdef HAS_UNISTD
+#include <unistd.h>
+#else
+#include <sys/file.h>
+#ifndef R_OK
+#define R_OK 4/* test for read permission */
+#define W_OK 2/* test for write permission */
+#define X_OK 1/* test for execute (search) permission */
+#define F_OK 0/* test for presence of file */
+#endif
+#endif
+
+static int access_permission_table[] = {
+ R_OK, W_OK, X_OK, F_OK
+};
+
+value unix_access(path, perms) /* ML */
+ value path, perms;
+{
+ int ret;
+ ret = access(String_val(path),
+ convert_flag_list(perms, access_permission_table));
+ if (ret == -1)
+ uerror("access", path);
+ return Val_unit;
+}