You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by co...@apache.org on 2005/10/18 17:16:47 UTC

svn commit: r326120 - in /apr/apr/trunk: file_io/os2/buffer.c file_io/os2/filedup.c file_io/os2/open.c file_io/os2/readwrite.c include/arch/os2/apr_arch_file_io.h

Author: colm
Date: Tue Oct 18 08:16:37 2005
New Revision: 326120

URL: http://svn.apache.org/viewcvs?rev=326120&view=rev
Log:
Initial implementation of the variable file-io buffer sizes functions on the
OS2 platform; entirely guesswork base, untested. 

Added:
    apr/apr/trunk/file_io/os2/buffer.c   (with props)
Modified:
    apr/apr/trunk/file_io/os2/filedup.c
    apr/apr/trunk/file_io/os2/open.c
    apr/apr/trunk/file_io/os2/readwrite.c
    apr/apr/trunk/include/arch/os2/apr_arch_file_io.h

Added: apr/apr/trunk/file_io/os2/buffer.c
URL: http://svn.apache.org/viewcvs/apr/apr/trunk/file_io/os2/buffer.c?rev=326120&view=auto
==============================================================================
--- apr/apr/trunk/file_io/os2/buffer.c (added)
+++ apr/apr/trunk/file_io/os2/buffer.c Tue Oct 18 08:16:37 2005
@@ -0,0 +1,59 @@
+/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * 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.
+ */
+
+#include "apr_arch_file_io.h"
+#include "apr_thread_mutex.h"
+
+APR_DECLARE(apr_status_t) apr_file_buffer_set(apr_file_t *file, 
+                                              char * buffer,
+                                              apr_size_t bufsize)
+{
+    apr_status_t rv;
+
+    apr_thread_mutex_lock(file->mutex);
+ 
+    if(file->buffered) {
+        /* Flush the existing buffer */
+        rv = apr_file_flush(file);
+        if (rv != APR_SUCCESS) {
+            apr_thread_mutex_unlock(file->mutex);
+            return rv;
+        }
+    }
+        
+    file->buffer = buffer;
+    file->bufsize = bufsize;
+    file->buffered = 1;
+    file->bufpos = 0;
+    file->direction = 0;
+    file->dataRead = 0;
+ 
+    if (file->bufsize == 0) {
+            /* Setting the buffer size to zero is equivalent to turning 
+             * buffering off. 
+             */
+            file->buffered = 0;
+    }
+    
+    apr_thread_mutex_unlock(file->mutex);
+
+    return APR_SUCCESS;
+}
+
+APR_DECLARE(apr_size_t) apr_file_buffer_size_get(apr_file_t *file)
+{
+    return file->bufsize;
+}

Propchange: apr/apr/trunk/file_io/os2/buffer.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: apr/apr/trunk/file_io/os2/filedup.c
URL: http://svn.apache.org/viewcvs/apr/apr/trunk/file_io/os2/filedup.c?rev=326120&r1=326119&r2=326120&view=diff
==============================================================================
--- apr/apr/trunk/file_io/os2/filedup.c (original)
+++ apr/apr/trunk/file_io/os2/filedup.c Tue Oct 18 08:16:37 2005
@@ -91,7 +91,8 @@
     (*new_file)->pool = p;
 
     if (old_file->buffered) {
-        (*new_file)->buffer = apr_palloc(p, APR_FILE_BUFSIZE);
+        (*new_file)->buffer = apr_palloc(p, old_file->bufsize);
+        (*new_file)->bufsize = old_file->bufsize;
 
         if (old_file->direction == 1) {
             memcpy((*new_file)->buffer, old_file->buffer, old_file->bufpos);

Modified: apr/apr/trunk/file_io/os2/open.c
URL: http://svn.apache.org/viewcvs/apr/apr/trunk/file_io/os2/open.c?rev=326120&r1=326119&r2=326120&view=diff
==============================================================================
--- apr/apr/trunk/file_io/os2/open.c (original)
+++ apr/apr/trunk/file_io/os2/open.c Tue Oct 18 08:16:37 2005
@@ -59,7 +59,8 @@
     dafile->buffered = (flag & APR_BUFFERED) > 0;
 
     if (dafile->buffered) {
-        dafile->buffer = apr_palloc(pool, APR_FILE_BUFSIZE);
+        dafile->buffer = apr_palloc(pool, APR_FILE_DEFAULT_BUFSIZE);
+        dafile->bufsize = APR_FILE_DEFAULT_BUFSIZE;
         rv = apr_thread_mutex_create(&dafile->mutex, 0, pool);
 
         if (rv)
@@ -193,7 +194,8 @@
     if ((*file)->buffered) {
         apr_status_t rv;
 
-        (*file)->buffer = apr_palloc(pool, APR_FILE_BUFSIZE);
+        (*file)->buffer = apr_palloc(pool, APR_FILE_DEFAULT_BUFSIZE);
+        (*file)->bufsize = APR_FILE_DEFAULT_BUFSIZE;
         rv = apr_thread_mutex_create(&(*file)->mutex, 0, pool);
 
         if (rv)

Modified: apr/apr/trunk/file_io/os2/readwrite.c
URL: http://svn.apache.org/viewcvs/apr/apr/trunk/file_io/os2/readwrite.c?rev=326120&r1=326119&r2=326120&view=diff
==============================================================================
--- apr/apr/trunk/file_io/os2/readwrite.c (original)
+++ apr/apr/trunk/file_io/os2/readwrite.c Tue Oct 18 08:16:37 2005
@@ -52,7 +52,7 @@
             if (thefile->bufpos >= thefile->dataRead) {
                 ULONG bytesread;
                 rc = DosRead(thefile->filedes, thefile->buffer,
-                             APR_FILE_BUFSIZE, &bytesread);
+                             thefile->bufsize, &bytesread);
 
                 if (bytesread == 0) {
                     if (rc == 0)
@@ -143,10 +143,10 @@
         }
 
         while (rc == 0 && size > 0) {
-            if (thefile->bufpos == APR_FILE_BUFSIZE)   // write buffer is full
+            if (thefile->bufpos == thefile->bufsize)   // write buffer is full
                 rc = apr_file_flush(thefile);
 
-            blocksize = size > APR_FILE_BUFSIZE - thefile->bufpos ? APR_FILE_BUFSIZE - thefile->bufpos : size;
+            blocksize = size > thefile->bufsize - thefile->bufpos ? thefile->bufsize - thefile->bufpos : size;
             memcpy(thefile->buffer + thefile->bufpos, pos, blocksize);
             thefile->bufpos += blocksize;
             pos += blocksize;

Modified: apr/apr/trunk/include/arch/os2/apr_arch_file_io.h
URL: http://svn.apache.org/viewcvs/apr/apr/trunk/include/arch/os2/apr_arch_file_io.h?rev=326120&r1=326119&r2=326120&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 Tue Oct 18 08:16:37 2005
@@ -31,7 +31,8 @@
  */
 #undef HAVE_MKSTEMP
 
-#define APR_FILE_BUFSIZE 4096
+#define APR_FILE_DEFAULT_BUFSIZE 4096
+#define APR_FILE_BUFSIZE APR_FILE_DEFAULT_BUFSIZE
 
 struct apr_file_t {
     apr_pool_t *pool;
@@ -48,7 +49,8 @@
 
     /* Stuff for buffered mode */
     char *buffer;
-    int bufpos;               // Read/Write position in buffer
+    apr_size_t bufsize;       // Read/Write position in buffer
+    apr_size_t bufpos;        // Read/Write position in buffer
     unsigned long dataRead;   // amount of valid data read into buffer
     int direction;            // buffer being used for 0 = read, 1 = write
     unsigned long filePtr;    // position in file of handle