Seyshell
Loading...
Searching...
No Matches
Functions
utils.c File Reference

Primitives utilitaires pour la manipulation, le reformatage et la résolution canonique des chemins de fichiers. More...

#include "utils.h"
Include dependency graph for utils.c:

Functions

void format_path (char *dest, char *src, int dest_len)
 Formate un chemin source (src) pour s'assurer qu'il devienne un chemin absolu exploitable.
 
int get_name_and_parent_path_by_absolute_path (char *path, char **parent_path, char **name)
 Extrait séparément le chemin du dossier parent et le nom d'un fichier à partir d'un chemin absolu.
 
int get_dirname_and_parent_path_by_absolute_path (char *dirpath, char **parent_path, char **dirname)
 Extrait séparément le chemin du dossier parent et le nom d'un répertoire à partir d'un chemin absolu.
 
void canonicalize_path (char *path)
 Canonicalise un chemin absolu en résolvant les expressions de navigation relative "." et "..".
 

Detailed Description

Primitives utilitaires pour la manipulation, le reformatage et la résolution canonique des chemins de fichiers.

Ce fichier rassemble les fonctions de manipulation de chaînes dédiées à la gestion des chemins. Il prend en charge la conversion des chemins relatifs en chemins absolus, l'extraction des couples (Dossier parent, Cible) et l'évaluation des segments de navigation relative ("." et "..").

Function Documentation

◆ canonicalize_path()

void canonicalize_path ( char *  path)

Canonicalise un chemin absolu en résolvant les expressions de navigation relative "." et "..".

Cette fonction nettoie le chemin en appliquant un algorithme de pile (Stack) :

  • Divise le chemin en tokens séparés par des '/'.
  • Chaque dossier classique est empilé.
  • Un élément "." est simplement ignoré.
  • Un élément ".." dépile l'élément supérieur (remonte d'un niveau), sans descendre en dessous de la racine. Le chemin d'origine est ensuite réécrit proprement sous sa forme absolue finale aplatie.
Parameters
pathPointeur vers la chaîne contenant le chemin à simplifier. Modifié directement en place.

◆ format_path()

void format_path ( char *  dest,
char *  src,
int  dest_len 
)

Formate un chemin source (src) pour s'assurer qu'il devienne un chemin absolu exploitable.

  • Si le chemin source est vide, NULL ou égal à "/", la destination reçoit "/".
  • Si le chemin source est déjà absolu (commence par '/'), il est copié tel quel.
  • Si le chemin est relatif, la fonction récupère le répertoire de travail actuel ("PWD") via l'environnement pour reconstruire le chemin absolu équivalent sous la forme PWD/src.
Parameters
destTampon de destination devant recevoir le chemin absolu formaté.
srcChaîne de caractères du chemin d'origine (relatif ou absolu).
dest_lenTaille maximale allouée pour le tampon de destination (évite les dépassements).

◆ get_dirname_and_parent_path_by_absolute_path()

int get_dirname_and_parent_path_by_absolute_path ( char *  dirpath,
char **  parent_path,
char **  dirname 
)

Extrait séparément le chemin du dossier parent et le nom d'un répertoire à partir d'un chemin absolu.

Note
Cette fonction applique le même algorithme binaire de découpage que
See also
get_name_and_parent_path_by_absolute_path, mais s'applique sémantiquement aux répertoires.
Parameters
dirpathLe chemin absolu du répertoire à traiter.
parent_pathPointeur de sortie vers la chaîne allouée du dossier parent.
dirnamePointeur de sortie vers la chaîne allouée du nom du répertoire ciblé.
Returns
int 0 en cas de succès, -1 si l'entrée est NULL ou vide.

◆ get_name_and_parent_path_by_absolute_path()

int get_name_and_parent_path_by_absolute_path ( char *  path,
char **  parent_path,
char **  name 
)

Extrait séparément le chemin du dossier parent et le nom d'un fichier à partir d'un chemin absolu.

La fonction isole le dernier segment du chemin en recherchant le dernier caractère '/'.

  • Si aucun '/' n'est trouvé, le répertoire parent est défini sur le "PWD" actuel et le nom correspond au chemin brut.
  • Si le chemin se termine par un '/' optionnel, ce dernier est temporairement tronqué pour éviter une fausse interprétation.
Note
Les deux pointeurs de sortie parent_path et name reçoivent des chaînes allouées dynamiquement par strdup(). Elles doivent être libérées par l'appelant.
Parameters
pathLe chemin absolu d'origine à analyser.
parent_pathPointeur de sortie qui recevra l'adresse du chemin du dossier parent alloué.
namePointeur de sortie qui recevra l'adresse du nom isolé du fichier alloué.
Returns
int 0 en cas de succès, -1 si le paramètre path est invalide (NULL ou vide).