1 /* w32_dirent.c - Posix emulation layer for Sylpheed (Claws)
3 * This file is part of w32lib.
5 * w32lib is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
10 * w32lib is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 * For more information and a list of changes, see w32lib.h
27 #include "win32-dirent.h"
30 opendir ( const char *name
)
34 dir
= calloc (1, sizeof *dir
+ strlen (name
));
37 strcpy (dir
->dd_name
, name
);
44 FindClose( (HANDLE
)dir
->dd_handle
);
52 WIN32_FIND_DATA fInfo
;
53 struct dirent
*xdirent
;
56 if ( !dir
->dd_handle
)
62 size_t n
= strlen (dir
->dd_name
);
63 dirname
= malloc (n
+ 4 + 1);
65 strcpy (dirname
, dir
->dd_name
);
66 strcpy (dirname
+ n
, "\\*.*");
70 dirname
= strdup( "\\*.*" );
72 return NULL
; /* Error. */
74 dir
->dd_handle
= (long)FindFirstFile( dirname
, &fInfo
);
76 if ( !dir
->dd_handle
)
81 else if ( dir
->dd_handle
!= -1l )
83 ret
= FindNextFile ((HANDLE
)dir
->dd_handle
, &fInfo
);
90 xdirent
= calloc ( 1, sizeof *xdirent
);
93 strncpy (xdirent
->d_name
, fInfo
.cFileName
, FILENAME_MAX
- 1 );
94 xdirent
->d_name
[FILENAME_MAX
- 1] = 0;
95 xdirent
->d_namlen
= strlen( xdirent
->d_name
);