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 2001/10/04 02:01:09 UTC
cvs commit: apr/file_io/netware pipe.c filepath.c
bnicholes 01/10/03 17:01:09
Added: file_io/netware pipe.c filepath.c
Log:
NetWare versions of pipe.c and filepath.c
Revision Changes Path
1.1 apr/file_io/netware/pipe.c
Index: pipe.c
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000-2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
#include <stdio.h>
#include <nks/fsio.h>
#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;
}
static apr_status_t pipeblock(apr_file_t *thepipe)
{
int err;
unsigned long flags;
#ifdef TBD
if (!(err = NXGetCtlInfo(thepipe->filedes, NX_CTL_FLAGS, &flags)))
{
flags &= ~NX_O_NONBLOCK;
err = NXSetCtlInfo(thepipe->filedes, NX_CTL_FLAGS, flags);
}
#endif
if (err)
return convert_error (err);
thepipe->blocking = BLK_ON;
return APR_SUCCESS;
}
static apr_status_t pipenonblock(apr_file_t *thepipe)
{
int err;
unsigned long flags;
#ifdef TBD
if (!(err = NXGetCtlInfo(thepipe->filedes, NX_CTL_FLAGS, &flags)))
{
flags |= NX_O_NONBLOCK;
err = NXSetCtlInfo(thepipe->filedes, NX_CTL_FLAGS, flags);
}
#endif
if (err)
return convert_error (err);
thepipe->blocking = BLK_OFF;
return APR_SUCCESS;
}
APR_DECLARE(apr_status_t) apr_file_pipe_timeout_set(apr_file_t *thepipe, apr_interval_time_t timeout)
{
if (thepipe->pipe == 1) {
thepipe->timeout = timeout;
if (timeout >= 0) {
if (thepipe->blocking != BLK_OFF) { /* blocking or unknown state */
return pipenonblock(thepipe);
}
}
else {
if (thepipe->blocking != BLK_ON) { /* non-blocking or unknown state */
return pipeblock(thepipe);
}
}
return APR_SUCCESS;
}
return APR_EINVAL;
}
APR_DECLARE(apr_status_t) apr_file_pipe_timeout_get(apr_file_t *thepipe, apr_interval_time_t *timeout)
{
if (thepipe->pipe == 1) {
*timeout = thepipe->timeout;
return APR_SUCCESS;
}
return APR_EINVAL;
}
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 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])))
{
(*in)->cntxt =
(*out)->cntxt = cont;
(*in)->filedes = filedes[0];
(*out)->filedes = filedes[1];
(*in)->pipe =
(*out)->pipe = 1;
(*out)->fname =
(*in)->fname = NULL;
(*in)->buffered =
(*out)->buffered = 0;
(*in)->blocking =
(*out)->blocking = BLK_ON;
(*in)->timeout =
(*out)->timeout = -1;
(*in)->ungetchar = -1;
(*in)->thlock =
(*out)->thlock = NULL;
}
else
{
if (filedes[0] != (NXHandle_t) -1)
NXClose(filedes[0]);
if (err)
return convert_error (err);
}
return APR_SUCCESS;
}
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;
}
1.1 apr/file_io/netware/filepath.c
Index: filepath.c
===================================================================
/* NetWare & Win32 have much in common with regards to file names (both are
* DOSish) so it makes sense to share some code
*/
#include "../win32/filepath.c"