diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2024-05-16 21:52:07 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2024-05-16 21:52:07 (GMT) |
commit | 85e52ccd4c8aada6660d171e91c6c603f40606bb (patch) | |
tree | c9a376e10448ab62ba2668c69bdd0a3c5c968c4a /src/common/io.c | |
parent | 049f9fdb4c4fb44ecac9ade607a8462841010716 (diff) |
Move some FS functions from io.[ch] to pathname.[ch].
Diffstat (limited to 'src/common/io.c')
-rw-r--r-- | src/common/io.c | 177 |
1 files changed, 0 insertions, 177 deletions
diff --git a/src/common/io.c b/src/common/io.c index a710721..3208a2a 100644 --- a/src/common/io.c +++ b/src/common/io.c @@ -25,21 +25,15 @@ #include <errno.h> -#include <fcntl.h> -#include <libgen.h> #include <malloc.h> #include <stdint.h> -#include <stdio.h> -#include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> -#include <sys/stat.h> #include <sys/un.h> #include "../core/logs.h" -#include "../core/params.h" @@ -290,174 +284,3 @@ bool safe_send(int sockfd, const void *buf, size_t len, int flags) return (remaining == 0); } - - -/****************************************************************************** -* * -* Paramètres : path = chemin d'accès à valider. * -* * -* Description : S'assure qu'un chemin donné existe dans le système. * -* * -* Retour : 0 si le chemin est actuellement présent, -1 sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -int ensure_path_exists(const char *path) -{ - int result; /* Bilan de l'assurance */ - char *copy; /* Chemin libérable */ - char *tmp; /* Chemin altérable */ - - copy = strdup(path); - tmp = dirname(copy); - - result = access(tmp, W_OK | X_OK); - - if (result != 0) - { - result = ensure_path_exists(tmp); - - if (result == 0) - result = mkdir(tmp, 0700); - - } - - free(copy); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : prefix = préfixe du nom du fichier temporaire à créer. * -* suffix = éventuel suffixe à coller au nom de fichier. * -* filename = chemin d'accès complet au nouveau fichier. [OUT] * -* * -* Description : Met en place un fichier temporaire. * -* * -* Retour : Flux ouvert en lecture et écriture, ou -1 en cas d'erreur. * -* * -* Remarques : - * -* * -******************************************************************************/ - -int make_tmp_file(const char *prefix, const char *suffix, char **filename) -{ - int result; /* Flux ou code à retourner */ - const char *tmpdir; /* Répertoire d'accueil */ - bool status; /* Bilan d'un consultation */ - size_t slen; /* Taille du suffixe */ - - status = g_generic_config_get_value(get_main_configuration(), MPK_TMPDIR, &tmpdir); - if (!status) return -1; - - slen = strlen(suffix); - - if (slen > 0) - asprintf(filename, "%s" G_DIR_SEPARATOR_S "%s-%d.XXXXXX.%s", tmpdir, prefix, getpid(), suffix); - else - asprintf(filename, "%s" G_DIR_SEPARATOR_S "%s-%d.XXXXXX", tmpdir, prefix, getpid()); - - result = ensure_path_exists(*filename); - - if (result == 0) - { - if (slen > 0) - result = mkstemps(*filename, slen + 1); - else - result = mkstemp(*filename); - - if (result == -1) perror("mkstemp"); - - } - - if (result == -1) - { - free(*filename); - *filename = NULL; - } - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : dest = fichier de destination de la copie. * -* src = fichier source à copier. * -* * -* Description : Copie un fichier. * -* * -* Retour : Bilan de l'opération. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool copy_file(const char *dest, const char *src) -{ - bool result; /* Bilan à retourner */ - int fd; /* Descripteur du fichier */ - struct stat info; /* Informations sur le fichier */ - int ret; /* Bilan d'un appel */ - void *data; /* Quantité de données traitées*/ - bool status; /* Bilan de la lecture */ - - result = false; - - /* Côté source */ - - fd = open(src, O_RDONLY); - if (fd == -1) - { - LOG_ERROR_N("open"); - goto exit; - } - - ret = fstat(fd, &info); - if (ret == -1) - { - LOG_ERROR_N("fstat"); - goto done; - } - - data = malloc(info.st_size); - - status = safe_read(fd, data, info.st_size); - if (!status) goto clean; - - close(fd); - - /* Côté destination */ - - fd = open(dest, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); - if (fd == -1) - { - LOG_ERROR_N("open"); - free(data); - goto exit; - } - - status = safe_write(fd, data, info.st_size); - if (!status) goto clean; - - result = true; - - clean: - - free(data); - - done: - - close(fd); - - exit: - - return result; - -} |