]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
s-crtl.ads (mkdir): New routine, support encoding.
authorPascal Obry <obry@adacore.com>
Mon, 16 Jul 2012 12:08:15 +0000 (12:08 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 16 Jul 2012 12:08:15 +0000 (14:08 +0200)
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.

From-SVN: r189525

gcc/ada/ChangeLog
gcc/ada/a-direct.adb
gcc/ada/adaint.c
gcc/ada/adaint.h
gcc/ada/g-dirope.adb
gcc/ada/mkdir.c
gcc/ada/s-crtl.ads

index bb8aa3490185217b1adf8518b3c5a4f8ad9add00..4ccf4dcf60ac17b72375b0ea10c84e337b227dd5 100644 (file)
@@ -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.
index cac87afcbfe5f210b3e0eb696bd087d48aedf0bc..42a19b0be896784190544d799d9f21c09864a7c9 100644 (file)
@@ -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;
index b76b3c6c4ceabb394c41023c940515ac067196f6..1b65024b9432dbb552ff699e6438fda68b65165d 100644 (file)
@@ -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
index 8c46aed17734abd4984bb238d8d8a96db164822f..6097e61f8823aa12e9b48ba89a1b244e73f2877a 100644 (file)
@@ -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 *);
index d68db87a9c4f425759108a9398bb84f52464a855..e38481c8d14f24d1f6ec00a91f5810942ef57534 100644 (file)
@@ -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;
index debd8067779bd982aa9b65e1ce49f1f96de9a9fc..b8dba597240c3f799d31c985f7da27a8226522ef 100644 (file)
@@ -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- *
 /*  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);
index 345e9a570ea93357038a8e361f0de294a16545e4..c02d23023ebe66bacc858c7b46a228dc35a1342b 100644 (file)
@@ -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;