aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sysdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/sysdep.c')
-rw-r--r--gcc/ada/sysdep.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/gcc/ada/sysdep.c b/gcc/ada/sysdep.c
index 465007e..5390209 100644
--- a/gcc/ada/sysdep.c
+++ b/gcc/ada/sysdep.c
@@ -126,7 +126,7 @@ extern struct tm *localtime_r(const time_t *, struct tm *);
*/
-#if defined (WINNT) || defined (__CYGWIN__)
+#if defined (WINNT) || defined (__CYGWIN__) || defined(__DJGPP__)
const char __gnat_text_translation_required = 1;
@@ -137,6 +137,11 @@ const char __gnat_text_translation_required = 1;
#define WIN_SETMODE _setmode
#endif
+#if defined(__DJGPP__)
+#include <io.h>
+#define _setmode setmode
+#endif /* __DJGPP__ */
+
void
__gnat_set_binary_mode (int handle)
{
@@ -149,6 +154,30 @@ __gnat_set_text_mode (int handle)
WIN_SETMODE (handle, O_TEXT);
}
+#ifdef __DJGPP__
+void
+__gnat_set_mode (int handle, int mode)
+{
+ /* the values here must be synchronized with
+ System.File_Control_Block.Content_Encodding:
+
+ None = 0
+ Default_Text = 1
+ Text = 2
+ U8text = 3
+ Wtext = 4
+ U16text = 5 */
+
+ switch (mode) {
+ case 0 : setmode(handle, O_BINARY); break;
+ case 1 : setmode(handle, O_TEXT); break;
+ case 2 : setmode(handle, O_TEXT); break;
+ case 3 : setmode(handle, O_TEXT); break;
+ case 4 : setmode(handle, O_BINARY); break;
+ case 5 : setmode(handle, O_BINARY); break;
+ }
+}
+#else
void
__gnat_set_mode (int handle, int mode)
{
@@ -171,6 +200,7 @@ __gnat_set_mode (int handle, int mode)
case 5 : WIN_SETMODE (handle, _O_U16TEXT); break;
}
}
+#endif
#ifdef __CYGWIN__
@@ -795,7 +825,8 @@ __gnat_localtime_tzoff (const time_t *timer ATTRIBUTE_UNUSED,
struct tm */
#elif defined (__APPLE__) || defined (__FreeBSD__) || defined (__linux__) \
- || defined (__GLIBC__) || defined (__DragonFly__) || defined (__OpenBSD__)
+ || defined (__GLIBC__) || defined (__DragonFly__) || defined (__OpenBSD__) \
+ || defined(__DJGPP__)
{
localtime_r (timer, &tp);
*off = tp.tm_gmtoff;