LCOV - code coverage report
Current view: top level - ext - getdelim.c (source / functions) Hit Total Coverage
Test: lcov.info Lines: 0 28 0.0 %
Date: 2021-11-24 03:28:48 Functions: 0 1 0.0 %

          Line data    Source code
       1             : /*      $NetBSD: getdelim.c,v 1.2 2015/12/25 20:12:46 joerg Exp $       */
       2             : /*      NetBSD-src: getline.c,v 1.2 2014/09/16 17:23:50 christos Exp    */
       3             : 
       4             : /*-
       5             :  * Copyright (c) 2011 The NetBSD Foundation, Inc.
       6             :  * All rights reserved.
       7             :  *
       8             :  * This code is derived from software contributed to The NetBSD Foundation
       9             :  * by Christos Zoulas.
      10             :  *
      11             :  * Redistribution and use in source and binary forms, with or without
      12             :  * modification, are permitted provided that the following conditions
      13             :  * are met:
      14             :  * 1. Redistributions of source code must retain the above copyright
      15             :  *    notice, this list of conditions and the following disclaimer.
      16             :  * 2. Redistributions in binary form must reproduce the above copyright
      17             :  *    notice, this list of conditions and the following disclaimer in the
      18             :  *    documentation and/or other materials provided with the distribution.
      19             :  *
      20             :  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
      21             :  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
      22             :  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
      23             :  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
      24             :  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
      25             :  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
      26             :  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
      27             :  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
      28             :  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
      29             :  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
      30             :  * POSSIBILITY OF SUCH DAMAGE.
      31             :  */
      32             : 
      33             : #ifndef BUFSIZ
      34             : #define BUFSIZ 512
      35             : #endif
      36             : 
      37             : ssize_t
      38           0 : compat_getdelim_(char **buf, size_t *bufsiz, int delimiter, FILE *fp)
      39             : {
      40           0 :         char *ptr, *eptr;
      41             : 
      42             : 
      43           0 :         if (*buf == NULL || *bufsiz == 0) {
      44           0 :                 *bufsiz = BUFSIZ;
      45           0 :                 if ((*buf = raw_malloc(*bufsiz)) == NULL)
      46             :                         return -1;
      47             :         }
      48             : 
      49           0 :         for (ptr = *buf, eptr = *buf + *bufsiz;;) {
      50           0 :                 int c = fgetc(fp);
      51           0 :                 if (c == -1) {
      52           0 :                         if (feof(fp)) {
      53           0 :                                 ssize_t diff = (ssize_t)(ptr - *buf);
      54           0 :                                 if (diff != 0) {
      55           0 :                                         *ptr = '\0';
      56           0 :                                         return diff;
      57             :                                 }
      58             :                         }
      59             :                         return -1;
      60             :                 }
      61           0 :                 *ptr++ = c;
      62           0 :                 if (c == delimiter) {
      63           0 :                         *ptr = '\0';
      64           0 :                         return ptr - *buf;
      65             :                 }
      66           0 :                 if (ptr + 2 >= eptr) {
      67           0 :                         char *nbuf;
      68           0 :                         size_t nbufsiz = *bufsiz * 2;
      69           0 :                         ssize_t d = ptr - *buf;
      70           0 :                         if (nbufsiz < *bufsiz ||
      71           0 :                             (nbuf = raw_realloc(*buf, nbufsiz)) == NULL)
      72           0 :                                 return -1;
      73           0 :                         *buf = nbuf;
      74           0 :                         *bufsiz = nbufsiz;
      75           0 :                         eptr = nbuf + nbufsiz;
      76           0 :                         ptr = nbuf + d;
      77             :                 }
      78             :         }
      79             : }

Generated by: LCOV version 1.14