You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2011/04/27 09:27:11 UTC

svn commit: r1097021 - in /commons/sandbox/runtime/trunk/src/main/native: include/acr/iodefs.h os/unix/arch_opts.h os/unix/util.c

Author: mturk
Date: Wed Apr 27 07:27:10 2011
New Revision: 1097021

URL: http://svn.apache.org/viewvc?rev=1097021&view=rev
Log:
Add iodefs header

Added:
    commons/sandbox/runtime/trunk/src/main/native/include/acr/iodefs.h   (with props)
Modified:
    commons/sandbox/runtime/trunk/src/main/native/os/unix/arch_opts.h
    commons/sandbox/runtime/trunk/src/main/native/os/unix/util.c

Added: commons/sandbox/runtime/trunk/src/main/native/include/acr/iodefs.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr/iodefs.h?rev=1097021&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr/iodefs.h (added)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr/iodefs.h Wed Apr 27 07:27:10 2011
@@ -0,0 +1,33 @@
+/* Copyright (c) 2011 The MyoMake Project <http://www.myomake.org>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _ACR_IODEFS_H_
+#define _ACR_IODEFS_H_
+
+#include "acr/stdtypes.h"
+
+/** PipeIoMode flags
+ */
+#define ACR_PIPE_FULL_BLOCK     1
+#define ACR_PIPE_FULL_NONBLOCK  2
+#define ACR_PIPE_READ_BLOCK     3
+#define ACR_PIPE_WRITE_BLOCK    4
+
+#define ACR_PIPE_MODE_MASK      0x000F
+#define ACR_PIPE_NOINHERIT      0x0010
+
+
+#endif /* _ACR_IODEFS_H */

Propchange: commons/sandbox/runtime/trunk/src/main/native/include/acr/iodefs.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/arch_opts.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/arch_opts.h?rev=1097021&r1=1097020&r2=1097021&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/arch_opts.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/arch_opts.h Wed Apr 27 07:27:10 2011
@@ -74,4 +74,11 @@ ACR_INLINE(ssize_t) r_write(int fd, cons
     return w;
 }
 
+int     AcrNonblock(int fd, int on);
+int     AcrCloseOnExec(int fd, int on);
+int     AcrWaitIO(int fd, int timeout, int events);
+int     AcrNullPipe(int flags, int fd);
+int     AcrPipePair(int pd[2], int flags);
+
+
 #endif /* _ACR_ARCH_OPTS_H_ */

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/util.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/util.c?rev=1097021&r1=1097020&r2=1097021&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/util.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/util.c Wed Apr 27 07:27:10 2011
@@ -16,7 +16,9 @@
 
 #include "acr/error.h"
 #include "acr/memory.h"
+#include "acr/iodefs.h"
 #include "acr/port.h"
+#include "arch_opts.h"
 #include <poll.h>
 
 int
@@ -135,3 +137,77 @@ AcrWaitIO(int fd, int timeout, int event
     else
         return ACR_EPIPE;
 }
+
+int
+AcrNullPipe(int flags, int fd)
+{
+    int nd;
+    int saved_errno = 0;
+
+    if ((nd = open("/dev/null", flags)) == -1)
+        return -1;
+    FD_ABOVE_STDFILENO(nd);
+    if (nd == -1)
+        return -1;
+    if (fd == -1)
+        return nd;
+    if ((fd = dup2(nd, fd)) == -1)
+        saved_errno = errno;
+    close(nd);
+    if (saved_errno)
+        errno = saved_errno;
+    return fd;
+}
+
+int
+AcrPipePair(int pd[2], int flags)
+{
+    int rc = 0;
+
+#if HAVE_PIPE2
+    int pf = 0;
+
+    if (flags == ACR_PIPE_FULL_NONBLOCK)
+        pf |= O_NONBLOCK;
+    if (pipe2(pd, pf) == -1)
+        return ACR_GET_OS_ERROR();
+    if (flags == ACR_PIPE_WRITE_BLOCK) {
+        if ((rc = AcrNonblock(pd[0], 1)))
+            goto finally;
+    }
+    if (flags == ACR_PIPE_READ_BLOCK) {
+        if ((rc = AcrNonblock(pd[1], 1)))
+            goto finally;
+    }
+#else
+    if (pipe(pd) == -1)
+        return ACR_GET_OS_ERROR();
+    if (flags == ACR_PIPE_WRITE_BLOCK ||
+        flags == ACR_PIPE_FULL_NONBLOCK) {
+        if ((rc = AcrNonblock(pd[0], 1)))
+            goto finally;
+        }
+        if (flags == ACR_PIPE_READ_BLOCK ||
+            flags == ACR_PIPE_FULL_NONBLOCK) {
+            if ((rc = AcrNonblock(pd[1], 1)))
+                goto finally;
+        }
+#endif
+    FD_ABOVE_STDFILENO(pd[0]);
+    if (pd[0] == -1) {
+        rc = ACR_GET_OS_ERROR();
+        goto finally;
+    }
+    FD_ABOVE_STDFILENO(pd[1]);
+    if (pd[1] == -1) {
+        rc = ACR_GET_OS_ERROR();
+        goto finally;
+    }
+
+    return 0;
+finally:
+    s_close(pd[0]);
+    s_close(pd[1]);
+
+    return rc;
+}