extFS-Seyshell/docs/html/utils_8c.html
2026-05-25 15:39:10 +02:00

295 lines
15 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Seyshell: src/utils.c File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Seyshell
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle"><div class="title">utils.c File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Primitives utilitaires pour la manipulation, le reformatage et la résolution canonique des chemins de fichiers.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="utils_8h_source.html">utils.h</a>&quot;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for utils.c:</div>
<div class="dyncontent">
<div class="center"><img src="utils_8c__incl.png" border="0" usemap="#asrc_2utils_8c" alt=""/></div>
</div>
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ab69c307e63e50216d3883ff4a95b99ff" id="r_ab69c307e63e50216d3883ff4a95b99ff"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8c.html#ab69c307e63e50216d3883ff4a95b99ff">format_path</a> (char *dest, char *src, int dest_len)</td></tr>
<tr class="memdesc:ab69c307e63e50216d3883ff4a95b99ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Formate un chemin source (src) pour s'assurer qu'il devienne un chemin absolu exploitable. <br /></td></tr>
<tr class="separator:ab69c307e63e50216d3883ff4a95b99ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac66022e5495a0feb8b41f0dfb9ba0ab7" id="r_ac66022e5495a0feb8b41f0dfb9ba0ab7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8c.html#ac66022e5495a0feb8b41f0dfb9ba0ab7">get_name_and_parent_path_by_absolute_path</a> (char *path, char **parent_path, char **name)</td></tr>
<tr class="memdesc:ac66022e5495a0feb8b41f0dfb9ba0ab7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extrait séparément le chemin du dossier parent et le nom d'un fichier à partir d'un chemin absolu. <br /></td></tr>
<tr class="separator:ac66022e5495a0feb8b41f0dfb9ba0ab7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a25cbf6325c786277edbc6bd9a107b461" id="r_a25cbf6325c786277edbc6bd9a107b461"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8c.html#a25cbf6325c786277edbc6bd9a107b461">get_dirname_and_parent_path_by_absolute_path</a> (char *dirpath, char **parent_path, char **dirname)</td></tr>
<tr class="memdesc:a25cbf6325c786277edbc6bd9a107b461"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extrait séparément le chemin du dossier parent et le nom d'un répertoire à partir d'un chemin absolu. <br /></td></tr>
<tr class="separator:a25cbf6325c786277edbc6bd9a107b461"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a68fcd11496e85e696054f27ea8be892a" id="r_a68fcd11496e85e696054f27ea8be892a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8c.html#a68fcd11496e85e696054f27ea8be892a">canonicalize_path</a> (char *path)</td></tr>
<tr class="memdesc:a68fcd11496e85e696054f27ea8be892a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Canonicalise un chemin absolu en résolvant les expressions de navigation relative "." et "..". <br /></td></tr>
<tr class="separator:a68fcd11496e85e696054f27ea8be892a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Primitives utilitaires pour la manipulation, le reformatage et la résolution canonique des chemins de fichiers. </p>
<p>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 ".."). </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a68fcd11496e85e696054f27ea8be892a" name="a68fcd11496e85e696054f27ea8be892a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a68fcd11496e85e696054f27ea8be892a">&#9670;&#160;</a></span>canonicalize_path()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void canonicalize_path </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>path</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Canonicalise un chemin absolu en résolvant les expressions de navigation relative "." et "..". </p>
<p>Cette fonction nettoie le chemin en appliquant un algorithme de pile (Stack) :</p><ul>
<li>Divise le chemin en tokens séparés par des '/'.</li>
<li>Chaque dossier classique est empilé.</li>
<li>Un élément "." est simplement ignoré.</li>
<li>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.</li>
</ul>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">path</td><td>Pointeur vers la chaîne contenant le chemin à simplifier. Modifié directement en place. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ab69c307e63e50216d3883ff4a95b99ff" name="ab69c307e63e50216d3883ff4a95b99ff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab69c307e63e50216d3883ff4a95b99ff">&#9670;&#160;</a></span>format_path()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void format_path </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>dest</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>src</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>dest_len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Formate un chemin source (src) pour s'assurer qu'il devienne un chemin absolu exploitable. </p>
<ul>
<li>Si le chemin source est vide, NULL ou égal à "/", la destination reçoit "/".</li>
<li>Si le chemin source est déjà absolu (commence par '/'), il est copié tel quel.</li>
<li>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 <code>PWD/src</code>.</li>
</ul>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">dest</td><td>Tampon de destination devant recevoir le chemin absolu formaté. </td></tr>
<tr><td class="paramname">src</td><td>Chaîne de caractères du chemin d'origine (relatif ou absolu). </td></tr>
<tr><td class="paramname">dest_len</td><td>Taille maximale allouée pour le tampon de destination (évite les dépassements). </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a25cbf6325c786277edbc6bd9a107b461" name="a25cbf6325c786277edbc6bd9a107b461"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a25cbf6325c786277edbc6bd9a107b461">&#9670;&#160;</a></span>get_dirname_and_parent_path_by_absolute_path()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int get_dirname_and_parent_path_by_absolute_path </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>dirpath</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char **&#160;</td>
<td class="paramname"><em>parent_path</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char **&#160;</td>
<td class="paramname"><em>dirname</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Extrait séparément le chemin du dossier parent et le nom d'un répertoire à partir d'un chemin absolu. </p>
<dl class="section note"><dt>Note</dt><dd>Cette fonction applique le même algorithme binaire de découpage que </dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="utils_8c.html#ac66022e5495a0feb8b41f0dfb9ba0ab7" title="Extrait séparément le chemin du dossier parent et le nom d&#39;un fichier à partir d&#39;un chemin absolu.">get_name_and_parent_path_by_absolute_path</a>, mais s'applique sémantiquement aux répertoires.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">dirpath</td><td>Le chemin absolu du répertoire à traiter. </td></tr>
<tr><td class="paramname">parent_path</td><td>Pointeur de sortie vers la chaîne allouée du dossier parent. </td></tr>
<tr><td class="paramname">dirname</td><td>Pointeur de sortie vers la chaîne allouée du nom du répertoire ciblé. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>int 0 en cas de succès, -1 si l'entrée est NULL ou vide. </dd></dl>
</div>
</div>
<a id="ac66022e5495a0feb8b41f0dfb9ba0ab7" name="ac66022e5495a0feb8b41f0dfb9ba0ab7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac66022e5495a0feb8b41f0dfb9ba0ab7">&#9670;&#160;</a></span>get_name_and_parent_path_by_absolute_path()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int get_name_and_parent_path_by_absolute_path </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>path</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char **&#160;</td>
<td class="paramname"><em>parent_path</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char **&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Extrait séparément le chemin du dossier parent et le nom d'un fichier à partir d'un chemin absolu. </p>
<p>La fonction isole le dernier segment du chemin en recherchant le dernier caractère '/'.</p><ul>
<li>Si aucun '/' n'est trouvé, le répertoire parent est défini sur le "PWD" actuel et le nom correspond au chemin brut.</li>
<li>Si le chemin se termine par un '/' optionnel, ce dernier est temporairement tronqué pour éviter une fausse interprétation.</li>
</ul>
<dl class="section note"><dt>Note</dt><dd>Les deux pointeurs de sortie <code>parent_path</code> et <code>name</code> reçoivent des chaînes allouées dynamiquement par <code>strdup()</code>. Elles doivent être libérées par l'appelant.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">path</td><td>Le chemin absolu d'origine à analyser. </td></tr>
<tr><td class="paramname">parent_path</td><td>Pointeur de sortie qui recevra l'adresse du chemin du dossier parent alloué. </td></tr>
<tr><td class="paramname">name</td><td>Pointeur de sortie qui recevra l'adresse du nom isolé du fichier alloué. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>int 0 en cas de succès, -1 si le paramètre path est invalide (NULL ou vide). </dd></dl>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>