Page MenuHomeFreeBSD

D10408.id27473.diff
No OneTemporary

D10408.id27473.diff

Index: lib/libc/gen/telldir.c
===================================================================
--- lib/libc/gen/telldir.c
+++ lib/libc/gen/telldir.c
@@ -52,15 +52,22 @@
long
telldir(DIR *dirp)
{
- struct ddloc *lp;
+ struct ddloc *lp, *flp;
long idx;
if (__isthreaded)
_pthread_mutex_lock(&dirp->dd_lock);
+ flp = NULL;
LIST_FOREACH(lp, &dirp->dd_td->td_locq, loc_lqe) {
- if (lp->loc_seek == dirp->dd_seek &&
- lp->loc_loc == dirp->dd_loc)
+ if (lp->loc_seek == dirp->dd_seek) {
+ if (flp == NULL)
+ flp = lp;
+ if (lp->loc_loc == dirp->dd_loc)
+ break;
+ } else if (flp != NULL) {
+ lp = NULL;
break;
+ }
}
if (lp == NULL) {
lp = malloc(sizeof(struct ddloc));
@@ -72,7 +79,10 @@
lp->loc_index = dirp->dd_td->td_loccnt++;
lp->loc_seek = dirp->dd_seek;
lp->loc_loc = dirp->dd_loc;
- LIST_INSERT_HEAD(&dirp->dd_td->td_locq, lp, loc_lqe);
+ if (flp)
+ LIST_INSERT_BEFORE(flp, lp, loc_lqe);
+ else
+ LIST_INSERT_HEAD(&dirp->dd_td->td_locq, lp, loc_lqe);
}
idx = lp->loc_index;
if (__isthreaded)

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 29, 2:55 AM (3 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26315120
Default Alt Text
D10408.id27473.diff (1 KB)

Event Timeline