diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-03-20 10:15:02 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-03-20 10:15:02 (GMT) |
commit | 10f86a8692c0a3a978d81ff4ab06c6f04dde6d99 (patch) | |
tree | 2b91bafe7209fe7a322a5a7f9ec87572e868bf81 /unix | |
parent | 23f5b19d027c7c6f2eec97dd900569b56a9087f7 (diff) | |
download | tcl-10f86a8692c0a3a978d81ff4ab06c6f04dde6d99.zip tcl-10f86a8692c0a3a978d81ff4ab06c6f04dde6d99.tar.gz tcl-10f86a8692c0a3a978d81ff4ab06c6f04dde6d99.tar.bz2 |
[Bug 3288345] Wrong Tcl_StatBuf used on Cygwin
(backported from Tcl 8.5)
Diffstat (limited to 'unix')
-rw-r--r-- | unix/tclUnixFile.c | 44 | ||||
-rw-r--r-- | unix/tclUnixPort.h | 8 |
2 files changed, 50 insertions, 2 deletions
diff --git a/unix/tclUnixFile.c b/unix/tclUnixFile.c index c0d81b1..5eac978 100644 --- a/unix/tclUnixFile.c +++ b/unix/tclUnixFile.c @@ -1,4 +1,4 @@ -/* +/* * tclUnixFile.c -- * * This file contains wrappers around UNIX file handling functions. @@ -820,3 +820,45 @@ TclpUtime(pathPtr, tval) { return utime(Tcl_FSGetNativePath(pathPtr),tval); } +#ifdef __CYGWIN__ +int TclOSstat(const char *name, Tcl_StatBuf *statBuf) { + struct stat buf; + int result = stat(name, &buf); + statBuf->st_mode = buf.st_mode; + statBuf->st_ino = buf.st_ino; + statBuf->st_dev = buf.st_dev; + statBuf->st_rdev = buf.st_rdev; + statBuf->st_nlink = buf.st_nlink; + statBuf->st_uid = buf.st_uid; + statBuf->st_gid = buf.st_gid; + statBuf->st_size = buf.st_size; + statBuf->st_atime = buf.st_atime; + statBuf->st_mtime = buf.st_mtime; + statBuf->st_ctime = buf.st_ctime; + return result; +} +int TclOSlstat(const char *name, Tcl_StatBuf *statBuf) { + struct stat buf; + int result = lstat(name, &buf); + statBuf->st_mode = buf.st_mode; + statBuf->st_ino = buf.st_ino; + statBuf->st_dev = buf.st_dev; + statBuf->st_rdev = buf.st_rdev; + statBuf->st_nlink = buf.st_nlink; + statBuf->st_uid = buf.st_uid; + statBuf->st_gid = buf.st_gid; + statBuf->st_size = buf.st_size; + statBuf->st_atime = buf.st_atime; + statBuf->st_mtime = buf.st_mtime; + statBuf->st_ctime = buf.st_ctime; + return result; +} +#endif + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/unix/tclUnixPort.h b/unix/tclUnixPort.h index c1aaa63..e19a8ed 100644 --- a/unix/tclUnixPort.h +++ b/unix/tclUnixPort.h @@ -73,7 +73,13 @@ typedef off_t Tcl_SeekOffset; # define TclOSopen open #endif -#ifdef HAVE_STRUCT_STAT64 +#ifdef __CYGWIN__ +EXTERN int TclOSstat(const char *name, Tcl_StatBuf *statBuf); +EXTERN int TclOSlstat(const char *name, Tcl_StatBuf *statBuf); +#undef HAVE_ST_BLKSIZE +#define NO_FSTATFS +#undef HAVE_FTS +#elif defined(HAVE_STRUCT_STAT64) # define TclOSstat stat64 # define TclOSlstat lstat64 #else |