[syslinux] help for tftp-hpa with libc5

Giulio Orsero giulioo at pobox.com
Mon Jan 21 01:12:51 PST 2002


I want to compile tftp-hpa on libc5 because we have many systems still using
this library.

There were some constants missing that i copied from glibc-2.1 headers, and
now I'm left with this and I don't know what to do since all I can do is
copy/paste, not touch real code :-)

===
gcc -O2 -m486 -fno-strength-reduce -D_XPG4_2 -D_XOPEN_SOURCE
-D__EXTENSIONS__ -D_BSD_SOURCE -D_ISO9X_SOURCE -D_OSF_SOURCE
-D_XOPEN_SOURCE_EXTENDED -W -Wall -Wpointer-arith -Wbad-function-cast
-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations
-Wnested-externs -Winline -Wwrite-strings -Wshadow -pipe -I.. -c recvfrom.c
In file included from ../config.h:37,
                 from recvfrom.c:21:
/usr/include/stdlib.h:149: warning: no previous prototype for `strtold'
recvfrom.c: In function `myrecvfrom':
recvfrom.c:64: field `cm' has incomplete type         <========
recvfrom.c:69: sizeof applied to an incomplete type <=========
recvfrom.c:105: sizeof applied to an incomplete type
recvfrom.c:105: warning: unsigned value < 0 is always 0
recvfrom.c:109: sizeof applied to an incomplete type
recvfrom.c:109: warning: unsigned value >= 0 is always 1
recvfrom.c:72: warning: unused variable `on'
make: *** [recvfrom.o] Error 1
===

=== recvfrom.c line 62 onwards
  struct cmsghdr *cmptr;
  union {
    struct cmsghdr cm;
#ifdef IP_PKTINFO
    char control[CMSG_SPACE(sizeof(struct in_addr)) +
                CMSG_SPACE(sizeof(struct in_pktinfo))];
#else
    char control[CMSG_SPACE(sizeof(struct in_addr))];
#endif
  } control_un;
  int on = 1;
#ifdef IP_PKTINFO
  struct in_pktinfo pktinfo;
#endif

===  105
 if ( msg.msg_controllen < sizeof(struct cmsghdr) ||

=== 109
  for ( cmptr = CMSG_FIRSTHDR(&msg) ; cmptr != NULL ;

I added the following to recvfrom.h (copied from glibc headers)
===
#define MSG_CTRUNC         0x08
#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
#define CMSG_FIRSTHDR(mhdr) \
  ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr)  \
   ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL)
 
extern struct cmsghdr *__cmsg_nxthdr __P ((struct msghdr *__mhdr,
                                           struct cmsghdr *__cmsg));
#ifdef __USE_EXTERN_INLINES
# ifndef _EXTERN_INLINE
#  define _EXTERN_INLINE extern __inline
# endif
_EXTERN_INLINE struct cmsghdr *
__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg) __THROW
{
  if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
    /* The kernel header does this so there may be a reason.  */
    return 0;
  __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
                               + CMSG_ALIGN (__cmsg->cmsg_len));
  if ((unsigned char *) (__cmsg + 1) >= ((unsigned char *)
__mhdr->msg_control
                                         + __mhdr->msg_controllen)
      || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
          >= ((unsigned char *) __mhdr->msg_control +
__mhdr->msg_controllen)))
    /* No more entries.  */
    return 0;
  return __cmsg;
}
#endif  /* Use `extern inline'.  */

===

Thanks

-- 
giulioo at pobox.com



More information about the Syslinux mailing list