github.com/afumu/libc@v0.0.6/musl/src/dirent/readdir_r.c (about)

     1  #include <dirent.h>
     2  #include <errno.h>
     3  #include <string.h>
     4  #include "__dirent.h"
     5  #include "lock.h"
     6  
     7  int readdir_r(DIR *restrict dir, struct dirent *restrict buf, struct dirent **restrict result)
     8  {
     9  	struct dirent *de;
    10  	int errno_save = errno;
    11  	int ret;
    12  	
    13  	LOCK(dir->lock);
    14  	errno = 0;
    15  	de = readdir(dir);
    16  	if ((ret = errno)) {
    17  		UNLOCK(dir->lock);
    18  		return ret;
    19  	}
    20  	errno = errno_save;
    21  	if (de) memcpy(buf, de, de->d_reclen);
    22  	else buf = NULL;
    23  
    24  	UNLOCK(dir->lock);
    25  	*result = buf;
    26  	return 0;
    27  }
    28  
    29  weak_alias(readdir_r, readdir64_r);