summaryrefslogtreecommitdiffstats
path: root/win
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2012-03-28 13:33:46 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2012-03-28 13:33:46 (GMT)
commit861a3771f91a7c67ef0cf2947ba0c5390febb62f (patch)
treeca7bf1fb7e92f1b1dc034741df5f9fdd53287f39 /win
parentb08fc85bbbb09a0dab5592a88386d5f23747d984 (diff)
parent1251bcbcc6272da5c31c077c03ce238cfde19844 (diff)
downloadtcl-861a3771f91a7c67ef0cf2947ba0c5390febb62f.zip
tcl-861a3771f91a7c67ef0cf2947ba0c5390febb62f.tar.gz
tcl-861a3771f91a7c67ef0cf2947ba0c5390febb62f.tar.bz2
merge trunk
Diffstat (limited to 'win')
-rw-r--r--win/cat.c6
-rw-r--r--win/tclWinError.c33
-rw-r--r--win/tclWinFile.c62
-rw-r--r--win/tclWinPort.h93
-rw-r--r--win/tclWinSerial.c2
-rw-r--r--win/tclWinSock.c6
6 files changed, 58 insertions, 144 deletions
diff --git a/win/cat.c b/win/cat.c
index a67999f..d49e37c 100644
--- a/win/cat.c
+++ b/win/cat.c
@@ -16,11 +16,7 @@
#endif
#include <stdio.h>
-#ifdef __CYGWIN__
-# include <unistd.h>
-#else
-# include <io.h>
-#endif
+#include <io.h>
#include <string.h>
#include <tchar.h>
diff --git a/win/tclWinError.c b/win/tclWinError.c
index 4fee02b..1b59dbe 100644
--- a/win/tclWinError.c
+++ b/win/tclWinError.c
@@ -12,11 +12,19 @@
#include "tclInt.h"
+#ifndef WSAEWOULDBLOCK
+# define WSAEWOULDBLOCK 10035L
+#endif
+
+#ifndef __WIN32__
+# define DWORD unsigned int
+#endif
+
/*
* The following table contains the mapping from Win32 errors to errno errors.
*/
-static char errorTable[] = {
+static const unsigned char errorTable[] = {
0,
EINVAL, /* ERROR_INVALID_FUNCTION 1 */
ENOENT, /* ERROR_FILE_NOT_FOUND 2 */
@@ -284,18 +292,16 @@ static char errorTable[] = {
EINVAL, /* 264 */
EINVAL, /* 265 */
EINVAL, /* 266 */
- ENOTDIR, /* ERROR_DIRECTORY 267 */
+ ENOTDIR /* ERROR_DIRECTORY 267 */
};
-static const unsigned int tableLen = sizeof(errorTable);
-
/*
* The following table contains the mapping from WinSock errors to
* errno errors.
*/
-static int wsaErrorTable[] = {
- EWOULDBLOCK, /* WSAEWOULDBLOCK */
+static const unsigned char wsaErrorTable[] = {
+ EAGAIN, /* WSAEWOULDBLOCK */
EINPROGRESS, /* WSAEINPROGRESS */
EALREADY, /* WSAEALREADY */
ENOTSOCK, /* WSAENOTSOCK */
@@ -331,7 +337,7 @@ static int wsaErrorTable[] = {
EUSERS, /* WSAEUSERS */
EDQUOT, /* WSAEDQUOT */
ESTALE, /* WSAESTALE */
- EREMOTE, /* WSAEREMOTE */
+ EREMOTE /* WSAEREMOTE */
};
/*
@@ -352,9 +358,9 @@ static int wsaErrorTable[] = {
void
TclWinConvertError(
- unsigned long errCode) /* Win32 error code. */
+ DWORD errCode) /* Win32 error code. */
{
- if (errCode >= tableLen) {
+ if (errCode >= sizeof(errorTable)/sizeof(errorTable[0])) {
Tcl_SetErrno(EINVAL);
} else {
Tcl_SetErrno(errorTable[errCode]);
@@ -379,12 +385,13 @@ TclWinConvertError(
void
TclWinConvertWSAError(
- unsigned long errCode) /* Win32 error code. */
+ DWORD errCode) /* Win32 error code. */
{
- if ((errCode >= WSAEWOULDBLOCK) && (errCode <= WSAEREMOTE)) {
- Tcl_SetErrno(wsaErrorTable[errCode - WSAEWOULDBLOCK]);
- } else {
+ errCode -= WSAEWOULDBLOCK;
+ if (errCode >= sizeof(wsaErrorTable)/sizeof(wsaErrorTable[0])) {
Tcl_SetErrno(EINVAL);
+ } else {
+ Tcl_SetErrno(wsaErrorTable[errCode]);
}
}
diff --git a/win/tclWinFile.c b/win/tclWinFile.c
index 6e7b4c2..dcc05bb 100644
--- a/win/tclWinFile.c
+++ b/win/tclWinFile.c
@@ -1809,27 +1809,10 @@ TclpObjChdir(
{
int result;
const TCHAR *nativePath;
-#ifdef __CYGWIN__
- extern int cygwin_conv_to_posix_path(const char *, char *);
- char posixPath[MAX_PATH+1];
- const char *path;
- Tcl_DString ds;
-#endif /* __CYGWIN__ */
nativePath = Tcl_FSGetNativePath(pathPtr);
-#ifdef __CYGWIN__
- /*
- * Cygwin chdir only groks POSIX path.
- */
-
- path = Tcl_WinTCharToUtf(nativePath, -1, &ds);
- cygwin_conv_to_posix_path(path, posixPath);
- result = (chdir(posixPath) == 0 ? 1 : 0);
- Tcl_DStringFree(&ds);
-#else /* __CYGWIN__ */
result = SetCurrentDirectory(nativePath);
-#endif /* __CYGWIN__ */
if (result == 0) {
TclWinConvertError(GetLastError());
@@ -1838,51 +1821,6 @@ TclpObjChdir(
return 0;
}
-#ifdef __CYGWIN__
-/*
- *---------------------------------------------------------------------------
- *
- * TclpReadlink --
- *
- * This function replaces the library version of readlink().
- *
- * Results:
- * The result is a pointer to a string specifying the contents of the
- * symbolic link given by 'path', or NULL if the symbolic link could not
- * be read. Storage for the result string is allocated in bufferPtr; the
- * caller must call Tcl_DStringFree() when the result is no longer
- * needed.
- *
- * Side effects:
- * See readlink() documentation.
- *
- *---------------------------------------------------------------------------
- */
-
-char *
-TclpReadlink(
- const char *path, /* Path of file to readlink (UTF-8). */
- Tcl_DString *linkPtr) /* Uninitialized or free DString filled with
- * contents of link (UTF-8). */
-{
- char link[MAXPATHLEN];
- int length;
- char *native;
- Tcl_DString ds;
-
- native = Tcl_UtfToExternalDString(NULL, path, -1, &ds);
- length = readlink(native, link, sizeof(link)); /* INTL: Native. */
- Tcl_DStringFree(&ds);
-
- if (length < 0) {
- return NULL;
- }
-
- Tcl_ExternalToUtfDString(NULL, link, length, linkPtr);
- return Tcl_DStringValue(linkPtr);
-}
-#endif /* __CYGWIN__ */
-
/*
*----------------------------------------------------------------------
*
diff --git a/win/tclWinPort.h b/win/tclWinPort.h
index e5dac8c..db46a4a 100644
--- a/win/tclWinPort.h
+++ b/win/tclWinPort.h
@@ -92,21 +92,11 @@ typedef DWORD_PTR * PDWORD_PTR;
#include <signal.h>
#include <limits.h>
-#ifdef __CYGWIN__
-# include <unistd.h>
-# ifndef _vsnprintf
-# define _vsnprintf vsnprintf
-# endif
-# ifndef _wcsicmp
-# define _wcsicmp wcscasecmp
-# endif
-#else
-# ifndef strncasecmp
-# define strncasecmp strnicmp
-# endif
-# ifndef strcasecmp
-# define strcasecmp stricmp
-# endif
+#ifndef strncasecmp
+# define strncasecmp strnicmp
+#endif
+#ifndef strcasecmp
+# define strcasecmp stricmp
#endif
/*
@@ -127,25 +117,6 @@ typedef DWORD_PTR * PDWORD_PTR;
#include <time.h>
/*
- * cygwin does not have this struct.
- */
-#ifdef __CYGWIN__
- struct _stat32i64 {
- dev_t st_dev;
- ino_t st_ino;
- unsigned short st_mode;
- short st_nlink;
- short st_uid;
- short st_gid;
- dev_t st_rdev;
- __int64 st_size;
- struct {long tv_sec;} st_atim;
- struct {long tv_sec;} st_mtim;
- struct {long tv_sec;} st_ctim;
- };
-#endif
-
-/*
* The following defines redefine the Windows Socket errors as
* BSD errors so Tcl_PosixError can do the right thing.
*/
@@ -255,9 +226,9 @@ typedef DWORD_PTR * PDWORD_PTR;
#ifndef EOTHER
# define EOTHER 131 /* Other error */
#endif
-/* workaround for mingw-w64 bug 3407992 */
-#undef EOVERFLOW
-#define EOVERFLOW 132 /* File too big */
+#ifndef EOVERFLOW
+# define EOVERFLOW 132 /* File too big */
+#endif
#ifndef EOWNERDEAD
# define EOWNERDEAD 133 /* Owner dead */
#endif
@@ -284,20 +255,28 @@ typedef DWORD_PTR * PDWORD_PTR;
#endif
-#undef ESOCKTNOSUPPORT
-#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT /* Socket type not supported */
-#undef ESHUTDOWN
-#define ESHUTDOWN WSAESHUTDOWN /* Can't send after socket shutdown */
-#undef ETOOMANYREFS
-#define ETOOMANYREFS WSAETOOMANYREFS /* Too many references: can't splice */
-#undef EHOSTDOWN
-#define EHOSTDOWN WSAEHOSTDOWN /* Host is down */
-#undef EUSERS
-#define EUSERS WSAEUSERS /* Too many users (for UFS) */
-#undef EDQUOT
-#define EDQUOT WSAEDQUOT /* Disc quota exceeded */
-#undef ESTALE
-#define ESTALE WSAESTALE /* Stale NFS file handle */
+/* Visual Studio doesn't have these, so just choose some high numbers */
+#ifndef ESOCKTNOSUPPORT
+# define ESOCKTNOSUPPORT 240 /* Socket type not supported */
+#endif
+#ifndef ESHUTDOWN
+# define ESHUTDOWN 241 /* Can't send after socket shutdown */
+#endif
+#ifndef ETOOMANYREFS
+# define ETOOMANYREFS 242 /* Too many references: can't splice */
+#endif
+#ifndef EHOSTDOWN
+# define EHOSTDOWN 243 /* Host is down */
+#endif
+#ifndef EUSERS
+# define EUSERS 244 /* Too many users (for UFS) */
+#endif
+#ifndef EDQUOT
+# define EDQUOT 245 /* Disc quota exceeded */
+#endif
+#ifndef ESTALE
+# define ESTALE 246 /* Stale NFS file handle */
+#endif
/*
* Signals not known to the standard ANSI signal.h. These are used
@@ -549,18 +528,12 @@ typedef DWORD_PTR * PDWORD_PTR;
* use by tclAlloc.c.
*/
-#ifdef __CYGWIN__
-# define TclpSysAlloc(size, isBin) malloc((size))
-# define TclpSysFree(ptr) free((ptr))
-# define TclpSysRealloc(ptr, size) realloc((ptr), (size))
-#else
-# define TclpSysAlloc(size, isBin) ((void*)HeapAlloc(GetProcessHeap(), \
+#define TclpSysAlloc(size, isBin) ((void*)HeapAlloc(GetProcessHeap(), \
(DWORD)0, (DWORD)size))
-# define TclpSysFree(ptr) (HeapFree(GetProcessHeap(), \
+#define TclpSysFree(ptr) (HeapFree(GetProcessHeap(), \
(DWORD)0, (HGLOBAL)ptr))
-# define TclpSysRealloc(ptr, size) ((void*)HeapReAlloc(GetProcessHeap(), \
+#define TclpSysRealloc(ptr, size) ((void*)HeapReAlloc(GetProcessHeap(), \
(DWORD)0, (LPVOID)ptr, (DWORD)size))
-#endif
/*
* The following defines map from standard socket names to our internal
diff --git a/win/tclWinSerial.c b/win/tclWinSerial.c
index 0941d4a..58a9eb4 100644
--- a/win/tclWinSerial.c
+++ b/win/tclWinSerial.c
@@ -1036,7 +1036,7 @@ SerialOutputProc(
* the channel is in non-blocking mode.
*/
- errno = EWOULDBLOCK;
+ errno = EAGAIN;
goto error1;
}
diff --git a/win/tclWinSock.c b/win/tclWinSock.c
index 0c1a270..60cc313 100644
--- a/win/tclWinSock.c
+++ b/win/tclWinSock.c
@@ -1195,7 +1195,7 @@ CreateSocket(
if (connect(sock, addrPtr->ai_addr, addrPtr->ai_addrlen)
== SOCKET_ERROR) {
TclWinConvertWSAError((DWORD) WSAGetLastError());
- if (Tcl_GetErrno() != EWOULDBLOCK) {
+ if (Tcl_GetErrno() != EAGAIN) {
goto looperror;
}
@@ -1389,7 +1389,7 @@ WaitForSocketEvent(
} else if (infoPtr->readyEvents & events) {
break;
} else if (infoPtr->flags & SOCKET_ASYNC) {
- *errorCodePtr = EWOULDBLOCK;
+ *errorCodePtr = EAGAIN;
result = 0;
break;
}
@@ -1913,7 +1913,7 @@ TcpOutputProc(
if (error == WSAEWOULDBLOCK) {
infoPtr->readyEvents &= ~(FD_WRITE);
if (infoPtr->flags & SOCKET_ASYNC) {
- *errorCodePtr = EWOULDBLOCK;
+ *errorCodePtr = EAGAIN;
bytesWritten = -1;
break;
}