You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by bj...@apache.org on 2010/04/04 15:10:35 UTC
svn commit: r930686 - in /apr/apr/trunk: file_io/os2/filedup.c
file_io/os2/open.c file_io/os2/pipe.c file_io/os2/readwrite.c
include/arch/os2/apr_arch_file_io.h
Author: bjh
Date: Sun Apr 4 13:10:34 2010
New Revision: 930686
URL: http://svn.apache.org/viewvc?rev=930686&view=rev
Log:
OS/2: Do a proper implementation of apr_file_ungetc().
Modified:
apr/apr/trunk/file_io/os2/filedup.c
apr/apr/trunk/file_io/os2/open.c
apr/apr/trunk/file_io/os2/pipe.c
apr/apr/trunk/file_io/os2/readwrite.c
apr/apr/trunk/include/arch/os2/apr_arch_file_io.h
Modified: apr/apr/trunk/file_io/os2/filedup.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/file_io/os2/filedup.c?rev=930686&r1=930685&r2=930686&view=diff
==============================================================================
--- apr/apr/trunk/file_io/os2/filedup.c (original)
+++ apr/apr/trunk/file_io/os2/filedup.c Sun Apr 4 13:10:34 2010
@@ -49,6 +49,7 @@ static apr_status_t file_dup(apr_file_t
dup_file->buffered = old_file->buffered;
dup_file->isopen = old_file->isopen;
dup_file->flags = old_file->flags & ~APR_INHERIT;
+ dup_file->ungetchar = old_file->ungetchar;
/* TODO - dup pipes correctly */
dup_file->pipe = old_file->pipe;
Modified: apr/apr/trunk/file_io/os2/open.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/file_io/os2/open.c?rev=930686&r1=930685&r2=930686&view=diff
==============================================================================
--- apr/apr/trunk/file_io/os2/open.c (original)
+++ apr/apr/trunk/file_io/os2/open.c Sun Apr 4 13:10:34 2010
@@ -44,6 +44,7 @@ APR_DECLARE(apr_status_t) apr_file_open(
dafile->buffer = NULL;
dafile->flags = flag;
dafile->blocking = BLK_ON;
+ dafile->ungetchar = -1;
if ((flag & APR_FOPEN_READ) && (flag & APR_FOPEN_WRITE)) {
mflags |= OPEN_ACCESS_READWRITE;
@@ -199,6 +200,7 @@ APR_DECLARE(apr_status_t) apr_os_file_pu
(*file)->flags = flags;
(*file)->pipe = FALSE;
(*file)->buffered = (flags & APR_FOPEN_BUFFERED) > 0;
+ (*file)->ungetchar = -1;
if ((*file)->buffered) {
apr_status_t rv;
Modified: apr/apr/trunk/file_io/os2/pipe.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/file_io/os2/pipe.c?rev=930686&r1=930685&r2=930686&view=diff
==============================================================================
--- apr/apr/trunk/file_io/os2/pipe.c (original)
+++ apr/apr/trunk/file_io/os2/pipe.c Sun Apr 4 13:10:34 2010
@@ -85,6 +85,7 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
(*in)->pipe = 1;
(*in)->timeout = -1;
(*in)->blocking = BLK_ON;
+ (*in)->ungetchar = -1;
apr_pool_cleanup_register(pool, *in, apr_file_cleanup, apr_pool_cleanup_null);
(*out) = (apr_file_t *)apr_palloc(pool, sizeof(apr_file_t));
@@ -97,6 +98,7 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
(*out)->pipe = 1;
(*out)->timeout = -1;
(*out)->blocking = BLK_ON;
+ (*out)->ungetchar = -1;
apr_pool_cleanup_register(pool, *out, apr_file_cleanup, apr_pool_cleanup_null);
return APR_SUCCESS;
@@ -186,6 +188,7 @@ APR_DECLARE(apr_status_t) apr_os_pipe_pu
(*file)->pipe = 1;
(*file)->blocking = BLK_UNKNOWN; /* app needs to make a timeout call */
(*file)->timeout = -1;
+ (*file)->ungetchar = -1;
(*file)->filedes = *thefile;
if (register_cleanup) {
Modified: apr/apr/trunk/file_io/os2/readwrite.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/file_io/os2/readwrite.c?rev=930686&r1=930685&r2=930686&view=diff
==============================================================================
--- apr/apr/trunk/file_io/os2/readwrite.c (original)
+++ apr/apr/trunk/file_io/os2/readwrite.c Sun Apr 4 13:10:34 2010
@@ -53,6 +53,13 @@ APR_DECLARE(apr_status_t) apr_file_read(
return APR_EBADF;
}
+ if (thefile->ungetchar != -1 && req_nbytes >= 1) {
+ *(char *)buf = (char)thefile->ungetchar;
+ (char *)buf++;
+ (*nbytes)--;
+ thefile->ungetchar = -1;
+ }
+
if (thefile->buffered) {
char *pos = (char *)buf;
ULONG blocksize;
@@ -249,8 +256,8 @@ APR_DECLARE(apr_status_t) apr_file_putc(
APR_DECLARE(apr_status_t) apr_file_ungetc(char ch, apr_file_t *thefile)
{
- apr_off_t offset = -1;
- return apr_file_seek(thefile, APR_CUR, &offset);
+ thefile->ungetchar = (unsigned char)ch;
+ return APR_SUCCESS;
}
Modified: apr/apr/trunk/include/arch/os2/apr_arch_file_io.h
URL: http://svn.apache.org/viewvc/apr/apr/trunk/include/arch/os2/apr_arch_file_io.h?rev=930686&r1=930685&r2=930686&view=diff
==============================================================================
--- apr/apr/trunk/include/arch/os2/apr_arch_file_io.h (original)
+++ apr/apr/trunk/include/arch/os2/apr_arch_file_io.h Sun Apr 4 13:10:34 2010
@@ -55,6 +55,8 @@ struct apr_file_t {
int direction; // buffer being used for 0 = read, 1 = write
unsigned long filePtr; // position in file of handle
apr_thread_mutex_t *mutex;// mutex semaphore, must be owned to access the above fields
+
+ int ungetchar;
};
struct apr_dir_t {