readdir_r.c raw

   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);
  30