You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@apr.apache.org by Greg Stein <gs...@lyra.org> on 2001/01/23 02:46:55 UTC
[wrowe@rowe-clan.net: RE: New directory API...]
[ I didn't see Bill resend this to the list, so I'm doing it now... ]
----- Forwarded message from "William A. Rowe, Jr." <wr...@rowe-clan.net> -----
From: "William A. Rowe, Jr." <wr...@rowe-clan.net>
Subject: RE: New directory API...
To: "'Greg Stein'" <gs...@lyra.org>
Date: Mon, 22 Jan 2001 08:36:02 -0600
> From: Greg Stein [mailto:gstein@lyra.org]
> Sent: Monday, January 22, 2001 4:23 AM
> I'd say: have the user pick up the finfo->filehand if available and call
> apr_getfileinfo() for the bits they need (with a new structure).
finfo->filehand should be somewhat opaque. Some platforms may not set it up
(if they didn't create a 'file' to access the fileinfo.) Some platforms
(OS X) will have some other semantic. Unix will look at finfo.
We should either implement apr_dir_fileinfo(finfo, wanted, thedir) _or_
create an apr_more_fileinfo(finfo, wanted) that can be used for incremental
info from stat/lstat/getfileinfo or readdir results.
> > Of course, the user is left testing what
> > they 'wanted' twice, once to see if apr_readdir picked it up, and again to
> > see if apr_stat did the second time around. Very sub-optimal.
>
> Yup. I'd guess that most apps will simply do a stat rather than trying to
> really optimize the case. *If* optimization is important to them at that
> point in the code path, then yes: they'll compute a new wanted flag.
> Actually, it won't be too difficult:
>
> wanted = MY_WANTED_FLAGS & ~finfo.valid;
No need - with either the apr_dir_fileinfo or apr_more_fileinfo calls. They
would just look at .valid.
> > In our first bs session about the finfo idea, we kicked
> > around the idea of -incrementally- calling apr_stat.
>
> Shades of apr_open. I really don't think we want to try this.
Agreed - seperate function required.
> > Two choices. apr_dir_fileinfo() which deals with it and merges them.
> > Or preallocate a buffer in the opendir of the fname length (dir name) plus
> > the length of the longest allowed filename, up to the limit of the total
> > path length. No sense returning a name >_MAX_PATH, I already have this
> > exception in Win32 (and just skip over such bogus files.)
>
> Third choice: let the caller deal with a concat if necessary. They can
> optimize the snot out of it, if that is important to them.
> Other apps will simply do the apr_pstrcat() and be done with it.
We ourself need to concat -if- we actually do something with it ourselves.
(you've been arguing up till now against user's code bloat.) The suggested
apr_dir_fileinfo() call does so, but would use stack to keep from bloating
the pool. If you will use the stuff later, call apr_stat after concating
yourself; if you never need the full path, call apr_dir_fileinfo() (which
also skips the effort of requerying the known finfo.) We must simply
document that apr_dir_fileinfo() -requires- the original apr_finfo_t buffer
from the apr_readdir() call.
I'm left with one question - would we rather have an incremental
apr_more_fileinfo() that can ask "what do we have here?" and fill in
the blanks, or a narrowly focused apr_dir_fileinfo() that handles
that specific case?
Bill
----- End forwarded message -----
--
Greg Stein, http://www.lyra.org/