Hi,
I know it was discussed several times already here, but I would like
someone to clear things a little bit for me here:
I tried to write a function, which looks for some file, on a path given.
I use recursion, but Rebol is not able to scan my root directory,
something has to overflow somewhere in memory, and I anticipate I am
doing something wrong.
The calling convention is as follows:
->> find-on-path %/D/ %Netscape.exe ; will look for the file on the
path given ....
->> find-on-path/subdirs %/D/ %Netscape.exe ; will scan all
subdirectories too
find-on-path: func [{Find file on given path ... (end dir entries with
"/")}
path
file
/subdirs
"Scan also subdirectories ...."
/local dir-list reduced-dir-list
][
print ["Scanning: " path]
dir-list: copy []
dir-list: load path
either found? find dir-list file [
print [file "nalezen na ceste: " path]
return path
][
either not subdirs [return none][
reduced-dir-list: copy [] ; let's reduce dir-list to contain
directories only ...
foreach dir-or-file dir-list [if dir? join path dir-or-file
[insert reduced-dir-list dir-or-file]]
dir-list: copy reduced-dir-list
reduced-dir-list: copy []
foreach dir dir-list [
result: find-on-path/subdirs join path dir file
if not none? result [return result]
] return none ; I tried also unset 'dir-list in front
of return none here ....
]
]
]
I tried mereyl everything - I am clearing block, initialising them with
copy [], setting them as local variables, unsetting blocks, etc. I don't
know, where it is overflowing, as dir structure is not so much nested. I
remember some discussion on 'foreach making copy of series given? Uh,
could anyone help, please?
Also, is there any chance to have only directories in the resulted block
after loading a path?
What does happen in the memory during the recursive call? Is body of
function in memory just once, reserving just separate space for each
local var, or?
Thanks,
-pekr-