aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog13
-rw-r--r--gcc/ada/a-direct.adb45
-rw-r--r--gcc/ada/adaint.c2
-rw-r--r--gcc/ada/adaint.h2
-rw-r--r--gcc/ada/g-dirope.adb7
-rw-r--r--gcc/ada/mkdir.c12
-rw-r--r--gcc/ada/s-crtl.ads7
7 files changed, 65 insertions, 23 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index bb8aa34..4ccf4dc 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,16 @@
+2012-07-16 Pascal Obry <obry@adacore.com>
+
+ * s-crtl.ads (mkdir): New routine, support encoding.
+ * adaint.h (__gnat_mkdir): Update spec to pass encoding.
+ * mkdir.c (__gnat_mkdir): Add encoding parameter.
+ * a-direct.adb (Create_Directory): Use CRTL.mkdir, parse encoding
+ in form parameter.
+ * g-dirope.adb (Make_Dir): Update to pass encoding parameter.
+
+2012-07-16 Pascal Obry <obry@adacore.com>
+
+ * adaint.c: Minor reformatting.
+
2012-07-16 Steven Bosscher <steven@gcc.gnu.org>
* gcc-interface/utils.c: Include timevar.h.
diff --git a/gcc/ada/a-direct.adb b/gcc/ada/a-direct.adb
index cac87af..42a19b0 100644
--- a/gcc/ada/a-direct.adb
+++ b/gcc/ada/a-direct.adb
@@ -395,13 +395,8 @@ package body Ada.Directories is
(New_Directory : String;
Form : String := "")
is
- pragma Unreferenced (Form);
-
C_Dir_Name : constant String := New_Directory & ASCII.NUL;
- function mkdir (Dir_Name : String) return Integer;
- pragma Import (C, mkdir, "__gnat_mkdir");
-
begin
-- First, the invalid case
@@ -410,10 +405,37 @@ package body Ada.Directories is
"invalid new directory path name """ & New_Directory & '"';
else
- if mkdir (C_Dir_Name) /= 0 then
- raise Use_Error with
- "creation of new directory """ & New_Directory & """ failed";
- end if;
+ -- Acquire setting of encoding parameter
+
+ declare
+ Formstr : constant String := To_Lower (Form);
+
+ Encoding : CRTL.Filename_Encoding;
+ -- Filename encoding specified into the form parameter
+
+ V1, V2 : Natural;
+
+ begin
+ Form_Parameter (Formstr, "encoding", V1, V2);
+
+ if V1 = 0 then
+ Encoding := CRTL.Unspecified;
+
+ elsif Formstr (V1 .. V2) = "utf8" then
+ Encoding := CRTL.UTF8;
+
+ elsif Formstr (V1 .. V2) = "8bits" then
+ Encoding := CRTL.ASCII_8bits;
+
+ else
+ raise Use_Error with "invalid Form";
+ end if;
+
+ if CRTL.mkdir (C_Dir_Name, Encoding) /= 0 then
+ raise Use_Error with
+ "creation of new directory """ & New_Directory & """ failed";
+ end if;
+ end;
end if;
end Create_Directory;
@@ -425,8 +447,6 @@ package body Ada.Directories is
(New_Directory : String;
Form : String := "")
is
- pragma Unreferenced (Form);
-
New_Dir : String (1 .. New_Directory'Length + 1);
Last : Positive := 1;
Start : Positive := 1;
@@ -487,7 +507,8 @@ package body Ada.Directories is
"file """ & New_Dir (1 .. Last) & """ already exists";
else
- Create_Directory (New_Directory => New_Dir (1 .. Last));
+ Create_Directory
+ (New_Directory => New_Dir (1 .. Last), Form => Form);
end if;
end if;
end loop;
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index b76b3c6..1b65024 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -80,10 +80,10 @@ extern "C" {
#ifdef IN_RTS
#include "tconfig.h"
#include "tsystem.h"
-
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
+
#ifdef VMS
#include <unixio.h>
#endif
diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h
index 8c46aed..6097e61 100644
--- a/gcc/ada/adaint.h
+++ b/gcc/ada/adaint.h
@@ -120,7 +120,7 @@ extern int __gnat_symlink (char *, char *);
extern int __gnat_try_lock (char *, char *);
extern int __gnat_open_new (char *, int);
extern int __gnat_open_new_temp (char *, int);
-extern int __gnat_mkdir (char *);
+extern int __gnat_mkdir (char *, int);
extern int __gnat_stat (char *,
GNAT_STRUCT_STAT *);
extern int __gnat_unlink (char *);
diff --git a/gcc/ada/g-dirope.adb b/gcc/ada/g-dirope.adb
index d68db87..e38481c 100644
--- a/gcc/ada/g-dirope.adb
+++ b/gcc/ada/g-dirope.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1998-2010, AdaCore --
+-- Copyright (C) 1998-2012, AdaCore --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -605,11 +605,8 @@ package body GNAT.Directory_Operations is
procedure Make_Dir (Dir_Name : Dir_Name_Str) is
C_Dir_Name : constant String := Dir_Name & ASCII.NUL;
- function mkdir (Dir_Name : String) return Integer;
- pragma Import (C, mkdir, "__gnat_mkdir");
-
begin
- if mkdir (C_Dir_Name) /= 0 then
+ if CRTL.mkdir (C_Dir_Name, Unspecified) /= 0 then
raise Directory_Error;
end if;
end Make_Dir;
diff --git a/gcc/ada/mkdir.c b/gcc/ada/mkdir.c
index debd806..b8dba59 100644
--- a/gcc/ada/mkdir.c
+++ b/gcc/ada/mkdir.c
@@ -6,7 +6,7 @@
* *
* C Implementation File *
* *
- * Copyright (C) 2002-2009, Free Software Foundation, Inc. *
+ * Copyright (C) 2002-2012, Free Software Foundation, Inc. *
* *
* GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- *
@@ -58,14 +58,20 @@
/* This function provides a portable binding to the mkdir function. */
int
-__gnat_mkdir (char *dir_name)
+__gnat_mkdir (char *dir_name, int encoding ATTRIBUTE_UNUSED)
{
#if defined (__vxworks) && !(defined (__RTP__) && (_WRS_VXWORKS_MINOR != 0))
return mkdir (dir_name);
#elif defined (__MINGW32__)
TCHAR wname [GNAT_MAX_PATH_LEN + 2];
- S2WSC (wname, dir_name, GNAT_MAX_PATH_LEN + 2);
+ if (encoding == Encoding_Unspecified)
+ S2WSC (wname, dir_name, GNAT_MAX_PATH_LEN);
+ else if (encoding == Encoding_UTF8)
+ S2WSU (wname, dir_name, GNAT_MAX_PATH_LEN);
+ else
+ S2WS (wname, dir_name, GNAT_MAX_PATH_LEN);
+
return _tmkdir (wname);
#else
return mkdir (dir_name, S_IRWXU | S_IRWXG | S_IRWXO);
diff --git a/gcc/ada/s-crtl.ads b/gcc/ada/s-crtl.ads
index 345e9a5..c02d230 100644
--- a/gcc/ada/s-crtl.ads
+++ b/gcc/ada/s-crtl.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2003-2009, Free Software Foundation, Inc. --
+-- Copyright (C) 2003-2012, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -165,6 +165,11 @@ package System.CRTL is
function chdir (dir_name : String) return int;
pragma Import (C, chdir, "__gnat_chdir");
+ function mkdir
+ (dir_name : String;
+ encoding : Filename_Encoding := Unspecified) return int;
+ pragma Import (C, mkdir, "__gnat_mkdir");
+
function setvbuf
(stream : FILEs;
buffer : chars;