msvc: opendir: do not start the search
[gitweb.git] / compat / msvc.c
index ac04a4ccbdd8319349aa2647374d78fd6639f425..88c6093258eaa117996668026734ea8e6eb2761a 100644 (file)
@@ -5,29 +5,24 @@
 
 DIR *opendir(const char *name)
 {
-       int len;
+       int len = strlen(name);
        DIR *p;
-       p = (DIR*)malloc(sizeof(DIR));
-       memset(p, 0, sizeof(DIR));
-       strncpy(p->dd_name, name, PATH_MAX);
-       len = strlen(p->dd_name);
-       p->dd_name[len] = '/';
-       p->dd_name[len+1] = '*';
-
-       if (p == NULL)
+       p = malloc(sizeof(DIR) + len + 2);
+       if (!p)
                return NULL;
 
-       p->dd_handle = _findfirst(p->dd_name, &p->dd_dta);
+       memset(p, 0, sizeof(DIR) + len + 2);
+       strcpy(p->dd_name, name);
+       p->dd_name[len] = '/';
+       p->dd_name[len+1] = '*';
 
-       if (p->dd_handle == -1) {
-               free(p);
-               return NULL;
-       }
+       p->dd_handle = (long)INVALID_HANDLE_VALUE;
        return p;
 }
 int closedir(DIR *dir)
 {
-       _findclose(dir->dd_handle);
+       if (dir->dd_handle != (long)INVALID_HANDLE_VALUE)
+               FindClose((HANDLE)dir->dd_handle);
        free(dir);
        return 0;
 }