At 02:48 PM 7/2/2002, Karl Fogel wrote:
Currently, apr_check_dir_empty() is living in the Subversion source
tree.  The implementation looks portable, though; is there any reason
not to move this into APR?

One, the name sucks... perhaps apr_dir_is_empty()? Keep it named with the other apr_dir_ family members and our general schema. We have to work hard on consistency so we avoid symbol renames of newly created functions.

Other than that, I would _NOT_ assume all first two entries are "."/"..", but
if you make that an explicit string test, I'd be +1.

Also, APR_EGENERAL seems a bit vague, how about APR_EEXISTS?

   apr_status_t
   apr_check_dir_empty (const char *path,
                        apr_pool_t *pool)
   {
     apr_status_t apr_err, retval;
     apr_dir_t *dir;
     apr_finfo_t finfo;

     apr_err = apr_dir_open (&dir, path, pool);
     if (apr_err)
       return apr_err;

     /* All systems return "." and ".." as the first two files, so read
        past them unconditionally. */
     apr_err = apr_dir_read (&finfo, APR_FINFO_NAME, dir);
     if (apr_err) return apr_err;
     apr_err = apr_dir_read (&finfo, APR_FINFO_NAME, dir);
     if (apr_err) return apr_err;

     /* Now, there should be nothing left.  If there is something left,
        return EGENERAL. */
     apr_err = apr_dir_read (&finfo, APR_FINFO_NAME, dir);
     if (APR_STATUS_IS_ENOENT (apr_err))
       retval = APR_SUCCESS;
     else if (! apr_err)
       retval = APR_EGENERAL;
     else
       retval = apr_err;

     apr_err = apr_dir_close (dir);
     if (apr_err)
       return apr_err;

     return retval;
   }

Thoughts?,
-Karl




Reply via email to