[DGD] Re: DGD LPC (?)
Mikael Lind
z94lind at mtek.chalmers.se
Sun Aug 2 00:45:09 CEST 1998
On Sat, 1 Aug 1998, Danne Solli wrote:
> int file_size(string str) {
> mixed *sizes;
>
> if (sizeof(sizes = get_dir(str)[1]) == 1)
> return sizes[0];
> else
> return -1;
> }
>
> ought to do it.
The problem with your solution is that get_dir()'s wildcard matching is
ignored...
get_dir("/a/*") returns the files "b", "c" and "*" but your
file_size("/a/*") returns -1. (Should return the size of "/a/*".) Probably
not a problem if your files have names clean from wildcards.
get_dir("/a/*") returns the file "b" and your file_size("/a/*") returns the
size of "/a/b". (Should return -1.) Might be a problem.
The following is a somewhat abbreviated version of the file_size() that I
use. It's similar to the file_size() in the Kernel Library, I think, although
Dworkin's solution probably is optimized.
int file_size(string path) {
int i;
mixed **dir;
string *comps, base;
if (path == "/") {
return -2;
}
comps = explode(path, "/");
base = comps[sizeof(comps) - 1];
dir = get_dir(path);
i = sizeof(dir[0]);
while (i--) {
if (dir[0][i] == base) {
return dir[1][i];
}
}
return -1;
}
Still, file_size("/a/[a-z]") wouldn't return the size of the file
"/a/[a-z]", if such a file existed. File names containing range matches would
need to be handled separately. I think. I don't. :)
This may seem like a very costly way to determine the size of a file. I'm
however under the impression that you could put in a lot of checks and still
have the actual file I/O call as the major tick drainer. Especially if you
precompile. Am I wrong?
Anyway, file names containing wildcards are hardly recommendable...
L Mikael "eLeMeL" Lind :: I wished for 4 cursed scrolls
z94lind at mtek.chalmers.se :: of gold detection and all I
http://www.mtek.chalmers.se/~z94lind/ :: got was this lousy .signature
List config page: http://list.imaginary.com/mailman/listinfo/dgd
More information about the DGD
mailing list