--- gforth/mkdir.fs 2008/08/19 20:18:58 1.1 +++ gforth/mkdir.fs 2012/03/13 19:33:31 1.8 @@ -1,6 +1,6 @@ -\ socket interface +\ mkdir wrapper -\ Copyright (C) 2008 Free Software Foundation, Inc. +\ Copyright (C) 2008,2010 Free Software Foundation, Inc. \ This file is part of Gforth. @@ -17,15 +17,34 @@ \ You should have received a copy of the GNU General Public License \ along with this program. If not, see http://www.gnu.org/licenses/. -require cstr.fs -c-library mkdir -\c #include -\c #include -c-function mkdir1 mkdir a n -- n ( pathname\0 mode -- f ) -\c #include -\c #define IOR(flag) ((flag)? -512-errno : 0) -c-function f>ior IOR n -- n ( f -- ior ) - -: mkdir ( c-addr u mode -- ior ) - >r 1 tilde_cstr r> mkdir1 f>ior ; -end-c-library +\ there is now a primitive =MKDIR +[IFUNDEF] =mkdir + [IFUNDEF] c-library + \ define dummy mkdir + : =mkdir ( c-addr u mode -- ior ) + 2drop drop 0 ; + [ELSE] + require cstr.fs + c-library mkdir + \c #include + \c #include + c-function mkdir mkdir a n -- n ( pathname\0 mode -- f ) + \c #include + \c #define IOR(flag) ((flag)? -512-errno : 0) + c-function f>ior IOR n -- n ( f -- ior ) + + : =mkdir ( c-addr u mode -- ior ) + >r 1 tilde_cstr r> over >r mkdir r> free drop f>ior ; + end-c-library + [THEN] +[THEN] + +: mkdir-parents { c-addr u mode -- ior } + \G create the directory @i{c-addr u} and all its parents with + \G mode @i{mode} (modified by umask) + c-addr u begin { d: s } + s 1 /string '/' scan 2dup while ( s1 s1addr ) + c-addr tuck - mode =mkdir drop + repeat + drop 2drop + c-addr u mode =mkdir ;