Exemplo n.º 1
0
char *string_replace_percents( const char *str, const char *replace )
{
	/* Common case: do nothing if no percents. */
	if(!strchr(str,'%')) return xxstrdup(str);

	buffer_t buffer;
	buffer_init(&buffer);

	const char *s;
	for(s=str;*s;s++) {
		if(*s=='%' && *(s+1)=='%' ) {
			if( *(s+2)=='%' && *(s+3)=='%') {
				buffer_putlstring(&buffer,"%%",2);
				s+=3;
			} else {
				buffer_putstring(&buffer,replace);
				s++;
			}
		} else {
			buffer_putlstring(&buffer,s,1);
		}
	}

	char *result;
	buffer_dup(&buffer,&result);
	buffer_free(&buffer);

	return result;
}
Exemplo n.º 2
0
char * jx_print_string( struct jx *j )
{
	buffer_t buffer;
	char *str;
	buffer_init(&buffer);
	jx_print_buffer(j,&buffer);
	buffer_dup(&buffer,&str);
	buffer_free(&buffer);
	return str;
}
Exemplo n.º 3
0
MemBuffer *
membuffer_new_from_buffer_dup (DWORD addr, Buffer *buf)
{
	MemBuffer *membuffer;

	if ((membuffer = malloc(sizeof(MemBuffer))) == NULL)
		return NULL;

	membuffer_init (membuffer, addr, buffer_dup(buf));

	return membuffer;
}
Exemplo n.º 4
0
Arquivo: file.c Projeto: nrhtr/genesis
/*
// --------------------------------------------------------------------
// called by fwrite()
*/
Int write_to_file(Obj * obj, cBuf * buf)
{
    filec_t *file = find_file_controller(obj);

    if (file == NULL || !file->f.writable)
        return 0;

    if (file->wbuf)
        file->wbuf = buffer_append(file->wbuf, buf);
    else
        file->wbuf = buffer_dup(buf);

    return 1;
}
Exemplo n.º 5
0
char *make_field_names_str(char *separator)
{
	char *str;
	struct buffer b;
	buffer_init(&b);

	struct field *f;
	for(f = &fields[WALL_TIME]; f->name != NULL; f++)
		if(f->active)
			buffer_printf(&b, "%s: %s%s",  f->abbrev, f->name, separator);

	buffer_dup(&b, &str);
	buffer_free(&b);

	return str;
}
Exemplo n.º 6
0
Arquivo: jx.c Projeto: Baguage/cctools
struct jx * jx_format( const char *fmt, ... )
{
	va_list va;
	struct jx *j;
	buffer_t B[1];
	char *str;

	buffer_init(B);
	buffer_abortonfailure(B, 1);
	va_start(va, fmt);
	buffer_putvfstring(B, fmt, va);
	va_end(va);
	buffer_dup(B, &str);
	buffer_free(B);

	j = jx_create(JX_STRING);
	j->u.string_value = str;

	return j;
}
Exemplo n.º 7
0
/*
 * Based on opengroup.org's definition of the Shell Command Language (also gnu's)
 * In section 2.2.3 on Double-Quoted Strings, it indicates you only need to
 * escape dollar sign, backtick, and backslash. I also escape double quote as
 * we are adding and exterior double quote around the string.
 *
 * [ $ \ ` " ] Are always escaped.
 * */
char *string_escape_shell( const char *str )
{
	buffer_t B[1];
	buffer_init(B);
	buffer_abortonfailure(B, 1);

	const char *s;
	buffer_putliteral(B,"\"");
	for(s=str;*s;s++) {
		if(*s=='"' || *s=='\\' || *s=='$' || *s=='`')
			buffer_putliteral(B,"\\");
		buffer_putlstring(B,s,1);
	}
	buffer_putliteral(B,"\"");

	char *result;
	buffer_dup(B,&result);
	buffer_free(B);

	return result;
}
Exemplo n.º 8
0
ssize_t link_stream_to_buffer(struct link * link, char **buffer, time_t stoptime)
{
	ssize_t total = 0;
	buffer_t B;
	buffer_init(&B);

	while(1) {
		char buf[1<<16];
		ssize_t actual = link_read(link, buf, sizeof(buf), stoptime);
		if(actual <= 0)
			break;
		if (buffer_putlstring(&B, buf, actual) == -1) {
			buffer_free(&B);
			return -1;
		}
		total += actual;
	}

	if (buffer_dup(&B, buffer) == -1)
		total = -1;
	buffer_free(&B);

	return total;
}
static void METHOD_IMPL(read_headers, buffer *b)
{
    off_t pos = CALL(this->buffer, seek, 0, SEEK_CUR);
    CALL(this->buffer, write_buffer, buffer_dup(b));
    struct search_state *state = this->search;
    if(!state)
    {
        state = this->search = (struct search_state*)malloc(
            sizeof(struct search_state));
        strcpy(state->needle, "\r\n");
        state->pos = 0;
    }
    char *ptr = (char*)b->ptr;
    for(;b->pos < b->used;b->pos++, ptr++, pos++)
    {
        if(*ptr == state->needle[state->pos])
        {
            if(state->needle[++state->pos] == '\0')
            {
                size_t line_len = pos+1;
                if(line_len == strlen(state->needle))
                {
                    DPRINTF("end of headers found\n");
                    this->state = STATE_BODY;
                }

                char *hdr_str = (char*)malloc(line_len);
                CALL(this->buffer, seek, 0, SEEK_SET);
                CALL(this->buffer, read, hdr_str, line_len);
                hdr_str[line_len-2] = '\0';

                off_t end = CALL(this->buffer, seek, 0, SEEK_END);
                ASSERT(end >= line_len);
                CALL(this->buffer, rtruncate, 
                    end - line_len);

                if(this->state == STATE_REQUEST)
                {
                    char *request_type = strtok(hdr_str, " \t");
                    char *request_path = strtok(NULL, " \t");
                    char *http_version = strtok(NULL, " \t");
                    this->msg.request_type = strdup(request_type);
                    this->msg.request_path = strdup(request_path);
                    this->msg.http_version = strdup(http_version);
                    this->state = STATE_HEADERS;
                    DPRINTF("request: %s %s %s\n",
                            request_type,
                            request_path,
                            http_version);
                }
                else if(this->state == STATE_RESPONSE)
                {
                    char *http_version = strtok(hdr_str, " \t");
                    char *response_code = strtok(NULL, " \t");
                    char *response_msg = strtok(NULL, " \t");
                    //ASSERT(strcmp(http_version, this->msg.http_version) == 0);
                    this->msg.response_code = strtoll(response_code, NULL, 0);
                    this->msg.response_msg = strdup(response_msg);
                    this->state = STATE_HEADERS;
                    DPRINTF("response: %s %d %s\n",
                            http_version,
                            this->msg.response_code,
                            response_msg);
                }
                else
                {
                    char *name = hdr_str, *value = NULL, *i;
                    for(i = hdr_str;*i != '\0';i++)
                    {
                        if(*i == ':')
                        {
                            *i = '\0';
                            value = i+1;
                            break;
                        }
                    }
                    if(value)
                    {
                        for(;(*value == ' '  || *value == '\t') &&  
                              *value != '\0'; value++);
                        this->msg.headers[this->msg.header_count] =
                            (char**)malloc(2 * sizeof(char*));
                        this->msg.headers[this->msg.header_count][0] =
                            strdup(name);
                        this->msg.headers[this->msg.header_count][1] =
                            strdup(value);
                        this->msg.header_count++;
                    }
                }
                free(hdr_str);
                state->pos = 0;
                pos = -1;
            }
        }
        else
        {
            state->pos = 0;
        }
    }
    buffer_recycle(b);
}
Exemplo n.º 10
0
              "The subrange extends to %d, past the end of the buffer (%d).",
              start + len, blen));

    buf = buffer_dup(BUF1);

    anticipate_assignment();

    CLEAN_RETURN_BUFFER(buffer_subrange(buf, start, len));
}

NATIVE_METHOD(bufsub) {
    cBuf *buf, *old, *new;

    INIT_3_ARGS(BUFFER, BUFFER, BUFFER);

    buf = buffer_dup(BUF1);
    old = buffer_dup(BUF2);
    new = buffer_dup(BUF3);

    if (old->len == 0)
        THROW((type_id, ""));

    anticipate_assignment();

    CLEAN_RETURN_BUFFER(buffer_bufsub(buf, old, new));
}

NATIVE_METHOD(buf_to_str) {
    cBuf * buf;

    INIT_1_ARG(BUFFER);