]> granicus.if.org Git - sudo/commitdiff
Implement getline() in terms of fgetln() if we have it.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Fri, 18 Sep 2009 12:23:01 +0000 (12:23 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Fri, 18 Sep 2009 12:23:01 +0000 (12:23 +0000)
config.h.in
configure
configure.in
getline.c

index 97e91aec03e81cc029fed0ff05e14adc01c56142..6ea8c3867aaf63275e60fdc8eb65781db5b460ae 100644 (file)
 /* Define to 1 if your system has the F_CLOSEM fcntl. */
 #undef HAVE_FCNTL_CLOSEM
 
+/* Define to 1 if you have the `fgetln' function. */
+#undef HAVE_FGETLN
+
 /* Define to 1 if you have the `flock' function. */
 #undef HAVE_FLOCK
 
index 74ae61b9cf88cc99af514027628779d7d8d8a33a..496ce5eaa65ae85cb020805ae3e5b4c7b217496c 100755 (executable)
--- a/configure
+++ b/configure
@@ -15828,11 +15828,13 @@ LIBS=$ac_save_LIBS
 
 
 
+
 
 
 for ac_func in dup2 strchr strrchr memchr memcpy memset sysconf tzset getline \
               strftime setrlimit initgroups getgroups fstat gettimeofday \
               regcomp setlocale getaddrinfo setsid setenv vhangup nanosleep
+              fgetln
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5
index f75780d6344120dcfdf29fcfcc26ea1c7aca5c45..1d554d3676947ab31c7843f088780fc3e7fdef8c 100644 (file)
@@ -1836,7 +1836,8 @@ dnl
 AC_FUNC_GETGROUPS
 AC_CHECK_FUNCS(dup2 strchr strrchr memchr memcpy memset sysconf tzset getline \
               strftime setrlimit initgroups getgroups fstat gettimeofday \
-              regcomp setlocale getaddrinfo setsid setenv vhangup nanosleep)
+              regcomp setlocale getaddrinfo setsid setenv vhangup nanosleep
+              fgetln)
 AC_CHECK_FUNCS(openpty, [AC_CHECK_HEADERS(util.h pty.h, [break])], [
     AC_CHECK_LIB(util, openpty, [
        AC_CHECK_HEADERS(util.h pty.h, [break])
index 5a9821ec8e4a37dfb8ed3f87318fa6e2b8593a06..607a7162b4dd3a9437dadb8f6075649d80add73d 100644 (file)
--- a/getline.c
+++ b/getline.c
 
 extern void *erealloc __P((void *, size_t));
 
+#ifdef HAVE_FGETLN
+ssize_t
+getline(bufp, bufsizep, fp)
+    char **bufp;
+    size_t *bufsizep;
+    FILE *fp;
+{
+    char *buf;
+    size_t bufsize;
+    size_t len;
+
+    buf = fgetln(fp, &len);
+    if (buf) {
+       bufsize = *bufp ? *bufsizep : 0;
+       if (bufsize < len + 1) {
+           bufsize = len + 1;
+           *bufp = erealloc(*bufp, bufsize);
+           *bufsizep = bufsize;
+       }
+       memcpy(*bufp, buf, len);
+       (*bufp)[len] = '\0';
+    }
+    return(buf ? len : -1);
+}
+#else
 ssize_t
 getline(bufp, bufsizep, fp)
     char **bufp;
@@ -74,3 +99,4 @@ getline(bufp, bufsizep, fp)
     *bufsizep = bufsize;
     return(len);
 }
+#endif