Today I have tried to merge openswan-2.4-14 into my ~x86 system. The compilation failed because of a name clash:

cc -I. -I/home/ta/tmp/openswan-2.4.14.orig/linux/net/ipsec -I/home/ta/tmp/openswan-2.4.14.orig/linux/include -I/home/ta/tmp/openswan-2.4.14.orig -DDEBUG -DWITH_UDPFROMTO -DHAVE_IP_PKTINFO -I/home/ta/tmp/openswan-2.4.14.orig/include -g -O3 -DDISABLE_UDP_CHECKSUM -Wall -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wbad-function-cast -DNAT_TRAVERSAL -c -o optionsfrom.o optionsfrom.c
optionsfrom.c:34: error: conflicting types for 'getline'
/usr/include/stdio.h:651: error: previous declaration of 'getline' was here
make[2]: *** [optionsfrom.o] Error 1
make[2]: Leaving directory `/home/ta/tmp/openswan-2.4.14.orig/lib/libopenswan'
make[1]: *** [programs] Error 1
make[1]: Leaving directory `/home/ta/tmp/openswan-2.4.14.orig/lib'
make: *** [programs] Error 1

The getline function is implemented in the optionsfrom.c source file in the openswan distribution. But the same function is implemented in glibc as well, but has a different signature and return code. It seems it is best to rename the getline function to something else to resolve this. Attached is a patch that renames all insances of getline to osw_getline.

--
Timur
diff -Nru openswan-2.4.14.orig/lib/libopenswan/optionsfrom.c 
openswan-2.4.14/lib/libopenswan/optionsfrom.c
--- openswan-2.4.14.orig/lib/libopenswan/optionsfrom.c  2004-04-09 
21:00:38.000000000 +0300
+++ openswan-2.4.14/lib/libopenswan/optionsfrom.c       2009-06-01 
22:21:56.000000000 +0300
@@ -31,7 +31,7 @@
 
 static const char *dowork(const char *, int *, char ***, int);
 static const char *getanarg(FILE *, struct work *, char **);
-static char *getline(FILE *, char *, size_t);
+static char *osw_getline(FILE *, char *, size_t);
 
 /*
  - optionsfrom - add some options, taken from a file, to argc/argv
@@ -149,7 +149,7 @@
        char *endp;
 
        while (w->pending == NULL) {    /* no pending line */
-               if ((w->line = getline(f, w->buf, sizeof(w->buf))) == NULL)
+               if ((w->line = osw_getline(f, w->buf, sizeof(w->buf))) == NULL)
                        return "error in line read";    /* caller checks EOF */
                if (w->line[0] != '#' &&
                                *(w->line + strspn(w->line, " \t")) != '\0')
@@ -171,7 +171,7 @@
                        if (*linep == NULL)
                                return "out of memory for new line";
                        strcpy(*linep, p);
-               } else                  /* getline already malloced it */
+               } else                  /* osw_getline already malloced it */
                        *linep = p;
                return NULL;
        }
@@ -203,10 +203,10 @@
 }
 
 /*
- - getline - read a line from the file, trim newline off
+ - osw_getline - read a line from the file, trim newline off
  */
 static char *                  /* pointer to line, NULL for eof/error */
-getline(f, buf, bufsize)
+osw_getline(f, buf, bufsize)
 FILE *f;
 char *buf;                     /* buffer to use, if convenient */
 size_t bufsize;                        /* size of buf */

Reply via email to