1 /*
2  *      cook - file construction tool
3  *      Copyright (C) 1999, 2006, 2007 Peter Miller;
4  *      All rights reserved.
5  *
6  *      This program is free software; you can redistribute it and/or modify
7  *      it under the terms of the GNU General Public License as published by
8  *      the Free Software Foundation; either version 3 of the License, or
9  *      (at your option) any later version.
10  *
11  *      This program is distributed in the hope that it will be useful,
12  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *      GNU General Public License for more details.
15  *
16  *      You should have received a copy of the GNU General Public License
17  *      along with this program. If not, see
18  *      <http://www.gnu.org/licenses/>.
19  */
20 
21 #include <common/input/private.h>
22 #include <common/mem.h>
23 
24 
25 input_ty *
input_new(input_vtbl_ty * vptr)26 input_new(input_vtbl_ty *vptr)
27 {
28     input_ty        *result;
29 
30     result = mem_alloc(vptr->size);
31     result->vptr = vptr;
32     result->pushback_buf = 0;
33     result->pushback_len = 0;
34     result->pushback_max = 0;
35     return result;
36 }
37 
38 
39 long
input_generic_read(input_ty * fp,void * data_v,long len)40 input_generic_read(input_ty *fp, void *data_v, long len)
41 {
42     char            *data;
43     long            result;
44     int             c;
45 
46     data = data_v;
47     for (result = 0; result < len; ++result)
48     {
49         c = fp->vptr->get(fp);
50         if (c < 0)
51             break;
52         *data++ = c;
53     }
54     return result;
55 }
56