* cygwin.din (fpurge, mkstemps): New exports.

* include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
	* mktemp.cc (_gettemp): Add parameter.
	(mkstemps): New function.
	(mkstemp, mkdtemp, mktemp): Adjust clients.
This commit is contained in:
Corinna Vinschen 2009-07-03 13:01:17 +00:00
parent c52ac05c3a
commit e5f37aa148
4 changed files with 43 additions and 9 deletions

View File

@ -1,3 +1,19 @@
2009-07-03 Eric Blake <ebb9@byu.net>
* cygwin.din (fpurge, mkstemps): New exports.
* include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
* mktemp.cc (_gettemp): Add parameter.
(mkstemps): New function.
(mkstemp, mkdtemp, mktemp): Adjust clients.
2009-07-03 Corinna Vinschen <corinna@vinschen.de>
* autoload.cc: Fix typo in comment.
(ShowWindowAsync): Define.
(AttachConsole): Define.
* fhandler_console.cc (fhandler_console::need_invisible): Add band-aid
for Windows 7 AllocConsole bug.
2009-07-01 Corinna Vinschen <corinna@vinschen.de>
* net.cc (get_xp_ifs): Fix typo in comment.

View File

@ -505,6 +505,7 @@ __fpclassifyd NOSIGFE
__fpclassifyf NOSIGFE
fprintf SIGFE
_fprintf = fprintf SIGFE
fpurge SIGFE
fputc SIGFE
_fputc = fputc SIGFE
fputs SIGFE
@ -984,6 +985,7 @@ _mknod32 = mknod32 SIGFE
mknodat SIGFE
mkstemp SIGFE
_mkstemp = mkstemp SIGFE
mkstemps SIGFE
mktemp SIGFE
_mktemp = mktemp SIGFE
mktime SIGFE

View File

@ -364,12 +364,13 @@ details. */
208: Export log2, log2f.
209: Export wordexp, wordfree.
210: New ctype layout using variable ctype pointer. Export __ctype_ptr__.
211: Export fpurge, mkstemps.
*/
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
#define CYGWIN_VERSION_API_MAJOR 0
#define CYGWIN_VERSION_API_MINOR 210
#define CYGWIN_VERSION_API_MINOR 211
/* There is also a compatibity version number associated with the
shared memory regions. It is incremented when incompatible

View File

@ -1,15 +1,16 @@
/* mktemp.cc: mktemp functions
This file is adapted for Cygwin from FreeBSD.
This file is adapted for Cygwin from FreeBSD and newlib.
See the copyright at the bottom of this file. */
#include "winsup.h"
#include "cygerrno.h"
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
static int _gettemp(char *, int *, int);
static int _gettemp(char *, int *, int, size_t);
static uint32_t arc4random ();
static const char padchar[] =
@ -19,23 +20,30 @@ extern "C" int
mkstemp(char *path)
{
int fd;
return _gettemp(path, &fd, 0) ? fd : -1;
return _gettemp(path, &fd, 0, 0) ? fd : -1;
}
extern "C" char *
mkdtemp(char *path)
{
return _gettemp(path, NULL, 1) ? path : NULL;
return _gettemp(path, NULL, 1, 0) ? path : NULL;
}
extern "C" int
mkstemps(char *path, int len)
{
int fd;
return _gettemp(path, &fd, 0, len) ? fd : -1;
}
extern "C" char *
mktemp(char *path)
{
return _gettemp(path, NULL, 0) ? path : (char *) NULL;
return _gettemp(path, NULL, 0, 0) ? path : (char *) NULL;
}
static int
_gettemp(char *path, int *doopen, int domkdir)
_gettemp(char *path, int *doopen, int domkdir, size_t suffixlen)
{
char *start, *trv, *suffp;
char *pad;
@ -46,12 +54,14 @@ _gettemp(char *path, int *doopen, int domkdir)
return 0;
}
suffp = trv = strchr (path, '\0');
if (--trv < path)
trv = strchr (path, '\0');
if ((size_t) (trv - path) < suffixlen)
{
set_errno (EINVAL);
return 0;
}
trv -= suffixlen;
suffp = trv--;
/* Fill space with random characters */
while (trv >= path && *trv == 'X')
@ -59,6 +69,11 @@ _gettemp(char *path, int *doopen, int domkdir)
uint32_t rand = arc4random () % (sizeof (padchar) - 1);
*trv-- = padchar[rand];
}
if (suffp - trv < 6)
{
set_errno (EINVAL);
return 0;
}
start = trv + 1;
/*