On 2002-03-27 15:27:06 +0300, Alexander Shalaev wrote: > > Can i use readdir_r() functon with pth threads library, or how can i > use safely readdir() with pthlib ?
If you're going to keep the dirent structure around any length of time, you'll need to do a copy of the contents: struct dirent *cpy; cpy = (struct dirent *)malloc(sizeof(struct dirent) + strlen(src->d_name)); assert(cpy != NULL); *cpy = *src; strcpy(cpy->d_name, src->d_name); If you don't copy, you need to be sure that the code never gets ported to POSIX threads, and never gets restructured such that any I/O occurs between the readdir() call and when the value is used (or any other call that causes Pth to context switch). while (src = readdir(dirp)) { if ((++cnt % 100) == 0) { status("Reading directory ... %d", cnt); // context switch??? } do_something(src); } This is actually a fairly reasonable set of assumptions, but unless you need to port to systems that don't support API extensions used by POSIX threads, I'd go with readdir_r() as the path of least resistance. -- Shane Carpe Diem ______________________________________________________________________ GNU Portable Threads (Pth) http://www.gnu.org/software/pth/ User Support Mailing List [EMAIL PROTECTED] Automated List Manager (Majordomo) [EMAIL PROTECTED]