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:
authorBrian Dessent <brian@dessent.net>2007-09-07 04:44:27 +0400
committerBrian Dessent <brian@dessent.net>2007-09-07 04:44:27 +0400
commit6e08b2f7f86c27d8f35abc2caa2e63fb20b0c714 (patch)
tree34b39976d706be90660f62b95cc7a7e2019f7852 /winsup/cygwin/include
parente65aa07ac6fda806e128e0f72bd4315ecaa9c9fc (diff)
* include/cygwin/config.h (__getreent): Define inline version.
Diffstat (limited to 'winsup/cygwin/include')
-rw-r--r--winsup/cygwin/include/cygwin/config.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/winsup/cygwin/include/cygwin/config.h b/winsup/cygwin/include/cygwin/config.h
index e3e09f051..0c2f157f8 100644
--- a/winsup/cygwin/include/cygwin/config.h
+++ b/winsup/cygwin/include/cygwin/config.h
@@ -20,6 +20,27 @@ extern "C" {
#define _CYGWIN_CONFIG_H
#define __DYNAMIC_REENT__
+
+/* The following provides an inline version of __getreent() for newlib,
+ which will be used throughout the library whereever there is a _r
+ version of a function that takes _REENT. This saves the overhead
+ of a function call for what amounts to a simple computation.
+
+ The definition below is essentially equivalent to the one in cygtls.h
+ (&_my_tls.local_clib) however it uses a fixed precomputed
+ offset rather than dereferencing a field of a structure.
+
+ Including tlsoffets.h here in order to get this constant offset
+ tls_local_clib is a bit of a hack, but the alternative would require
+ dragging the entire definition of struct _cygtls (a large and complex
+ Cygwin internal data structure) into newlib. The machinery to
+ compute these offsets already exists for the sake of gendef so
+ we might as well just use it here. */
+
+#include "../tlsoffsets.h"
+extern char *_tlsbase __asm__ ("%fs:4");
+#define __getreent() (struct _reent *)(_tlsbase + tls_local_clib)
+
#define __FILENAME_MAX__ (260 - 1 /* NUL */)
#define _READ_WRITE_RETURN_TYPE _ssize_t
#define __LARGE64_FILES 1