OVH Cloud OVH Cloud

path limite de longueur sur MacOS X 10.4+ ???

32 réponses
Avatar
pere.noel
y a t'il une limite de longuer pour un path (absolu) sur MacOS X 10.4+
???

je suis certain que oui, mais laquelle ?

--
une bévue

10 réponses

1 2 3 4
Avatar
FiLH
(Une bévue) writes:

FiLH wrote:

Well... en unix posix on a des macros genre _POSIX_MAX_PATH_LEN_ (à
vérifier dans la norme).


ok, bonne info, merci !

Maintenant... tu viens de découvrir la cause numéro 1 des bugs, tour de
sécurités, défauts de portabilité, plantages : l'allocation statique.


ouais surtout que je suis un complet débutant en C ...


Là c'est pas du C.

Principe de programmation : à priori toute constante est une cause de
bug ou de fonctionnalité foireuse (pourquoi je ne peux rentrer que
1000 objets dans le machin et pas 1010 ? Parce que le programmeur il a
mit 1000 à un endroit parce qu'il pensait qu'on n'aurait jamais besoin
de plus), pourquoi limiter les noms à 32 car quand on reçoit des
malgaches hein ?

Il y a deux contournements :

- passer par de l'allocation dynamique. C'est pas trop compliqué, mais
il faut la patience de le faire. Dans 90% des cas l'utilisation d'une
taille fixe résulte d'une sous évaluation (bahh allez personne n'aura
jamais besoin de plus de 640ko de mémoire..) fantaisiste et trop rapide.

- passer par des macros, et ce principalement pour des choses qui
concernent le système qui lui contient un certain nombre de choses
fixes.

FiLH






--
FiLH photography. A taste of freedom in a conventional world.
Web: http://www.filh.org e-mail
FAQ fr.rec.photo : http://frp.parisv.com/
Sitafoto la photo a Bordeaux : http://sitafoto.free.fr/


Avatar
pere.noel
FiLH wrote:

- passer par de l'allocation dynamique. C'est pas trop compliqué, mais
il faut la patience de le faire.


là, c'est vrai il faut de la patience...

Dans 90% des cas l'utilisation d'une
taille fixe résulte d'une sous évaluation (bahh allez personne n'aura
jamais besoin de plus de 640ko de mémoire..) fantaisiste et trop rapide.


ma taille fixe pour un file name, je l'ai mise à 1024, ce qui fait 1023
octets utiles en UTF16 soit 1 de plus que ce que donne pour max, Apple.

par contre, provisoirement, pour un full path j'ai mis en fixe 4096,
soit 4 X sizeof(file name), qui peut devenir court si un chinois utilise
des noms de dossier/fichiers en big5, (je ne sais si cela se pratique,
j'aimerais bien faire un p'tit essai sur ma béquanne d'ailleurs) là
l'alloc dynamique pourra m'être utile.
--
une bévue

Avatar
FiLH
(Une bévue) writes:

FiLH wrote:

- passer par de l'allocation dynamique. C'est pas trop compliqué, mais
il faut la patience de le faire.


là, c'est vrai il faut de la patience...

Dans 90% des cas l'utilisation d'une
taille fixe résulte d'une sous évaluation (bahh allez personne n'aura
jamais besoin de plus de 640ko de mémoire..) fantaisiste et trop rapide.


ma taille fixe pour un file name, je l'ai mise à 1024, ce qui fait 1023


Non. Utilises les macros de l'os c'est fait pour ça. Tout autre valeur
est une erreur et une source de bug.

FiLH


--
FiLH photography. A taste of freedom in a conventional world.
Web: http://www.filh.org e-mail
FAQ fr.rec.photo : http://frp.parisv.com/
Sitafoto la photo a Bordeaux : http://sitafoto.free.fr/


Avatar
pere.noel
FiLH wrote:


Non. Utilises les macros de l'os c'est fait pour ça. Tout autre valeur
est une erreur et une source de bug.


où est-ce que je trouve ça ? comment utilise-t'on ces "macros de l'OS"
???


--
une bévue

Avatar
Eric Jacoboni
(Une bévue) writes:


où est-ce que je trouve ça ? comment utilise-t'on ces "macros de l'OS"
???


man getconf, par exemple ?

% getconf PATH_MAX /
1024

--

Avatar
pere.noel
Eric Jacoboni wrote:

man getconf, par exemple ?


ok; merci, je ne connaissais pas getconf...

% getconf PATH_MAX /
1024


euh ? j'ai aussi :

getconf NAME_MAX /
255


donc, d'après la TN 2124, ces résultats sont en caractères pas en
octets...

je retiens que PATH_MAX == 4 X NAME_MAX ce que j'ai fait, me reste à
savoir comment appeller ça depuis C, j'imagine qu'il y a un header
qqpart...
--
une bévue

Avatar
Eric Jacoboni
(Une bévue) writes:

je retiens que PATH_MAX == 4 X NAME_MAX ce que j'ai fait, me reste à
savoir comment appeller ça depuis C, j'imagine qu'il y a un header
qqpart...


sys/syslimits.h, ou limits.h pour les valeurs POSIX.

--

Avatar
pere.noel
Stephane Madrau wrote:


Pour illustrer, d'ailleurs:
http://rentzsch.com/macosx/pathmaxBlackholing


ben oui, si je cherche ça, c'est justement pour utiliser des FSRef...

donc je resterai en NAME_MAX == 1024 octets ça a l'avantage d'être fixe
et d'être OK côté FSRef.

et PATH_MIN == 4 X NAME_MAX comme point de départ + alloc dynamique
derrière.
--
une bévue

Avatar
Eric Jacoboni
Eric Jacoboni writes:


sys/syslimits.h, ou limits.h pour les valeurs POSIX.


Tu as aussi pathconf(2), qui est justement fait pour ça :

$ cat bla.c
#include <unistd.h>
#include <stdio.h>

int main(void) {
long path_max = pathconf("/", _PC_PATH_MAX);
printf("%ldn", path_max);
return 0;
}


--

Avatar
FiLH
(Une bévue) writes:

FiLH wrote:


Non. Utilises les macros de l'os c'est fait pour ça. Tout autre valeur
est une erreur et une source de bug.


où est-ce que je trouve ça ?


Dans les headers systèmes usuels

comment utilise-t'on ces "macros de l'OS"
???


#include <sys/param.h>

Par exemple.

FiLH


--
FiLH photography. A taste of freedom in a conventional world.
Web: http://www.filh.org e-mail
FAQ fr.rec.photo : http://frp.parisv.com/
Sitafoto la photo a Bordeaux : http://sitafoto.free.fr/


1 2 3 4