[filesystem] Other reasons for directory_iterator to crash?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[filesystem] Other reasons for directory_iterator to crash?

Paul Giaccone
I am iterating over the subdirectories in a directory.  The code I have
for this has always worked up until now, but now it is crashing when I
create the iterator (ask "What did you change?" if you like; the answer
is "If I knew that...").

My question is: what can cause the creation of an iterator to crash?  
Looking at the documentation, directory_iterator(my_path) throws if
!exists(my_path), which is fair enough.  This check is already in my
code, however, and does not report that the path does not exist.

Here is a (revised) segment of my code:

    const char* source_directory = getenv(MYENVVAR);

    if ((source_directory == NULL) || (source_directory[0] == '\0'))
    {
       return false;
    }

    boost::filesystem::path dir_path(source_directory,
boost::filesystem::native);
    boost::filesystem::directory_iterator end_iterator;

    if (!exists(dir_path))
    {
        return false;
    }

    boost::filesystem::directory_iterator dir_iterator(dir_path);  //CRASH

    while (dir_iterator != end_iterator)
    {
       //do whatever I do here
       dir_iterator++;
    }

The program crashes where indicated.  The path exists.  I've tried
replacing the const char* at the beginning with a std::string (then
using .c_str() where appropriate) but this makes no difference.

So, apart from the path not existing, how else can
directory_iterator(dir_path) cause an error?

Incidental info: This works fine in Windows (albeit with a different
path); this code builds a shared object for use in Shake, meaning I
can't use gdb; I am working with gcc 3.2.3 and Boost 1.33.1.

Paul

_______________________________________________
Boost-users mailing list
[hidden email]
http://lists.boost.org/mailman/listinfo.cgi/boost-users
Reply | Threaded
Open this post in threaded view
|

Re: [filesystem] Other reasons for directory_iterator to crash?

Paul Giaccone
Paul Giaccone wrote:

>I am iterating over the subdirectories in a directory.  The code I have
>for this has always worked up until now, but now it is crashing when I
>create the iterator (ask "What did you change?" if you like; the answer
>is "If I knew that...").
>
>My question is: what can cause the creation of an iterator to crash?  
>Looking at the documentation, directory_iterator(my_path) throws if
>!exists(my_path), which is fair enough.  This check is already in my
>code, however, and does not report that the path does not exist.
>  
>

My mistake.  Everything is behaving correctly.  The string to which my
environment variable was set had a space at the beginning.  I've taken
this out and it's working again.

Paul

_______________________________________________
Boost-users mailing list
[hidden email]
http://lists.boost.org/mailman/listinfo.cgi/boost-users