plug-ins: Add 'dir-make' procedure to Script-fu.
Closes: GNOME/gimp#541
Reviewer note: thanks to Stanislav Grinkov for cleaning up and reworking
a bit the patch, such as renaming the procedure to dir-make, as per
Kevin Cozens' review.
(cherry picked from commit 11906fa82c
)
This commit is contained in:
@ -83,6 +83,17 @@ portable to different operating systems.
|
||||
Close directory stream. No further calls to read-dir-entry should
|
||||
be performed.
|
||||
|
||||
(dir-make dirname . mode)
|
||||
dirname: string
|
||||
mode: integer representing permissions
|
||||
|
||||
Create the directory specified, setting the directory permissions based
|
||||
upon the optional mode argument (taking into account the current
|
||||
umask). If no mode is specified then use the default (umask)
|
||||
permissions. Returns #t if the operation succeeds, otherwise #f.
|
||||
Possible reasons for failure are that the directory already exists,
|
||||
the user is not authorized to create it, or the mode is incorrectly
|
||||
specified).
|
||||
|
||||
*Time (available if HAVE_TIME is defined in tsx.h)
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#if HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
@ -48,6 +49,7 @@ pointer foreign_diropenstream(scheme *sc, pointer args);
|
||||
pointer foreign_dirreadentry(scheme *sc, pointer args);
|
||||
pointer foreign_dirrewind(scheme *sc, pointer args);
|
||||
pointer foreign_dirclosestream(scheme *sc, pointer args);
|
||||
pointer foreign_mkdir(scheme *sc, pointer args);
|
||||
|
||||
pointer foreign_getenv(scheme *sc, pointer args);
|
||||
pointer foreign_time(scheme *sc, pointer args);
|
||||
@ -243,6 +245,41 @@ pointer foreign_dirclosestream(scheme *sc, pointer args)
|
||||
return sc->T;
|
||||
}
|
||||
|
||||
pointer foreign_mkdir(scheme *sc, pointer args)
|
||||
{
|
||||
pointer first_arg;
|
||||
pointer rest;
|
||||
pointer second_arg;
|
||||
char *dirname;
|
||||
mode_t mode;
|
||||
int retcode;
|
||||
|
||||
if (args == sc->NIL)
|
||||
return sc->F;
|
||||
|
||||
first_arg = sc->vptr->pair_car(args);
|
||||
if (!sc->vptr->is_string(first_arg))
|
||||
return sc->F;
|
||||
dirname = sc->vptr->string_value(first_arg);
|
||||
dirname = g_filename_from_utf8 (dirname, -1, NULL, NULL, NULL);
|
||||
|
||||
rest = sc->vptr->pair_cdr(args);
|
||||
if (sc->vptr->is_pair(rest)) /* optional mode argument */
|
||||
{
|
||||
second_arg = sc->vptr->pair_car(rest);
|
||||
if (!sc->vptr->is_integer(second_arg))
|
||||
return sc->F;
|
||||
mode = sc->vptr->ivalue(second_arg);
|
||||
}
|
||||
else
|
||||
mode = 0777;
|
||||
|
||||
retcode = mkdir(dirname, (mode_t)mode);
|
||||
if (retcode == 0)
|
||||
return sc->T;
|
||||
else
|
||||
return sc->F;
|
||||
}
|
||||
|
||||
pointer foreign_getenv(scheme *sc, pointer args)
|
||||
{
|
||||
@ -365,6 +402,9 @@ void init_ftx (scheme *sc)
|
||||
sc->vptr->scheme_define(sc, sc->global_env,
|
||||
sc->vptr->mk_symbol(sc,"dir-close-stream"),
|
||||
sc->vptr->mk_foreign_func(sc, foreign_dirclosestream));
|
||||
sc->vptr->scheme_define(sc, sc->global_env,
|
||||
sc->vptr->mk_symbol(sc,"dir-make"),
|
||||
sc->vptr->mk_foreign_func(sc, foreign_mkdir));
|
||||
|
||||
for (i = 0; file_type_constants[i].name != NULL; ++i)
|
||||
{
|
||||
|
Reference in New Issue
Block a user