Mercurial > hg > octave-nkf
diff liboctave/dir-ops.cc @ 6145:14906c2745e3
[project @ 2006-11-08 20:33:51 by jwe]
author | jwe |
---|---|
date | Wed, 08 Nov 2006 20:34:01 +0000 |
parents | b9fd54407c8d |
children | 93c65f2a5668 |
line wrap: on
line diff
--- a/liboctave/dir-ops.cc +++ b/liboctave/dir-ops.cc @@ -70,6 +70,10 @@ string_vector dir_entry::read (void) { + static octave_idx_type grow_size = 100; + + octave_idx_type len = 0; + string_vector dirlist; if (ok ()) @@ -79,21 +83,24 @@ struct dirent *dir_ent; while ((dir_ent = readdir (static_cast<DIR *> (dir)))) - count++; - - rewinddir (static_cast<DIR *> (dir)); - - dirlist.resize (count); + { + if (dir_ent) + { + if (count >= len) + { + len += grow_size; + dirlist.resize (len); + } - for (int i = 0; i < count; i++) - { - dir_ent = readdir (static_cast<DIR *> (dir)); + dirlist[count] = dir_ent->d_name; - if (dir_ent) - dirlist[i] = dir_ent->d_name; + count++; + } else break; } + + dirlist.resize (count); } return dirlist;