The getline function used in a couple of places in netpbm-free is also
defined by POSIX:2008, and so netpbm-free fails to build with newer
versions of (e)glibc. Here's a patch to rename it.

  * Rename getline functions to get_line to avoid conflict with POSIX:2008.

--- netpbm-free-10.0.orig/ppm/xvminitoppm.c
+++ netpbm-free-10.0/ppm/xvminitoppm.c
@@ -14,7 +14,7 @@
 #include "ppm.h"
 #define BUFSIZE 256
 
-static void getline ARGS((FILE *fp, char *buf));
+static void get_line ARGS((FILE *fp, char *buf));
 
 int 
 main(argc, argv)
@@ -48,18 +48,18 @@
                 i++;
             }
     
-    getline(ifp, buf);
+    get_line(ifp, buf);
     if( strncmp(buf, "P7 332", 6) != 0 )
         pm_error("bad magic number - not a XV thumbnail picture");
 
     while(1) {
-        getline(ifp, buf);
+        get_line(ifp, buf);
         if( strncmp(buf, "#END_OF_COMMENTS", 16)==0 )
             break;
         if( strncmp(buf, "#BUILTIN", 8)==0 )
             pm_error("cannot convert builtin XV thumbnail pictures");
     }
-    getline(ifp, buf);
+    get_line(ifp, buf);
     if( sscanf(buf, "%d %d %d", &cols, &rows, &maxval) != 3 ) 
         pm_error("error parsing dimension info");
     if( maxval != 255 )
@@ -85,7 +85,7 @@
 
 
 static void
-getline(fp, buf)
+get_line(fp, buf)
     FILE *fp;
     char *buf;
 {
--- netpbm-free-10.0.orig/ppm/xpmtoppm.c
+++ netpbm-free-10.0/ppm/xpmtoppm.c
@@ -114,7 +114,7 @@
 
 
 static void
-getline(char * const line, int const size, FILE * const stream) {
+get_line(char * const line, int const size, FILE * const stream) {
 /*----------------------------------------------------------------------------
    Read the next line from the input file 'stream', through the one-line
    buffer lastInputLine[].
@@ -130,7 +130,7 @@
    Exit program if the line doesn't fit in the buffer.
 -----------------------------------------------------------------------------*/
     if (size > MAX_LINE+1)
-        pm_error("INTERNAL ERROR: getline() received 'size' parameter "
+        pm_error("INTERNAL ERROR: get_line() received 'size' parameter "
                  "which is out of bounds");
 
     if (backup) {
@@ -346,7 +346,7 @@
                int * const transparentP) {
 /*----------------------------------------------------------------------------
   Read the header of the XPM file on stream 'stream'.  Assume the
-  getline() stream is presently positioned to the beginning of the
+  get_line() stream is presently positioned to the beginning of the
   file and it is a Version 3 XPM file.  Leave the stream positioned
   after the header.
 
@@ -377,25 +377,25 @@
     *widthP = *heightP = *ncolorsP = *chars_per_pixelP = -1;
 
     /* Read the XPM signature comment */
-    getline(line, sizeof(line), stream);
+    get_line(line, sizeof(line), stream);
     if (strncmp(line, xpm3_signature, strlen(xpm3_signature)) != 0) 
         pm_error("Apparent XPM 3 file does not start with '/* XPM */'.  "
                  "First line is '%s'", xpm3_signature);
 
     /* Read the assignment line */
-    getline(line, sizeof(line), stream);
+    get_line(line, sizeof(line), stream);
     if (strncmp(line, "static char", 11) != 0)
         pm_error("Cannot find data structure declaration.  Expected a "
                  "line starting with 'static char', but found the line "
                  "'%s'.", line);
 
 	/* Read the hints line */
-    getline(line, sizeof(line), stream);
+    get_line(line, sizeof(line), stream);
     /* skip the comment line if any */
     if (!strncmp(line, "/*", 2)) {
         while (!strstr(line, "*/"))
-            getline(line, sizeof(line), stream);
-        getline(line, sizeof(line), stream);
+            get_line(line, sizeof(line), stream);
+        get_line(line, sizeof(line), stream);
     }
     if (sscanf(line, "\"%d %d %d %d\",", widthP, heightP,
                ncolorsP, chars_per_pixelP) != 4)
@@ -427,10 +427,10 @@
         *transparentP = -1;  /* initial value */
 
         for (seqNum = 0; seqNum < *ncolorsP; seqNum++) {
-            getline(line, sizeof(line), stream);
+            get_line(line, sizeof(line), stream);
             /* skip the comment line if any */
             if (!strncmp(line, "/*", 2))
-                getline(line, sizeof(line), stream);
+                get_line(line, sizeof(line), stream);
             
             interpretXpm3ColorTableLine(line, seqNum, *chars_per_pixelP, 
                                         *colorsP, *ptabP, transparentP);
@@ -445,7 +445,7 @@
                pixel ** const colorsP, int ** const ptabP) {
 /*----------------------------------------------------------------------------
   Read the header of the XPM file on stream 'stream'.  Assume the
-  getline() stream is presently positioned to the beginning of the
+  get_line() stream is presently positioned to the beginning of the
   file and it is a Version 1 XPM file.  Leave the stream positioned
   after the header.
   
@@ -464,7 +464,7 @@
     /* Read the initial defines. */
     processedStaticChar = FALSE;
     while (!processedStaticChar) {
-        getline(line, sizeof(line), stream);
+        get_line(line, sizeof(line), stream);
 
         if (sscanf(line, "#define %s %d", str1, &v) == 2) {
             char *t1;
@@ -512,7 +512,7 @@
     /* If there's a monochrome color table, skip it. */
     if (!strncmp(t1, "mono", 4)) {
         for (;;) {
-            getline(line, sizeof(line), stream);
+            get_line(line, sizeof(line), stream);
             if (!strncmp(line, "static char", 11))
                 break;
         }
@@ -533,7 +533,7 @@
 
     /* Read color table. */
     for (i = 0; i < *ncolorsP; ++i) {
-        getline(line, sizeof(line), stream);
+        get_line(line, sizeof(line), stream);
 
         if ((t1 = strchr(line, '"')) == NULL)
             pm_error("D error scanning color table");
@@ -569,7 +569,7 @@
        "static char ...").
     */
     for (;;) {
-        getline(line, sizeof(line), stream);
+        get_line(line, sizeof(line), stream);
         if (strncmp(line, "static char", 11) == 0)
             break;
     }
@@ -660,7 +660,7 @@
     backup = FALSE;
 
     /* Read the header line */
-    getline(line, sizeof(line), stream);
+    get_line(line, sizeof(line), stream);
     backup = TRUE;  /* back up so next read reads this line again */
     
     rc = sscanf(line, "/* %s */", str1);
@@ -681,7 +681,7 @@
         pm_error("Could not get %d bytes of memory for image", totalpixels);
     cursor = *dataP;
     maxcursor = *dataP + totalpixels - 1;
-	getline(line, sizeof(line), stream); 
+	get_line(line, sizeof(line), stream); 
         /* read next line (first line may not always start with comment) */
     while (cursor <= maxcursor) {
         if (strncmp(line, "/*", 2) == 0) {
@@ -691,7 +691,7 @@
                              ncolors, ptab, &cursor, maxcursor);
         }
         if (cursor <= maxcursor)
-            getline(line, sizeof(line), stream);
+            get_line(line, sizeof(line), stream);
     }
     if (ptab) free(ptab);
 }

Thanks,

-- 
Colin Watson                                       [cjwatson@ubuntu.com]




