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