summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/lib/opendir.c
blob: 2530d1ac9ec5f7f9f5f4d286adebe5b54713e254 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "dietdirent.h"
#include <sys/mman.h>
#include <unistd.h>
#include <dirent.h>
#include <stdlib.h>
#include <fcntl.h>

DIR*  opendir ( const char* name ) {
  int   fd = open (name, O_RDONLY | O_DIRECTORY);
  DIR*  t  = NULL;

  if ( fd >= 0 ) {
    if (fcntl (fd, F_SETFD, FD_CLOEXEC) < 0)
      goto lose;
    t = (DIR *) mmap (NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, 
		MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
    if (t == MAP_FAILED)
lose:
      close (fd);
    else
      t->fd = fd;
  }


  return t;
}