e576bb | 2002-10-11 | Martin Nilsson | |
|
1b10db | 2002-10-08 | Martin Nilsson | |
|
dd3c38 | 2002-05-29 | Per Hedbor | | #include "global.h"
#include "stralloc.h"
#include "bignum.h"
#include "interpret.h"
#include "shuffler.h"
|
1b10db | 2002-10-08 | Martin Nilsson | |
|
90ac0c | 2002-05-29 | Per Hedbor | |
|
dd3c38 | 2002-05-29 | Per Hedbor | |
struct ps_source
{
struct source s;
|
97611f | 2019-06-17 | Stephen R. van den Berg | | struct pike_string*str;
char *data;
size_t len;
|
dd3c38 | 2002-05-29 | Per Hedbor | | };
|
feb682 | 2009-08-13 | Henrik Grubbström (Grubba) | | static struct data get_data( struct source *src, off_t len )
|
dd3c38 | 2002-05-29 | Per Hedbor | | {
|
feb682 | 2009-08-13 | Henrik Grubbström (Grubba) | | struct ps_source *s = (struct ps_source *)src;
|
dd3c38 | 2002-05-29 | Per Hedbor | | struct data res;
|
13670c | 2015-05-25 | Martin Nilsson | |
|
97611f | 2019-06-17 | Stephen R. van den Berg | | if( len > s->len ) {
|
dd3c38 | 2002-05-29 | Per Hedbor | | len = s->len;
s->s.eof = 1;
}
|
97611f | 2019-06-17 | Stephen R. van den Berg | | res.data = s->data;
s->data += len;
s->len -= res.len = len;
|
dd3c38 | 2002-05-29 | Per Hedbor | |
return res;
}
|
feb682 | 2009-08-13 | Henrik Grubbström (Grubba) | | static void free_source( struct source *src )
|
dd3c38 | 2002-05-29 | Per Hedbor | | {
|
feb682 | 2009-08-13 | Henrik Grubbström (Grubba) | | free_string(((struct ps_source *)src)->str);
|
dd3c38 | 2002-05-29 | Per Hedbor | | }
struct source *source_pikestring_make( struct svalue *s,
INT64 start, INT64 len )
{
struct ps_source *res;
|
97611f | 2019-06-17 | Stephen R. van den Berg | | INT64 slen;
|
dd3c38 | 2002-05-29 | Per Hedbor | |
|
97611f | 2019-06-17 | Stephen R. van den Berg | | if (TYPEOF(*s) != PIKE_T_STRING
|| s->u.string->size_shift)
return 0;
if (!(res = calloc(1, sizeof(struct ps_source))))
return 0;
|
565043 | 2004-08-28 | Martin Nilsson | |
|
97611f | 2019-06-17 | Stephen R. van den Berg | | debug_malloc_touch(res);
|
dd3c38 | 2002-05-29 | Per Hedbor | |
|
338732 | 2002-05-29 | Per Hedbor | | res->s.free_source = free_source;
|
dd3c38 | 2002-05-29 | Per Hedbor | | res->s.get_data = get_data;
|
50ea68 | 2003-03-14 | Henrik Grubbström (Grubba) | | copy_shared_string(res->str, s->u.string);
|
97611f | 2019-06-17 | Stephen R. van den Berg | | res->data = res->str->str + start;
|
dd3c38 | 2002-05-29 | Per Hedbor | |
|
97611f | 2019-06-17 | Stephen R. van den Berg | | slen = res->str->len - start;
if (len >= 0 && slen < len)
slen = len;
if (slen < 0)
slen = 0;
res->len = slen;
|
dd3c38 | 2002-05-29 | Per Hedbor | | return (struct source *)res;
}
void source_pikestring_init( )
{
}
void source_pikestring_exit( )
{
}
|