diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile.am | 5 | ||||
| -rwxr-xr-x | src/common/Makefile.am | 1 | ||||
| -rw-r--r-- | src/common/xdg.c (renamed from src/xdg.c) | 98 | ||||
| -rw-r--r-- | src/common/xdg.h (renamed from src/xdg.h) | 6 | ||||
| -rw-r--r-- | src/configuration.c | 2 | 
5 files changed, 102 insertions, 10 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 20db26a..623506e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -75,13 +75,12 @@ libchrysaplugin_la_LIBADD =						\  # Programme principal  ############################################################ -chrysalide_SOURCES = 						\ +chrysalide_SOURCES = 					\  	configuration.h configuration.c		\  	editor.h editor.c					\  	main.c								\  	params.h params.c					\ -	project.h project.c					\ -	xdg.h xdg.c +	project.h project.c  INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/intl $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) `pkg-config --cflags gthread-2.0` $(LIBPYTHON_CFLAGS) diff --git a/src/common/Makefile.am b/src/common/Makefile.am index 9232fc4..d074200 100755 --- a/src/common/Makefile.am +++ b/src/common/Makefile.am @@ -11,6 +11,7 @@ libcommon_la_SOURCES =					\  	leb128.h leb128.c					\  	macros.h							\  	net.h net.c							\ +	xdg.h xdg.c							\  	xml.h xml.c  libcommon_la_LDFLAGS = $(LIBGTK_LIBS) $(LIBXML_LIBS) diff --git a/src/xdg.c b/src/common/xdg.c index 6541e89..712f1c8 100644 --- a/src/xdg.c +++ b/src/common/xdg.c @@ -25,9 +25,12 @@  #include <dirent.h> +#include <glib.h>  #include <malloc.h> +#include <stdio.h>  #include <stdlib.h>  #include <string.h> +#include <sys/stat.h> @@ -67,8 +70,8 @@ char *get_xdg_config_dir(const char *suffix)              result = (char *)calloc(strlen(env) + 2 + strlen(suffix) + 1, sizeof(char));              strcpy(result, env); -            if (env[strlen(env) - 1] != '/') -                strcat(result, "/"); +            if (env[strlen(env) - 1] != G_DIR_SEPARATOR) +                strcat(result, G_DIR_SEPARATOR_S);              strcat(result, ".");              strcat(result, suffix); @@ -86,14 +89,15 @@ char *get_xdg_config_dir(const char *suffix)          env = getenv("HOME");          if (env == NULL || env[0] == '\0') return NULL; -        result = (char *)calloc(strlen(env) + 1 + strlen(".config/") + strlen(suffix) + 1, sizeof(char)); +        result = (char *)calloc(strlen(env) + 1 + strlen(".config" G_DIR_SEPARATOR_S) +                                + strlen(suffix) + 1, sizeof(char));          strcpy(result, env); -        if (env[strlen(env) - 1] != '/') -            strcat(result, "/"); +        if (env[strlen(env) - 1] != G_DIR_SEPARATOR) +            strcat(result, G_DIR_SEPARATOR_S); -        strcat(result, ".config/"); +        strcat(result, ".config" G_DIR_SEPARATOR_S);          strcat(result, suffix);      } @@ -101,3 +105,85 @@ char *get_xdg_config_dir(const char *suffix)      return result;  } + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : path = chemin d'accès avec répertoires.                      * +*                                                                             * +*  Description : S'assure que le chemin fourni est bien en place.             * +*                                                                             * +*  Retour      : Bilan de l'opération.                                        * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +bool mkpath(const char *path) +{ +    char tmp[PATH_MAX];                     /* Recopie de travail          */ +    size_t len;                             /* Taille du chemin fourni     */ +    char *iter;                             /* Boucle de parcours          */ +    struct stat info;                       /* Information sur l'existant  */ +    int ret;                                /* Bilan d'un appel système    */ + +    snprintf(tmp, PATH_MAX, "%s", path); +    len = strlen(tmp); + +    /* Le chemin fournit ne contient que des répertoires ? */ +    if (tmp[len - 1] == G_DIR_SEPARATOR) +        tmp[len - 1] = '\0'; + +    /* Sinon, on supprime le dernier élément, qui est un fichier */ +    else +    { +        iter = strrchr(tmp, G_DIR_SEPARATOR); +        if (iter == NULL) return true; + +        *iter = '\0'; + +    } + +    for(iter = tmp + 1; *iter; iter++) +        if(*iter == G_DIR_SEPARATOR) +        { +            *iter = '\0'; + +            /* Analyse de l'existant */ +            if (stat(tmp, &info) == 0) +            { +                if (S_ISDIR(info.st_mode) == 0) +                    return false; +                else +                { +                    *iter = G_DIR_SEPARATOR; +                    continue; +                } +            } + +            ret = mkdir(tmp, S_IRWXU); +            if (ret != 0) +            { +                perror("mkdir"); +                return false; +            } + +            *iter = G_DIR_SEPARATOR; + +        } + +    /* Analyse de l'existant */ +    if (stat(tmp, &info) == 0) +    { +        if (S_ISDIR(info.st_mode) == 0) +            return false; +        else +            return true; +    } + +    ret = mkdir(tmp, S_IRWXU); +    if (ret != 0) perror("mkdir"); + +    return (ret == 0); + +} diff --git a/src/xdg.h b/src/common/xdg.h index c8cd97d..78aa5ca 100644 --- a/src/xdg.h +++ b/src/common/xdg.h @@ -25,10 +25,16 @@  #define _XDG_H +#include <stdbool.h> + +  /* Détermine le chemin d'un répertoire selon les specs. XDG. */  char *get_xdg_config_dir(const char *); +/* S'assure que le chemin fourni est bien en place. */ +bool mkpath(const char *); +  #endif  /* _XDG_H */ diff --git a/src/configuration.c b/src/configuration.c index 1369159..aba061f 100644 --- a/src/configuration.c +++ b/src/configuration.c @@ -32,8 +32,8 @@  #include <sys/stat.h> -#include "xdg.h"  #include "common/extstr.h" +#include "common/xdg.h"  #include "common/xml.h"  | 
