aboutsummaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog9
-rw-r--r--winsup/cygwin/dir.cc82
-rw-r--r--winsup/cygwin/include/cygwin/version.h32
-rw-r--r--winsup/cygwin/include/sys/dirent.h2
4 files changed, 69 insertions, 56 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 93a0b93..2c18ff8 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,14 @@
2005-12-05 Christopher Faylor <cgf@timesys.com>
+ * dir.cc (readdir_workdir): Only fill out d_ino when linked into older
+ app.
+ * include/cygwin/version.h: Bump api minor number to 147, reflecting
+ obsolescence of d_ino.
+ (CYGWIN_VERSION_USER_API_VERSION_COMBINED): New convenience macro.
+ (CYGWIN_VERSION_CHECK_FOR_NEEDS_D_INO): New convenience macro.
+
+2005-12-05 Christopher Faylor <cgf@timesys.com>
+
Remove unneeded whitespace.
* cygtls.cc (_cygtls::set_state): Delete.
(_cygtls::reset_exception): Ditto.
diff --git a/winsup/cygwin/dir.cc b/winsup/cygwin/dir.cc
index 6faddf3..a5ac1a2 100644
--- a/winsup/cygwin/dir.cc
+++ b/winsup/cygwin/dir.cc
@@ -24,6 +24,8 @@ details. */
#include "dtable.h"
#include "cygheap.h"
#include "cygtls.h"
+#include "perprocess.h"
+#include "cygwin/version.h"
extern "C" int
dirfd (DIR *dir)
@@ -99,43 +101,49 @@ readdir_worker (DIR *dir, dirent *de)
}
if (!res)
- {
- /* Compute d_ino by combining filename hash with the directory hash
- (which was stored in dir->__d_dirhash when opendir was called). */
- if (de->d_name[0] == '.')
- {
- if (de->d_name[1] == '\0')
- {
- de->d_ino = dir->__d_dirhash;
- dir->__flags |= dirent_saw_dot;
- }
- else if (de->d_name[1] != '.' || de->d_name[2] != '\0')
- goto hashit;
- else
- {
- dir->__flags |= dirent_saw_dot_dot;
- char *p, up[strlen (dir->__d_dirname) + 1];
- strcpy (up, dir->__d_dirname);
- if (!(p = strrchr (up, '\\')))
- goto hashit;
- *p = '\0';
- if (!(p = strrchr (up, '\\')))
- de->d_ino = hash_path_name (0, ".");
- else
- {
- *p = '\0';
- de->d_ino = hash_path_name (0, up);
- }
- }
- }
- else
- {
- hashit:
- __ino64_t dino = hash_path_name (dir->__d_dirhash, "\\");
- de->d_ino = hash_path_name (dino, de->d_name);
- }
- de->__ino32 = de->d_ino; // for legacy applications
- }
+ if (!CYGWIN_VERSION_CHECK_FOR_NEEDS_D_INO)
+ {
+ de->__deprecated_d_ino = 0;
+ de->__ino32 = 0;
+ }
+ else
+ {
+ /* Compute __deprecated_d_ino by combining filename hash with the directory hash
+ (which was stored in dir->__d_dirhash when opendir was called). */
+ if (de->d_name[0] == '.')
+ {
+ if (de->d_name[1] == '\0')
+ {
+ de->__deprecated_d_ino = dir->__d_dirhash;
+ dir->__flags |= dirent_saw_dot;
+ }
+ else if (de->d_name[1] != '.' || de->d_name[2] != '\0')
+ goto hashit;
+ else
+ {
+ dir->__flags |= dirent_saw_dot_dot;
+ char *p, up[strlen (dir->__d_dirname) + 1];
+ strcpy (up, dir->__d_dirname);
+ if (!(p = strrchr (up, '\\')))
+ goto hashit;
+ *p = '\0';
+ if (!(p = strrchr (up, '\\')))
+ de->__deprecated_d_ino = hash_path_name (0, ".");
+ else
+ {
+ *p = '\0';
+ de->__deprecated_d_ino = hash_path_name (0, up);
+ }
+ }
+ }
+ else
+ {
+ hashit:
+ __ino64_t dino = hash_path_name (dir->__d_dirhash, "\\");
+ de->__deprecated_d_ino = hash_path_name (dino, de->d_name);
+ }
+ de->__ino32 = de->__deprecated_d_ino; // for legacy applications
+ }
return res;
}
diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h
index 9511d92..d40dd87 100644
--- a/winsup/cygwin/include/cygwin/version.h
+++ b/winsup/cygwin/include/cygwin/version.h
@@ -63,43 +63,38 @@ details. */
#define CYGWIN_VERSION_DLL_BAD_SIGNAL_MASK 19005
+#define CYGWIN_VERSION_USER_API_VERSION_COMBINED \
+ CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor)
+
/* API versions <= this had a termios structure whose members were
too small to accomodate modern settings. */
#define CYGWIN_VERSION_DLL_OLD_TERMIOS 5
#define CYGWIN_VERSION_DLL_IS_OLD_TERMIOS \
- (CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) <= \
- CYGWIN_VERSION_DLL_OLD_TERMIOS)
+ (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= CYGWIN_VERSION_DLL_OLD_TERMIOS)
#define CYGWIN_VERSION_DLL_MALLOC_ENV 28
/* Old APIs had getc/putc macros that conflict with new CR/LF
handling in the stdio buffers */
#define CYGWIN_VERSION_OLD_STDIO_CRLF_HANDLING \
- (CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) <= \
- 20)
+ (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 20)
#define CYGWIN_VERSION_CHECK_FOR_S_IEXEC \
- (CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) >= \
- 36)
+ (CYGWIN_VERSION_USER_API_VERSION_COMBINED >= 36)
#define CYGWIN_VERSION_CHECK_FOR_OLD_O_NONBLOCK \
- (CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) <= \
- 28)
+ (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 28)
#define CYGWIN_VERSION_CHECK_FOR_USING_BIG_TYPES \
- (CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) >= \
- 79)
+ (CYGWIN_VERSION_USER_API_VERSION_COMBINED >= 79)
#define CYGWIN_VERSION_CHECK_FOR_USING_ANCIENT_MSGHDR \
- (CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) <= \
- 138)
+ (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 138)
#define CYGWIN_VERSION_CHECK_FOR_USING_WINSOCK1_VALUES \
- (CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) <= \
- 138)
+ (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 138)
- /* We used to use the DLL major/minor to track
- non-backward-compatible interface changes to the API. Now we
- use an API major/minor number for this purpose. */
+#define CYGWIN_VERSION_CHECK_FOR_NEEDS_D_INO \
+ (CYGWIN_VERSION_USER_API_VERSION_COMBINED < 147)
/* API_MAJOR 0.0: Initial version. API_MINOR changes:
1: Export cygwin32_ calls as cygwin_ as well.
@@ -285,12 +280,13 @@ details. */
145: Add MAP_NORESERVE flag to mmap.
146: Change SI_USER definition. FIXME: Need to develop compatibility macro
for this?
+ 147: Eliminate problematic d_ino from dirent structure.
*/
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
#define CYGWIN_VERSION_API_MAJOR 0
-#define CYGWIN_VERSION_API_MINOR 146
+#define CYGWIN_VERSION_API_MINOR 147
/* There is also a compatibity version number associated with the
shared memory regions. It is incremented when incompatible
diff --git a/winsup/cygwin/include/sys/dirent.h b/winsup/cygwin/include/sys/dirent.h
index 5eafbc2..50cde28 100644
--- a/winsup/cygwin/include/sys/dirent.h
+++ b/winsup/cygwin/include/sys/dirent.h
@@ -20,7 +20,7 @@
struct dirent
{
long d_version; /* Used since Cygwin 1.3.3. */
- __ino64_t d_ino; /* still junk but with more bits */
+ __ino64_t __deprecated_d_ino; /* still junk but with more bits */
long d_fd; /* File descriptor of open directory.
Used since Cygwin 1.3.3. */
unsigned __ino32;