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 */