199eb220f42032c1b50dd226dbea084cc10ccd38
1#include "../git-compat-util.h"
2#include "win32.h"
3#include <conio.h>
4#include "../strbuf.h"
5
6DIR *opendir(const char *name)
7{
8 DWORD attrs = GetFileAttributes(name);
9 int len;
10 DIR *p;
11
12 /* check for valid path */
13 if (attrs == INVALID_FILE_ATTRIBUTES) {
14 errno = ENOENT;
15 return NULL;
16 }
17
18 /* check if it's a directory */
19 if (!(attrs & FILE_ATTRIBUTE_DIRECTORY)) {
20 errno = ENOTDIR;
21 return NULL;
22 }
23
24 /* check that the pattern won't be too long for FindFirstFileA */
25 len = strlen(name);
26 if (len + 2 >= MAX_PATH) {
27 errno = ENAMETOOLONG;
28 return NULL;
29 }
30
31 p = malloc(sizeof(DIR) + len + 2);
32 if (!p)
33 return NULL;
34
35 memset(p, 0, sizeof(DIR) + len + 2);
36 strcpy(p->dd_name, name);
37 p->dd_name[len] = '/';
38 p->dd_name[len+1] = '*';
39
40 p->dd_handle = (long)INVALID_HANDLE_VALUE;
41 return p;
42}
43int closedir(DIR *dir)
44{
45 if (!dir) {
46 errno = EBADF;
47 return -1;
48 }
49
50 if (dir->dd_handle != (long)INVALID_HANDLE_VALUE)
51 FindClose((HANDLE)dir->dd_handle);
52 free(dir);
53 return 0;
54}
55
56#include "mingw.c"