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;
struct pike_string *str;
int offset, len;
};
|
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;
res.do_free = 0;
res.off = 0;
res.data = s->str->str + s->offset;
if( len > s->len )
{
len = s->len;
s->s.eof = 1;
}
res.len = len;
s->len -= len;
s->offset += len;
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;
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if( TYPEOF(*s) != PIKE_T_STRING ) return 0;
|
0d9bf2 | 2002-05-29 | Per Hedbor | | if( s->u.string->size_shift ) return 0;
|
565043 | 2004-08-28 | Martin Nilsson | |
|
9c14f3 | 2014-04-27 | Martin Nilsson | | res = calloc( 1, sizeof( struct ps_source ) );
|
dc8d02 | 2014-04-27 | Martin Nilsson | | if( !res ) return NULL;
|
b2986f | 2002-07-05 | Per Hedbor | | debug_malloc_touch( res );
debug_malloc_touch( s );
|
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);
|
dd3c38 | 2002-05-29 | Per Hedbor | | res->offset = start;
if( len != -1 )
{
if( len > res->str->len-start )
{
|
50ea68 | 2003-03-14 | Henrik Grubbström (Grubba) | | sub_ref(res->str);
|
dd3c38 | 2002-05-29 | Per Hedbor | | free(res);
return 0;
}
else
res->len = len;
}
else
res->len = res->str->len-start;
if( res->len <= 0 )
{
|
50ea68 | 2003-03-14 | Henrik Grubbström (Grubba) | | sub_ref(res->str);
|
dd3c38 | 2002-05-29 | Per Hedbor | | free(res);
|
565043 | 2004-08-28 | Martin Nilsson | | return 0;
|
dd3c38 | 2002-05-29 | Per Hedbor | | }
return (struct source *)res;
}
void source_pikestring_init( )
{
}
void source_pikestring_exit( )
{
}
|