ap_pstrcat génère un Warning

Questions sur le développement d'Apache et de ses modules.

Modérateur : Modérateurs

Avatar de l’utilisateur
jean++
Nouveau membre
Messages : 4
Inscription : ven. 10 déc. 2004, 9:55

Messagepar jean++ » ven. 10 déc. 2004, 10:17

Hello

Je travaille actuellement avec Apache 2 sur un système Linux. Dans le cadre d'un projet, j'ai crée un module en C pour ce serveur, que je compile avec la commande Make.

Mais lors de la compilation de ce module, j'obtient un warning que je n'arrive pas à résoudre. Voici la description du problème:

Le message est le suivant :
WARNING : assignment makes pointer from integer without a cast

Ce message est généré sur un type de ligne de code en particulier. C'est toujours le même modèle de ligne qui génère ce message. Cette ligne contient toujours une instruction apr_pstrcat. Voici un extrait du code :

new_cookie = apr_pstrcat(r->pool,
COOKIE_NAME, "=", r->uri, "; path=/",
NULL);

Détail assez particulier : lors de la compilation, lorsque l'instruction est répartie sur plusieurs lignes comme dans l'extrait ci-dessus, le compilateur génère le warning sur la ligne contenant le pointeur NULL. C'est pour cette raison que j'ai supposé que c'est le pointeur NULL qui pose problème.

Cependant, j'ai regardé plusieurs autres exemples sur internet. Apparamment, d'après ce que j'ai vu, ma syntaxe semble correcte. Et je n'arrive pas à me débarasser de ce warning.

Quelqu'un peut-il m'aider ?

Merci d'avance.

Avatar de l’utilisateur
jean++
Nouveau membre
Messages : 4
Inscription : ven. 10 déc. 2004, 9:55

Messagepar jean++ » ven. 10 déc. 2004, 11:10

Si j'ajoute ceci à ma ligne, le warning disparaît :

new_cookie = (char*)apr_pstrcat(r->pool,
COOKIE_NAME, "=", r->uri, "; path=/",
NULL);

La variable new_cookie est définie comme suit:

char* new_cookie=NULL;

Donc, apparamment, je n'utilise pas le bon format de données. Quelqu'un peut-il me dire quel type de variable je devrais utiliser pour new_cookie : char* et const char* génèrent un warning, ce qui me paraît assez curieux, vu que l'instruction apr_pstrcat a justement été crée pour gérer des chaînes de caractères.

Voici l'exemple fourni par la doc officielle d'Apache 1.3 (Trouvé au lien suivant : <a href='http://httpd.apache.org/dev/apidoc/apidoc_pool.html)' target='_blank'>http://httpd.apache.org/dev/apidoc/apidoc_pool.html)</a> :
pool *p;
char *foo;
foo = ap_pstrcat(p, "string 1", "string 2", null);

Je n'ai malheureusement pas réussi à trouver d' autres informations claires sur le sujet.

Avatar de l’utilisateur
Gandalf
Sorcier des forums
Sorcier des forums
Messages : 2528
Inscription : jeu. 04 déc. 2003, 22:58

Messagepar Gandalf » ven. 10 déc. 2004, 17:33

attention, cet exemple correspond à une ancienne version de l'APR appremment.

ap_pstrcat n'est pas pareil que apr_pstrcat ;)
Celui qui détruit quelque chose pour savoir ce que c'est, a quitté le chemin de la sagesse.

Avatar de l’utilisateur
jean++
Nouveau membre
Messages : 4
Inscription : ven. 10 déc. 2004, 9:55

Messagepar jean++ » lun. 13 déc. 2004, 9:07

attention, cet exemple correspond à une ancienne version de l'APR appremment.

ap_pstrcat n'est pas pareil que apr_pstrcat


Oui, bien sûr, j'en suis conscient. ;) Seulement, c'est le seul exemple que j'aie trouvé qui parle un peu du sujet. Jusque là, je n'ai pas réussi à trouver d'autres docs, à part les sources des différents modules, qui donnent des indications sur le jeu d'instructions d'Apache 2. Or, effectivement, les choses semblent être très différentes entre les deux versions. <_<

Donc, si quelqu'un connait une URL où je puisse trouver des réponses à mes questions, il est le bienvenu.

@+

Avatar de l’utilisateur
Madness
Membre ancien
Membre ancien
Messages : 103
Inscription : mer. 14 janv. 2004, 11:46
Localisation : ? sait pas encore

Messagepar Madness » mer. 15 déc. 2004, 10:41

juste en remarque, le coups du numero de ligne pour trouver l erreur sur le NULL ca marche pas.
Car le compilo il donne la ligne ou il en est dans l analyse.

si t avais fini ainsi :
...,NULL
);

il t aurais m is l erreur sur le ); !
de toute facon c est juste un avertissement sur un cast. ca n a d importance si tu utilise des architectures classiques...
je connais un pojet de portage d un programme C d archimede vers PC intel qui à avorté car il utiliser des integers, double ... pour des flags. Mais sur l archimede, toutes ces variables fesais le bouble de bits que leurs correspondant Intel. ca a fini en rapport d'etude pour un portage futur -> grosse reecriture.
J'adore quand un plan ce déroule sans accros ! (Hannibal A-TEAM)


Revenir vers « Développement Apache »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités