Revert r1862435, r1862071 per veto from ivan

msgid: <CABw-3YcK0qbeYWDOwE684XtBj3rCT2CuVOBWWqda4gMtRyRJEw@mail.gmail.com>


git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1866019 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES b/CHANGES
index 23f91dc..07f7d9e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -5,13 +5,6 @@
 
   *) apr_thread_exit() is now a void function.  [Joe Orton]
 
-  *) apr_dir_read(): The returned finfo->name field is now duplicated
-     into the pool for all implementations.  [Joe Orton]
-
-  *) apr_dir_pread(): Add function which restricts per-read memory
-     consumption to a different pool to the apr_dir_t object.
-     [Joe Orton]
-
   *) apr_crypto_openssl: Remove unused link to the ssl library.
      [Graham Leggett]
 
diff --git a/file_io/os2/dir.c b/file_io/os2/dir.c
index c26f39d..f1554b6 100644
--- a/file_io/os2/dir.c
+++ b/file_io/os2/dir.c
@@ -79,28 +79,24 @@
     return APR_FROM_OS_ERROR(rv);
 } 
 
+
+
 APR_DECLARE(apr_status_t) apr_dir_read(apr_finfo_t *finfo, apr_int32_t wanted,
                                        apr_dir_t *thedir)
 {
-    return apr_dir_pread(finfo, wanted, thedir, thedir->pool);
-}
-
-APR_DECLARE(apr_status_t) apr_dir_pread(apr_finfo_t *finfo, apr_int32_t wanted,
-                                        apr_dir_t *thedir, apr_pool_t *pool)
-{
     int rv;
     ULONG entries = 1;
     
     if (thedir->handle == 0) {
         thedir->handle = HDIR_CREATE;
-        rv = DosFindFirst(apr_pstrcat(pool, thedir->dirname, "/*", NULL), &thedir->handle, 
+        rv = DosFindFirst(apr_pstrcat(thedir->pool, thedir->dirname, "/*", NULL), &thedir->handle, 
                           FILE_ARCHIVED|FILE_DIRECTORY|FILE_SYSTEM|FILE_HIDDEN|FILE_READONLY, 
                           &thedir->entry, sizeof(thedir->entry), &entries, FIL_STANDARD);
     } else {
         rv = DosFindNext(thedir->handle, &thedir->entry, sizeof(thedir->entry), &entries);
     }
 
-    finfo->pool = pool;
+    finfo->pool = thedir->pool;
     finfo->fname = NULL;
     finfo->valid = 0;
 
@@ -122,7 +118,7 @@
         apr_os2_time_to_apr_time(&finfo->ctime, thedir->entry.fdateCreation,
                                  thedir->entry.ftimeCreation);
 
-        finfo->name = apr_pstrdup(pool, thedir->entry.achName);
+        finfo->name = thedir->entry.achName;
         finfo->valid = APR_FINFO_NAME | APR_FINFO_MTIME | APR_FINFO_ATIME |
             APR_FINFO_CTIME | APR_FINFO_TYPE | APR_FINFO_SIZE |
             APR_FINFO_CSIZE;
diff --git a/file_io/unix/dir.c b/file_io/unix/dir.c
index 5a17b86..d9b344f 100644
--- a/file_io/unix/dir.c
+++ b/file_io/unix/dir.c
@@ -142,12 +142,6 @@
 apr_status_t apr_dir_read(apr_finfo_t *finfo, apr_int32_t wanted,
                           apr_dir_t *thedir)
 {
-    return apr_dir_pread(finfo, wanted, thedir, thedir->pool);
-}
-
-apr_status_t apr_dir_pread(apr_finfo_t *finfo, apr_int32_t wanted,
-                           apr_dir_t *thedir, apr_pool_t *pool)
-{
     apr_status_t ret = 0;
 #ifdef DIRENT_TYPE
     apr_filetype_e type;
@@ -257,7 +251,7 @@
         apr_cpystrn(end, thedir->entry->d_name, 
                     sizeof fspec - (end - fspec));
 
-        ret = apr_stat(finfo, fspec, APR_FINFO_LINK | wanted, pool);
+        ret = apr_stat(finfo, fspec, APR_FINFO_LINK | wanted, thedir->pool);
         /* We passed a stack name that will disappear */
         finfo->fname = NULL;
     }
@@ -269,7 +263,7 @@
         /* We don't bail because we fail to stat, when we are only -required-
          * to readdir... but the result will be APR_INCOMPLETE
          */
-        finfo->pool = pool;
+        finfo->pool = thedir->pool;
         finfo->valid = 0;
 #ifdef DIRENT_TYPE
         if (type != APR_UNKFILE) {
@@ -285,7 +279,7 @@
 #endif
     }
 
-    finfo->name = apr_pstrdup(pool, thedir->entry->d_name);
+    finfo->name = apr_pstrdup(thedir->pool, thedir->entry->d_name);
     finfo->valid |= APR_FINFO_NAME;
 
     if (wanted)
diff --git a/file_io/win32/dir.c b/file_io/win32/dir.c
index b02c9cd..f44bceb 100644
--- a/file_io/win32/dir.c
+++ b/file_io/win32/dir.c
@@ -91,12 +91,6 @@
 APR_DECLARE(apr_status_t) apr_dir_read(apr_finfo_t *finfo, apr_int32_t wanted,
                                        apr_dir_t *thedir)
 {
-    return apr_dir_pread(finfo, wanted, thedir, thedir->pool);
-}
-
-APR_DECLARE(apr_status_t) apr_dir_pread(apr_finfo_t *finfo, apr_int32_t wanted,
-                                        apr_dir_t *thedir, apr_pool_t *pool)
-{
     apr_status_t rv;
     char *fname;
     apr_wchar_t wdirname[APR_PATH_MAX];
@@ -152,11 +146,11 @@
     if ((rv = unicode_to_utf8_path(thedir->name, APR_FILE_MAX * 3 + 1, 
                                    thedir->entry->cFileName)))
         return rv;
-    fname = apr_pstrdup(pool, thedir->name);
+    fname = thedir->name;
 
     fillin_fileinfo(finfo, (WIN32_FILE_ATTRIBUTE_DATA *) thedir->entry,
                     0, 1, fname, wanted);
-    finfo->pool = pool;
+    finfo->pool = thedir->pool;
 
     finfo->valid |= APR_FINFO_NAME;
     finfo->name = fname;
diff --git a/include/apr_file_info.h b/include/apr_file_info.h
index 0cf34ff..cfddc68 100644
--- a/include/apr_file_info.h
+++ b/include/apr_file_info.h
@@ -257,45 +257,17 @@
  * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_
                  values 
  * @param thedir the directory descriptor returned from apr_dir_open
- *
  * @remark No ordering is guaranteed for the entries read.
- *         @c finfo->pool is set to the pool used to create @a thedir,
- *         and @c finfo->name is allocated from that pool.
  *
  * @note If @c APR_INCOMPLETE is returned all the fields in @a finfo may
  *       not be filled in, and you need to check the @c finfo->valid bitmask
  *       to verify that what you're looking for is there. When no more
  *       entries are available, APR_ENOENT is returned.
- *
- * @warning Allocations will use the directory pool; use
- *          apr_dir_pread() and a temporary pool to restrict memory
- *          consumption for a large directory.
  */                        
 APR_DECLARE(apr_status_t) apr_dir_read(apr_finfo_t *finfo, apr_int32_t wanted,
                                        apr_dir_t *thedir);
 
 /**
- * Read the next entry from the specified directory. 
- * @param finfo the file info structure and filled in by apr_dir_read
- * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_
-                 values 
- * @param thedir the directory descriptor returned from apr_dir_open
- * @param pool the pool to use for allocations
-
- * @remark No ordering is guaranteed for the entries read.  
- * @remark @c finfo->pool is set to @a pool, and @c finfo->name is
- *         allocated from that pool.
- *
- * @note If @c APR_INCOMPLETE is returned all the fields in @a finfo may
- *       not be filled in, and you need to check the @c finfo->valid bitmask
- *       to verify that what you're looking for is there. When no more
- *       entries are available, APR_ENOENT is returned.
- */                        
-APR_DECLARE(apr_status_t) apr_dir_pread(apr_finfo_t *finfo, apr_int32_t wanted,
-                                        apr_dir_t *thedir, apr_pool_t *pool);
-
-    
-/**
  * Rewind the directory to the first entry.
  * @param thedir the directory descriptor to rewind.
  */                        
diff --git a/test/testdir.c b/test/testdir.c
index a9f9e52..21876be 100644
--- a/test/testdir.c
+++ b/test/testdir.c
@@ -21,7 +21,6 @@
 #include "apr_file_info.h"
 #include "apr_errno.h"
 #include "apr_general.h"
-#include "apr_strings.h"
 #include "apr_lib.h"
 #include "apr_thread_proc.h"
 #include "testutil.h"
@@ -431,66 +430,6 @@
     ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
 }
 
-#if APR_POOL_DEBUG
-static void test_pread(abts_case *tc, void *data)
-{
-    apr_dir_t *dir;
-    apr_finfo_t finfo;
-    apr_size_t before, after;
-    apr_pool_t *subp;
-
-    APR_ASSERT_SUCCESS(tc, "apr_dir_open failed", apr_dir_open(&dir, "data", p));
-    
-    apr_pool_create(&subp, p);
-
-    before = apr_pool_num_bytes(p, 0);
-    
-    APR_ASSERT_SUCCESS(tc, "apr_dir_read failed",
-                       apr_dir_pread(&finfo, APR_FINFO_DIRENT, dir, subp));
-
-    after = apr_pool_num_bytes(p, 0);
-
-    ABTS_PTR_EQUAL(tc, finfo.pool, subp);
-
-    apr_pool_destroy(subp);
-    
-    APR_ASSERT_SUCCESS(tc, "apr_dir_close failed", apr_dir_close(dir));
-
-    ABTS_INT_EQUAL(tc, before, after);
-    
-}
-#endif
-
-/* Ensure that apr_dir_read() doesn't have side-effects, because
- * finfo->name points to a static buffer inside the apr_dir_t */
-static void test_read_side_effects(abts_case *tc, void *data)
-{
-    apr_dir_t *dir;
-    apr_finfo_t f1;
-    apr_finfo_t f2;
-    char name[APR_PATH_MAX], fname[APR_PATH_MAX];
-
-    APR_ASSERT_SUCCESS(tc, "apr_dir_open failed", apr_dir_open(&dir, "data", p));
-    
-    APR_ASSERT_SUCCESS(tc, "apr_dir_read failed",
-                       apr_dir_read(&f1, APR_FINFO_DIRENT, dir));
-
-    if (f1.name)
-        apr_cpystrn(name, f1.name, sizeof name);
-    if (f1.fname)
-        apr_cpystrn(fname, f1.fname, sizeof fname);
-
-    APR_ASSERT_SUCCESS(tc, "second apr_dir_read failed",
-                       apr_dir_read(&f2, APR_FINFO_DIRENT, dir));
-
-    if (f1.name)
-        ABTS_STR_EQUAL(tc, name, f1.name);
-    if (f1.fname)
-        ABTS_STR_EQUAL(tc, fname, f1.fname);
-    
-    APR_ASSERT_SUCCESS(tc, "apr_dir_close failed", apr_dir_close(dir));
-}
-
 abts_suite *testdir(abts_suite *suite)
 {
     suite = ADD_SUITE(suite)
@@ -512,11 +451,7 @@
     abts_run_test(suite, test_closedir, NULL);
     abts_run_test(suite, test_uncleared_errno, NULL);
     abts_run_test(suite, test_readmore_info, NULL);
-#if APR_POOL_DEBUG
-    abts_run_test(suite, test_pread, NULL);
-#endif
-    abts_run_test(suite, test_read_side_effects, NULL);
-    
+
     return suite;
 }