LCOV - code coverage report
Current view: top level - src - string.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 52 52 100.0 %
Date: 2016-12-21 02:12:01 Functions: 6 6 100.0 %

          Line data    Source code
       1             : /***************************************************************************//**
       2             : 
       3             :   @file         string.c
       4             : 
       5             :   @author       Stephen Brennan
       6             : 
       7             :   @date         Created Friday, 10 July 2015
       8             : 
       9             :   @brief        Libstephen string utilities!
      10             : 
      11             :   @copyright    Copyright (c) 2015-2016, Stephen Brennan.  Released under the
      12             :                 Revised BSD License.  See LICENSE.txt for details.
      13             : 
      14             : *******************************************************************************/
      15             : 
      16             : #include <stdio.h>
      17             : #include <wchar.h>
      18             : 
      19             : #include "libstephen/ll.h"
      20             : #include "libstephen/cb.h"
      21             : 
      22           1 : char *read_file(FILE *f)
      23             : {
      24             :   cbuf cb;
      25             :   int c;
      26           1 :   cb_init(&cb, 1024);
      27             : 
      28          73 :   while ((c = fgetc(f)) != EOF) {
      29          71 :     cb_append(&cb, c);
      30             :   }
      31             : 
      32           1 :   cb_trim(&cb);
      33           1 :   return cb.buf;
      34             : }
      35             : 
      36           1 : wchar_t *read_filew(FILE *f)
      37             : {
      38             :   wcbuf wcb;
      39             :   wint_t wc;
      40           1 :   wcb_init(&wcb, 1024);
      41             : 
      42          73 :   while ((wc = fgetwc(f)) != WEOF) {
      43          71 :     wcb_append(&wcb, wc);
      44             :   }
      45             : 
      46           1 :   wcb_trim(&wcb);
      47           1 :   return wcb.buf;
      48             : }
      49             : 
      50           3 : char *read_line(FILE *file)
      51             : {
      52             :   cbuf cb;
      53             :   int c;
      54           3 :   cb_init(&cb, 256);
      55             : 
      56          75 :   while ((c = fgetc(file)) != EOF && c != '\n') {
      57          69 :     cb_append(&cb, c);
      58             :   }
      59             : 
      60           3 :   cb_trim(&cb);
      61           3 :   return cb.buf;
      62             : }
      63             : 
      64           3 : wchar_t *read_linew(FILE *file)
      65             : {
      66             :   wcbuf wcb;
      67             :   wint_t wc;
      68           3 :   wcb_init(&wcb, 256);
      69             : 
      70          75 :   while ((wc = fgetwc(file)) != WEOF && wc != L'\n') {
      71          69 :     wcb_append(&wcb, wc);
      72             :   }
      73             : 
      74           3 :   wcb_trim(&wcb);
      75           3 :   return wcb.buf;
      76             : }
      77             : 
      78           2 : smb_ll *split_lines(char *source)
      79             : {
      80             :   char *start;
      81             :   smb_ll *list;
      82             :   DATA d;
      83             : 
      84             :   /*
      85             :     We go through `source` looking for every newline, replace it with NUL, and
      86             :     add the beginnig of the line to the list.
      87             :    */
      88           2 :   start = source;
      89           2 :   list = ll_create();
      90          39 :   while (*source != '\0') {
      91          35 :     if (*source == '\n') {
      92             :       // Add line to list.
      93           5 :       d.data_ptr = start;
      94           5 :       ll_append(list, d);
      95             :       // Null-terminate the line.
      96           5 :       *source = '\0';
      97             :       // Next string starts at the next character.
      98           5 :       start = source + 1;
      99             :     }
     100          35 :     source++;
     101             :   }
     102           2 :   if (start != source) {
     103           1 :     d.data_ptr = start;
     104           1 :     ll_append(list, d);
     105             :   }
     106           2 :   return list;
     107             : }
     108             : 
     109           2 : smb_ll *split_linesw(wchar_t *source)
     110             : {
     111             :   wchar_t *start;
     112             :   smb_ll *list;
     113             :   DATA d;
     114             : 
     115             :   /*
     116             :     We go through `source` looking for every newline, replace it with NUL, and
     117             :     add the beginnig of the line to the list.
     118             :    */
     119           2 :   start = source;
     120           2 :   list = ll_create();
     121          39 :   while (*source != L'\0') {
     122          35 :     if (*source == L'\n') {
     123             :       // Add line to list.
     124           5 :       d.data_ptr = start;
     125           5 :       ll_append(list, d);
     126             :       // Null-terminate the line.
     127           5 :       *source = L'\0';
     128             :       // Next string starts at the next character.
     129           5 :       start = source + 1;
     130             :     }
     131          35 :     source++;
     132             :   }
     133           2 :   if (start != source) {
     134           1 :     d.data_ptr = start;
     135           1 :     ll_append(list, d);
     136             :   }
     137           2 :   return list;
     138             : }

Generated by: LCOV version 1.11