72cc0d1a8b7c8406808a92eb0b9eb58bf6f8c3aa 39258 |
|
09-Nov-2011 |
vboxsync |
Additions/solaris/SharedFolders: Fix for incorrect stat association with dirents while reading large directories.
Fix nasty bug when reading large directories. The dirent's and stats were
located in two separate, parallel buffers; but when calling readdir with
a non-zero offset we were skipping through only the dirent's, thereby ending
up associating the wrong stats with these dirents.
This fix merges the two buffers into one structure, thereby both eliminating
the possibility of this bug and also simplifying the code.
Also included is proper validation of the offset that is passed in to
readdir.
Plus other minor fixes. |
f48c3167a0f99da174686b66dc4e666f38ecae46 30446 |
|
25-Jun-2010 |
vboxsync |
Additions/Solaris/SharedFolders: Fix out-of-space errors when listing large directories.
The existing code would fail if the full directory listing could not fit in the buffer passed to the first readdir call. The change here implements the same idea as the linux guest code does: on the first readdir call the full
directory list is read into a dynamically allocated buffer (actually a list of buffers), and the readdir calls then copy from this buffer; the buffer is freed when the vnode is closed. This buffer contains dirent_t entries,
rather than some slightly more compact list-of-names, because readdir provides the offset as a byte offset in a conceptual array of dirent_t's, and hence we can find our place much easier and faster if we keep actual dirent_t
entries around. |