2010-03-09 Jeff Johnston <jjohnstn@redhat.com>
* libc/posix/telldir.c (dd_loccnt): Change start index to be 1
        instead of 0.
        (_seekdir): A loc of 0 now means rewind dir.
			
			
This commit is contained in:
		| @@ -1,3 +1,9 @@ | |||||||
|  | 2010-03-09  Jeff Johnston  <jjohnstn@redhat.com> | ||||||
|  |  | ||||||
|  | 	* libc/posix/telldir.c (dd_loccnt): Change start index to be 1  | ||||||
|  | 	instead of 0. | ||||||
|  | 	(_seekdir): A loc of 0 now means rewind dir. | ||||||
|  |  | ||||||
| 2010-03-08  Craig Howland <howland@LGSInnovations.com> | 2010-03-08  Craig Howland <howland@LGSInnovations.com> | ||||||
|  |  | ||||||
| 	* libm/common/s_rint.c:  Fix error when integral part had 18 bits and | 	* libm/common/s_rint.c:  Fix error when integral part had 18 bits and | ||||||
|   | |||||||
| @@ -67,7 +67,7 @@ struct ddloc { | |||||||
| #define	NDIRHASH	32	/* Num of hash lists, must be a power of 2 */ | #define	NDIRHASH	32	/* Num of hash lists, must be a power of 2 */ | ||||||
| #define	LOCHASH(i)	((i)&(NDIRHASH-1)) | #define	LOCHASH(i)	((i)&(NDIRHASH-1)) | ||||||
|  |  | ||||||
| static long	dd_loccnt;	/* Index of entry for sequential readdir's */ | static long	dd_loccnt = 1;	/* Index of entry for sequential readdir's */ | ||||||
| static struct	ddloc *dd_hash[NDIRHASH];   /* Hash list heads for ddlocs */ | static struct	ddloc *dd_hash[NDIRHASH];   /* Hash list heads for ddlocs */ | ||||||
| __LOCK_INIT(static, dd_hash_lock); | __LOCK_INIT(static, dd_hash_lock); | ||||||
|  |  | ||||||
| @@ -123,6 +123,7 @@ _DEFUN(_seekdir, (dirp, loc), | |||||||
| #ifdef HAVE_DD_LOCK | #ifdef HAVE_DD_LOCK | ||||||
| 	__lock_acquire(dd_hash_lock); | 	__lock_acquire(dd_hash_lock); | ||||||
| #endif | #endif | ||||||
|  | 	if (loc != 0) { | ||||||
| 		prevlp = &dd_hash[LOCHASH(loc)]; | 		prevlp = &dd_hash[LOCHASH(loc)]; | ||||||
| 		lp = *prevlp; | 		lp = *prevlp; | ||||||
| 		while (lp != NULL) { | 		while (lp != NULL) { | ||||||
| @@ -152,6 +153,12 @@ found: | |||||||
| 		*prevlp = lp->loc_next; | 		*prevlp = lp->loc_next; | ||||||
| 		free((caddr_t)lp); | 		free((caddr_t)lp); | ||||||
| #endif | #endif | ||||||
|  | 	} else { | ||||||
|  | 		// loc 0 means rewinding | ||||||
|  | 		(void) lseek(dirp->dd_fd, 0, 0); | ||||||
|  | 		dirp->dd_seek = 0; | ||||||
|  | 		dirp->dd_loc = 0; | ||||||
|  | 	} | ||||||
| #ifdef HAVE_DD_LOCK | #ifdef HAVE_DD_LOCK | ||||||
| 	__lock_release(dd_hash_lock); | 	__lock_release(dd_hash_lock); | ||||||
| #endif | #endif | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user