Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Joe Martin
OpenLDAP
Commits
30a9b1d7
Commit
30a9b1d7
authored
Apr 29, 2009
by
Quanah Gibson-Mount
Browse files
ITS#6041
parent
f5527def
Changes
3
Hide whitespace changes
Inline
Side-by-side
CHANGES
View file @
30a9b1d7
...
...
@@ -2,6 +2,7 @@ OpenLDAP 2.4 Change Log
OpenLDAP 2.4.17 Engineering
Fixed libldap gnutls private key init (ITS#6053)
Fixed liblutil opendir/closedir on windows (ITS#6041)
Fixed slapd errno handling (ITS#6037)
Fixed slapd global alloc handling (ITS#6054)
Fixed slapd moduleload with static backends and modules (ITS#6016)
...
...
include/ac/dirent.h
View file @
30a9b1d7
...
...
@@ -34,6 +34,9 @@ typedef struct DIR {
int
first
;
char
buf
[
MAX_PATH
+
1
];
}
DIR
;
DIR
*
opendir
(
const
char
*
name
);
struct
dirent
*
readdir
(
DIR
*
dir
);
int
closedir
(
DIR
*
dir
);
#else
# define dirent direct
# define NAMLEN(dirent) (dirent)->d_namlen
...
...
libraries/liblutil/utils.c
View file @
30a9b1d7
...
...
@@ -466,6 +466,40 @@ int mkstemp( char * template )
#endif
#ifdef _MSC_VER
/* Equivalent of MS CRT's _dosmaperr().
* @param lastError[in] Result of GetLastError().
*/
static
errno_t
win2errno
(
DWORD
lastError
)
{
const
struct
{
DWORD
windows_code
;
errno_t
errno_code
;
}
WIN2ERRNO_TABLE
[]
=
{
{
ERROR_SUCCESS
,
0
},
{
ERROR_FILE_NOT_FOUND
,
ENOENT
},
{
ERROR_PATH_NOT_FOUND
,
ENOENT
},
{
ERROR_TOO_MANY_OPEN_FILES
,
EMFILE
},
{
ERROR_ACCESS_DENIED
,
EACCES
},
{
ERROR_INVALID_HANDLE
,
EBADF
},
{
ERROR_NOT_ENOUGH_MEMORY
,
ENOMEM
},
{
ERROR_LOCK_VIOLATION
,
EACCES
},
{
ERROR_FILE_EXISTS
,
EEXIST
},
{
ERROR_INVALID_PARAMETER
,
EINVAL
},
{
ERROR_FILENAME_EXCED_RANGE
,
ENAMETOOLONG
},
};
const
unsigned
int
WIN2ERRNO_TABLE_SIZE
=
sizeof
(
WIN2ERRNO_TABLE
)
/
sizeof
(
WIN2ERRNO_TABLE
[
0
]);
const
errno_t
DEFAULT_ERRNO_ERROR
=
-
1
;
unsigned
int
i
;
for
(
i
=
0
;
i
<
WIN2ERRNO_TABLE_SIZE
;
++
i
)
{
if
(
WIN2ERRNO_TABLE
[
i
].
windows_code
==
lastError
)
{
return
WIN2ERRNO_TABLE
[
i
].
errno_code
;
}
}
return
DEFAULT_ERRNO_ERROR
;
}
struct
dirent
{
char
*
d_name
;
};
...
...
@@ -483,8 +517,10 @@ DIR *opendir( char *path )
HANDLE
h
;
WIN32_FIND_DATA
data
;
if
(
len
+
3
>=
sizeof
(
tmp
))
if
(
len
+
3
>=
sizeof
(
tmp
))
{
errno
=
ENAMETOOLONG
;
return
NULL
;
}
strcpy
(
tmp
,
path
);
tmp
[
len
++
]
=
'\\'
;
...
...
@@ -492,9 +528,11 @@ DIR *opendir( char *path )
tmp
[
len
]
=
'\0'
;
h
=
FindFirstFile
(
tmp
,
&
data
);
if
(
h
==
INVALID_HANDLE_VALUE
)
if
(
h
==
INVALID_HANDLE_VALUE
)
{
errno
=
win2errno
(
GetLastError
());
return
NULL
;
}
d
=
ber_memalloc
(
sizeof
(
DIR
)
);
if
(
!
d
)
...
...
@@ -518,7 +556,7 @@ struct dirent *readdir(DIR *dir)
}
return
&
dir
->
data
;
}
void
closedir
(
DIR
*
dir
)
int
closedir
(
DIR
*
dir
)
{
FindClose
(
dir
->
dir
);
ber_memfree
(
dir
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment