Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--winsup/cygwin/ChangeLog16
-rw-r--r--winsup/cygwin/cygwin.din2
-rw-r--r--winsup/cygwin/include/cygwin/version.h3
-rw-r--r--winsup/cygwin/mktemp.cc31
4 files changed, 43 insertions, 9 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 646c7a561..358a65c13 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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.
diff --git a/winsup/cygwin/cygwin.din b/winsup/cygwin/cygwin.din
index 83b9d0fe6..7018ecdb1 100644
--- a/winsup/cygwin/cygwin.din
+++ b/winsup/cygwin/cygwin.din
@@ -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
diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h
index 82a618197..32326edc9 100644
--- a/winsup/cygwin/include/cygwin/version.h
+++ b/winsup/cygwin/include/cygwin/version.h
@@ -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
diff --git a/winsup/cygwin/mktemp.cc b/winsup/cygwin/mktemp.cc
index c39fe49be..b8a1381c4 100644
--- a/winsup/cygwin/mktemp.cc
+++ b/winsup/cygwin/mktemp.cc
@@ -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;
/*