You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by bn...@apache.org on 2002/03/05 20:48:55 UTC
cvs commit: apr/misc/netware aprlib.def
bnicholes 02/03/05 11:48:55
Modified: threadproc/netware proc.c
file_io/netware pipe.c
include/arch/netware fileio.h
misc/netware aprlib.def
Log:
Second cut at fork/exec and pipe functionality on NetWare. Still a work in
progress.
Revision Changes Path
1.7 +57 -18 apr/threadproc/netware/proc.c
Index: proc.c
===================================================================
RCS file: /home/cvs/apr/threadproc/netware/proc.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- proc.c 29 Jan 2002 00:36:22 -0000 1.6
+++ proc.c 5 Mar 2002 19:48:54 -0000 1.7
@@ -333,36 +333,65 @@
else
envSpec.esEnv = NULL;
+ envSpec.esStdin.ssType = NX_OBJ_FIFO;
+ envSpec.esStdin.ssHandle = -1;
+ envSpec.esStdin.ssPathCtx = 0;
if (attr->child_in) {
- envSpec.esStdin.ssType = NX_OBJ_FIFO;
- envSpec.esStdin.ssHandle = attr->child_in->filedes;
+ apr_pool_cleanup_kill(apr_file_pool_get(attr->child_in),
+ attr->child_in, apr_netware_pipe_cleanup);
+ envSpec.esStdin.ssPath = attr->child_in->fname;
+ apr_file_close(attr->child_in);
+ if (attr->parent_in) {
+ apr_file_close(attr->parent_in);
+ }
+ }
+ else if (attr->parent_in) {
+ envSpec.esStdin.ssPath = attr->parent_in->fname;
+ apr_file_close(attr->parent_in);
}
else {
- envSpec.esStdin.ssType = NX_OBJ_DEFAULT;
- envSpec.esStdin.ssHandle = -1;
+ envSpec.esStdin.ssPath = NULL;
}
- envSpec.esStdin.ssPathCtx = NULL;
- envSpec.esStdin.ssPath = NULL;
+
+ envSpec.esStdout.ssType = NX_OBJ_FIFO;
+ envSpec.esStdout.ssHandle = -1;
+ envSpec.esStdout.ssPathCtx = 0;
if (attr->child_out) {
- envSpec.esStdout.ssType = NX_OBJ_FIFO;
- envSpec.esStdout.ssHandle = attr->child_out->filedes;
+ apr_pool_cleanup_kill(apr_file_pool_get(attr->child_out),
+ attr->child_out, apr_netware_pipe_cleanup);
+ envSpec.esStdout.ssPath = attr->child_out->fname;
+ apr_file_close(attr->child_out);
+ if (attr->parent_out) {
+ apr_file_close(attr->parent_out);
+ }
+ }
+ else if (attr->parent_out) {
+ envSpec.esStdout.ssPath = attr->parent_out->fname;
+ apr_file_close(attr->parent_out);
}
else {
- envSpec.esStdout.ssType = NX_OBJ_DEFAULT;
- envSpec.esStdout.ssHandle = -1;
+ envSpec.esStdout.ssPath = NULL;
}
- envSpec.esStdout.ssPathCtx = NULL;
- envSpec.esStdout.ssPath = NULL;
+
+ envSpec.esStderr.ssType = NX_OBJ_FIFO;
+ envSpec.esStderr.ssHandle = -1;
+ envSpec.esStderr.ssPathCtx = 0;
if (attr->child_err) {
- envSpec.esStderr.ssType = NX_OBJ_FIFO;
- envSpec.esStderr.ssHandle = attr->child_err->filedes;
+ apr_pool_cleanup_kill(apr_file_pool_get(attr->child_err),
+ attr->child_err, apr_netware_pipe_cleanup);
+ envSpec.esStderr.ssPath = attr->child_err->fname;
+ apr_file_close(attr->child_err);
+ if (attr->parent_err) {
+ apr_file_close(attr->parent_err);
+ }
+ }
+ else if (attr->parent_err) {
+ envSpec.esStderr.ssPath = attr->parent_err->fname;
+ apr_file_close(attr->parent_err);
}
else {
- envSpec.esStderr.ssType = NX_OBJ_DEFAULT;
- envSpec.esStderr.ssHandle = -1;
+ envSpec.esStderr.ssPath = NULL;
}
- envSpec.esStderr.ssPathCtx = NULL;
- envSpec.esStderr.ssPath = NULL;
if (attr->detached) {
flags = NX_VM_CREATE_DETACHED;
@@ -376,6 +405,16 @@
}
else {
newproc->pid = newVM;
+ if (attr->parent_out) {
+ attr->parent_out->filedes = pipe_open(attr->parent_out->fname, O_WRONLY);
+ }
+ if (attr->parent_in) {
+ attr->parent_in->filedes = pipe_open(attr->parent_in->fname, O_RDONLY);
+ }
+ if (attr->parent_err) {
+ attr->parent_err->filedes = pipe_open(attr->parent_err->fname, O_RDONLY);
+ }
+
apr_pool_cleanup_register(cont, (void *)newproc, apr_netware_proc_cleanup,
apr_pool_cleanup_null);
}
1.5 +19 -60 apr/file_io/netware/pipe.c
Index: pipe.c
===================================================================
RCS file: /home/cvs/apr/file_io/netware/pipe.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- pipe.c 8 Feb 2002 19:13:43 -0000 1.4
+++ pipe.c 5 Mar 2002 19:48:55 -0000 1.5
@@ -59,27 +59,13 @@
#include "fileio.h"
#include "apr_strings.h"
-static int convert_error (int err)
-{
- switch (err)
- {
- default : break;
- case NX_EINVAL: return APR_EINVAL;
- case NX_EBADF: return APR_EBADF;
- case NX_ENOENT: return APR_ENOENT;
- case NX_ENAMETOOLONG:return APR_ENAMETOOLONG;
- }
-
- return err;
-}
-
apr_status_t apr_netware_pipe_cleanup(void *thefile)
{
apr_file_t *file = thefile;
apr_status_t rv = APR_SUCCESS;
int rc;
- rc = NXClose(file->filedes);
+ rc = close(file->filedes);
if (rc == 0) {
file->filedes = -1;
if (file->thlock) {
@@ -93,31 +79,19 @@
return rv;
}
-#ifdef WAITING_FOR_UPDATE
-#ifndef NX_CTL_FLAGS
-#define NX_CTL_FLAGS 0x00000001
-int NXGetCtlInfo(NXHandle_t handle, unsigned long command, ...);
-int NXSetCtlInfo(NXHandle_t handle, unsigned long command, ...);
-#endif
-#endif
-
static apr_status_t pipeblock(apr_file_t *thepipe)
{
int err;
-#ifdef WAITING_FOR_UPDATE
unsigned long flags;
- if (!(err = NXGetCtlInfo(thepipe->filedes, NX_CTL_FLAGS, &flags)))
+ if (fcntl(thepipe->filedes, F_GETFL, &flags) != -1)
{
- flags &= ~NX_O_NONBLOCK;
- err = NXSetCtlInfo(thepipe->filedes, NX_CTL_FLAGS, flags);
+ flags &= ~FNDELAY;
+ fcntl(thepipe->filedes, F_SETFL, flags);
}
-#else
- err = NXIoSetBlockingState(thepipe->filedes, 1);
-#endif
- if (err)
- return convert_error (err);
+ if (errno)
+ return errno;
thepipe->blocking = BLK_ON;
return APR_SUCCESS;
@@ -126,20 +100,17 @@
static apr_status_t pipenonblock(apr_file_t *thepipe)
{
int err;
-#ifdef WAITING_FOR_UPDATE
unsigned long flags;
- if (!(err = NXGetCtlInfo(thepipe->filedes, NX_CTL_FLAGS, &flags)))
+ errno = 0;
+ if (fcntl(thepipe->filedes, F_GETFL, &flags) != -1)
{
- flags |= NX_O_NONBLOCK;
- err = NXSetCtlInfo(thepipe->filedes, NX_CTL_FLAGS, flags);
+ flags |= FNDELAY;
+ fcntl(thepipe->filedes, F_SETFL, flags);
}
-#else
- err = NXIoSetBlockingState(thepipe->filedes, 0);
-#endif
- if (err)
- return convert_error (err);
+ if (errno)
+ return errno;
thepipe->blocking = BLK_OFF;
return APR_SUCCESS;
@@ -176,14 +147,14 @@
APR_DECLARE(apr_status_t) apr_file_pipe_create(apr_file_t **in, apr_file_t **out, apr_pool_t *cont)
{
char tname[L_tmpnam+1];
- NXHandle_t filedes[2];
+ int filedes[2];
int err;
if (!tmpnam(tname))
return errno;
- if ( !(err = NXFifoOpen(0, tname, NX_O_RDONLY, 0, &filedes[0]))
- && !(err = NXFifoOpen(0, tname, NX_O_WRONLY, 0, &filedes[1])))
+ if ((filedes[0] = pipe_open(tname, O_RDONLY) != -1)
+ && (filedes[1] = pipe_open(tname, O_WRONLY) != -1))
{
(*in) = (apr_file_t *)apr_pcalloc(cont, sizeof(apr_file_t));
(*out) = (apr_file_t *)apr_pcalloc(cont, sizeof(apr_file_t));
@@ -208,12 +179,9 @@
}
else
{
- if (filedes[0] != (NXHandle_t) -1)
- NXClose(filedes[0]);
-
- if (err)
- return convert_error (err);
-
+ if (filedes[0] != -1)
+ close(filedes[0]);
+ return errno;
}
apr_pool_cleanup_register((*in)->cntxt, (void *)(*in), apr_netware_pipe_cleanup,
@@ -227,16 +195,7 @@
APR_DECLARE(apr_status_t) apr_file_namedpipe_create(const char *filename,
apr_fileperms_t perm, apr_pool_t *cont)
{
- mode_t mode = apr_unix_perms2mode(perm);
- NXHandle_t filedes;
- int err;
-
- err = NXFifoOpen(0, filename, mode, 0, &filedes);
-
- if (err)
- return convert_error (err);
-
- return APR_SUCCESS;
+ return APR_ENOTIMPL;
}
1.4 +1 -5 apr/include/arch/netware/fileio.h
Index: fileio.h
===================================================================
RCS file: /home/cvs/apr/include/arch/netware/fileio.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- fileio.h 26 Nov 2001 19:06:00 -0000 1.3
+++ fileio.h 5 Mar 2002 19:48:55 -0000 1.4
@@ -162,11 +162,7 @@
apr_status_t filepath_compare_drive(const char *path1, const char *path2, apr_pool_t *p);
apr_status_t apr_unix_file_cleanup(void *);
-
-//mode_t apr_unix_perms2mode(apr_fileperms_t perms);
-//apr_fileperms_t apr_unix_mode2perms(mode_t mode);
-//
-//int apr_mkstemp(char *template);
+apr_status_t apr_netware_pipe_cleanup(void *thefile);
#endif /* ! FILE_IO_H */
1.5 +0 -3 apr/misc/netware/aprlib.def
Index: aprlib.def
===================================================================
RCS file: /home/cvs/apr/misc/netware/aprlib.def,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- aprlib.def 8 Feb 2002 19:13:43 -0000 1.4
+++ aprlib.def 5 Mar 2002 19:48:55 -0000 1.5
@@ -1,6 +1,3 @@
MODULE LIBC.NLM
MODULE WS2_32.NLM
-IMPORT NXGetRandom
-IMPORT NXGetCtlInfo
-IMPORT NXSetCtlInfo
EXPORT @aprlib.imp