Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Ruby ext en C] [BUG] Bus Error | Segmentation fault

13 réponses
Avatar
pere.noel
déjà la différence entre Bus Error et Segmentation fault est-elle
significative ?

je suis tjs dans mon ext ruby en C, au 1ier appel de fonction
CoreFundation.

apparemment il y a un argument de la fonction
"CFURLCreateWithFileSystemPath" qui ne "passe pas" au run time :

VALUE m_raliasfile_init(VALUE self, VALUE alias_path)
{
///Users/yvon/Desktop/alias_good
printf("From C => alias_path : %s\n", StringValuePtr(alias_path));
rb_iv_set(self, "@alias_path", alias_path);
Boolean NO=(Boolean)Qfalse;
CFURLRef url = NULL;
url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
(CFStringRef)alias_path, 0, NO);
if (url != NULL) {
printf("From C => url != NULL\n");
}
return self;
}

c'est "(CFStringRef)alias_path" bien sûr j'ai essyé autre chose, par ex
"(CFStringRef)StringValuePtr(alias_path)" sans succes...

--
une bévue

3 réponses

1 2
Avatar
luc
Une bévue wrote:

le "Boolean isDirectory" est du standard C (???)


Pour être tout à fait exact, le C standard n'a de type booléen que
depuis C99 (_Bool et la macro bool). Boolean est un type spécifique à
MacOS (par opposition à spécifique au C standard) mais qui est défini
comme un type "intégral" C (un typedef). CFBoolean lui est un type
CoreFoundation opaque qui permet de wrapper un Boolean intégral,
généralement pour pouvoir l'utiliser dans une collection du genre
CFArray, CFDictionary et compagnie.

là la page en question est fautive alors de passer ce "NO" ???

c'est un "coup de bol" si ça marche (ie parce que c'est un NO qui est
passé) avec un YES ça n'aurait pas marché ???


Ca aurait peu-être marché, ou pas, en fonction la manière dont est testé
le flag en interne. Pour une valeur NO/Qfalse/false tout le monde a
l'air d'être à peu près d'accord, mais pas pour YES/Qtrue/true.

Donc on pourrait éventuellement dire qu'utiliser les constantes NO,
Qfalse et false de manière interchangeable est possible quoique pas très
propre, utiliser les constantes YES, Qtrue et true de manière
interchangeable est une cause de bug quasi assurée, de même qu'utiliser
des variables de types BOOL, VALUE et Boolean de manière interchangeable
puisque leur valeur n'est pas connue à l'avance.

--
Luc Heinrich

Avatar
pere.noel
Eric Levenez wrote:

ah bon tu veux bien dire la version #include "nom", j'aurais cru que le


Pourquoi croyais-tu cela ?


parce que c'est côté user ??? je pensait que le path n'était que "." ;-)

mais bon, ça m'arrange, quand ma classe serait terminéz, il faudra bien
que je la mette dans un endroit convenable à ruby...

mais je n'en suis pas là )))
--
une bévue


Avatar
pere.noel
Luc Heinrich wrote:

le "Boolean isDirectory" est du standard C (???)


Pour être tout à fait exact, le C standard n'a de type booléen que
depuis C99 (_Bool et la macro bool). Boolean est un type spécifique à
MacOS (par opposition à spécifique au C standard) mais qui est défini
comme un type "intégral" C (un typedef). CFBoolean lui est un type
CoreFoundation opaque qui permet de wrapper un Boolean intégral,
généralement pour pouvoir l'utiliser dans une collection du genre
CFArray, CFDictionary et compagnie.

là la page en question est fautive alors de passer ce "NO" ???

c'est un "coup de bol" si ça marche (ie parce que c'est un NO qui est
passé) avec un YES ça n'aurait pas marché ???


Ca aurait peu-être marché, ou pas, en fonction la manière dont est testé
le flag en interne. Pour une valeur NO/Qfalse/false tout le monde a
l'air d'être à peu près d'accord, mais pas pour YES/Qtrue/true.

Donc on pourrait éventuellement dire qu'utiliser les constantes NO,
Qfalse et false de manière interchangeable est possible quoique pas très
propre, utiliser les constantes YES, Qtrue et true de manière
interchangeable est une cause de bug quasi assurée, de même qu'utiliser
des variables de types BOOL, VALUE et Boolean de manière interchangeable
puisque leur valeur n'est pas connue à l'avance.



philosophiquement parlant :

on connaît toujours mieux le faux que le vrai ;-)

parler c'est mentir...
--
une bévue


1 2