Tweak the evutil_open_closeonexec patch to work on windows, old unixes.

Windows doesn't have a mode_t as far as I can tell.

Some unixes, iirc, don't like three-argument open without O_CREAT.
This commit is contained in:
Nick Mathewson 2012-02-11 21:17:18 -05:00
parent d2b5f7223a
commit 03dce42dfa
2 changed files with 9 additions and 3 deletions

View File

@ -88,7 +88,7 @@
#endif
int
evutil_open_closeonexec(const char *pathname, int flags, mode_t mode)
evutil_open_closeonexec(const char *pathname, int flags, unsigned mode)
{
int fd;
@ -96,7 +96,10 @@ evutil_open_closeonexec(const char *pathname, int flags, mode_t mode)
flags |= O_CLOEXEC;
#endif
fd = open(pathname, flags, mode);
if (flags & O_CREAT)
fd = open(pathname, flags, (mode_t)mode);
else
fd = open(pathname, flags);
if (fd < 0)
return -1;

View File

@ -161,7 +161,10 @@ char EVUTIL_TOLOWER(char c);
#define EVUTIL_UPCAST(ptr, type, field) \
((type *)(((char*)(ptr)) - evutil_offsetof(type, field)))
int evutil_open_closeonexec(const char *pathname, int flags, mode_t mode);
/* As open(pathname, flags, mode), except that the file is always opened with
* the close-on-exec flag set. (And the mode argument is mandatory.)
*/
int evutil_open_closeonexec(const char *pathname, int flags, unsigned mode);
int evutil_read_file(const char *filename, char **content_out, size_t *len_out,
int is_binary);