diff --git a/compat/win32/dirent.c b/compat/win32/dirent.c index 8c654d722b..9fc8bfb645 100644 --- a/compat/win32/dirent.c +++ b/compat/win32/dirent.c @@ -2,10 +2,9 @@ typedef struct dirent_DIR { struct DIR base_dir; /* extend base struct DIR */ - struct dirent dd_dir; /* includes d_type */ HANDLE dd_handle; /* FindFirstFile handle */ int dd_stat; /* 0-based index */ - char dd_name[MAX_PATH * 3]; /* file name (* 3 for UTF-8 conversion) */ + struct dirent dd_dir; /* includes d_type */ } dirent_DIR; DIR *(*opendir)(const char *dirname) = dirent_opendir; @@ -95,10 +94,9 @@ DIR *dirent_opendir(const char *name) } /* initialize DIR structure and copy first dir entry */ - dir = xmalloc(sizeof(dirent_DIR)); + dir = xmalloc(sizeof(dirent_DIR) + MAX_LONG_PATH); dir->base_dir.preaddir = (struct dirent *(*)(DIR *dir)) dirent_readdir; dir->base_dir.pclosedir = (int (*)(DIR *dir)) dirent_closedir; - dir->dd_dir.d_name = dir->dd_name; dir->dd_handle = h; dir->dd_stat = 0; finddata2dirent(&dir->dd_dir, &fdata); diff --git a/compat/win32/dirent.h b/compat/win32/dirent.h index 6b3ddee51b..e0e0e1700f 100644 --- a/compat/win32/dirent.h +++ b/compat/win32/dirent.h @@ -8,7 +8,7 @@ struct dirent { unsigned char d_type; /* file type to prevent lstat after readdir */ - char *d_name; /* file name */ + char d_name[FLEX_ARRAY]; /* file name */ }; /*