Re: bug d'interfacage avec le c

Ali Bendriss <[email protected]>
Newsgroups gmane.comp.lang.ada.france
Organization The Dementia Research Centre
Message-ID <[email protected]>
Salut,

tu peux essayer la modif en attachement sur to code.

Sinon, la page de manuel de mon system (man inet_addr) precise que 
 The inet_addr() function  is an obsolete interface to inet_aton(),  described  
immediately  above;  it  is  obsolete  because  -1  is  a  valid  address        
(255.255.255.255), and inet_aton() provides a cleaner way to indicate error 
return.

Je ne pense pas que adasockets utilise inet_addr, as tu essaye les examples du 
package ? 

On Thursday 07 June 2007 12:20, Thomas De Contes wrote:
> Le mercredi, 6 juin 2007, à 15:48 Europe/Paris, Thomas De Contes a
>
> écrit :
> > Le mardi, 5 juin 2007, à 17:44 Europe/Paris, Thomas Quinot a écrit :
> >> J'aurais tendance à vérifier qu'il n'y a pas un bug côté utilisateur
> >
> > ok, sur [email protected] qqn m'a dit à peu près ça
> >
> >
> > j'ai deja signalé le pb à un moment, et je ne sais plus les
> > circonstances mais j'avais cru comprendre à ce moment là d'après les
> > réponses que j'ai eu que le pb n'était que sous mac os x
> >
> > http://tDeContes.hd.free.fr/mise-a-disposition/archives/systeme/
> > composants%20systeme/compilateur%20ada/adasockets-1.8.4.7.tar.gz
>
> sur [email protected] , John B. Matthews MD m'a dit :
> > Recall that inet_addr returns an unsigned long.
> > Your code had the effect of converting the unsigned long to a pointer
> > to a record.
>
> extrait de v.adb :
> >    type In_Addr is record
> >       S_B1, S_B2, S_B3, S_B4 : C.unsigned_char;
> >    end record;
> >    pragma Convention (C, In_Addr);
> >
> >    function C_Inet_Addr
> >      (Cp : Strings.chars_ptr)
> >       return In_Addr;
> >    pragma Import (C, C_Inet_Addr, "inet_addr");
>
> alors j'aimerais avoir les idées claires sur une chose :
>
> Je savais qu'un record pouvait être traduit en "pointeur sur un record"
> dans certains cas, où la structure de données est assez complexe par
> exemple
> Mais je croyais que dans des cas simples comme ça, les données du
> record étaient alignées dans la mémoire directement, sans passer par un
> pointeur
>
> Je me trompais ? Il y a un pointeur absolument à chaque fois ?
>
>
> PS :
> Est ce que qqn voudrais bien me faire passer la dernière version
> d'adasockets svp ?
> (Si qqn a la dernière version d'adasockets mais n'a pas d'espace web,
> il y a http://dl.free.fr/ )
>
> Même si ce pb (qui n'est peut être pas un pb sur toutes les
> plateformes, j'ai pas bien compris) n'est pas corrigé,
> j'ai vu qu'il y avait de toutes façons des corrections et améliorations
> qui peuvent tjr être intéressantes :-)

-- 
Ali

_______________________________________________
Site WWW de l'association Ada-France: http://www.ada-france.org/
[email protected]
http://www.ada-france.org/mailman/listinfo/ada-france
v.patch (text/x-diff, 1.1 KB)
--- v-old.adb	2007-06-06 18:57:57.237919420 +0100
+++ v-new.adb	2007-06-06 18:57:44.777140672 +0100
@@ -42,7 +42,7 @@
 
 with Interfaces.C;               use Interfaces.C;
 with Interfaces.C.Strings;       use Interfaces.C.Strings;
-
+with Ada.Unchecked_Conversion;
 
 procedure v is
 
@@ -55,14 +55,17 @@
    type In_Addr is record
       S_B1, S_B2, S_B3, S_B4 : C.unsigned_char;
    end record;
+   for In_Addr'Size use 32;
    pragma Convention (C, In_Addr);
 
 
    function C_Inet_Addr
      (Cp : Strings.chars_ptr)
-      return In_Addr;
+      return C.unsigned;
    pragma Import (C, C_Inet_Addr, "inet_addr");
 
+   function To_In_Addr is new Ada.Unchecked_Conversion (Source => C.unsigned,
+                                                        Target => In_Addr);
 
    Naming_Error : exception;
 
@@ -92,7 +95,7 @@
       end if;
       declare
 	 C_Add     : chars_ptr        := New_String (Add);
-	 Converted : constant In_Addr := C_Inet_Addr (C_Add);
+	 Converted : constant In_Addr := To_In_Addr (C_Inet_Addr (C_Add));
       begin
 	 Free (C_Add);      
 	 return Converted;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.