Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Stack Overflow... (recursion in try-statement)
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Oliver Bandel <oliver@f...>
Subject: Re: [Caml-list] Stack Overflow... (recursion in try-statement)

On Wed, 24 Apr 2002, Warp wrote:

> > why does an stack overflow-error occur here?
> > 
> > let rec traversedir dir =
> >           try ( [Unix.readdir dir] @ traversedir dir ) with
> >           End_of_file -> [];;
> > 
> > 
> > I have not tried it with very deep directories, so
> > I did not expect such an error...
> > 
> > What is the problem here?
> 
> Perhaps he's looping because ".." is also a dir.
> You should try to do some print to figure it out

A chdir from "/" to ".." will set the pwd to "/".
But the catalog-entries are not infenite.
So this can not be the problem here, because
I'm not really traversing the directory.
My code only does give back the list of entries
of a directory (I gave the wrong name: the name
is for the whole function/problem, but I only solved
the part of the problem: to get *all* entries of a
directory).



But you are right with your hint, that I have
to take care of "." and ".." when really
traversing the directory-structure and performing
actions on "." and "..".

E.g. renaming of "." and ".." is not working,
and the jump to "." or ".." can cause problems
(in that I ran with my C-version of the program,
because I have not thought about that problem =>
possible bugs surely will be done... ;-)).

In the case of my problem the explanation with
expanding the terms (order of evaluation/expanding)
is the key.
 
Ciao,
   Oliver

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners