struct membuf *get_named_buffer(const char *name) { int pos; struct sbe e[1]; struct sbe *ep; struct membuf *mp; /* name is already strdup:ped */ e->name = name; pos = vec_find(s_sbe_table, sbe_cmp, e); if(pos >= 0) { /* found */ ep = vec_get(s_sbe_table, pos); } else { membuf_init(e->mb); read_file(name, e->mb); ep = vec_insert(s_sbe_table, -(pos + 2), e); } mp = ep->mb; return mp; }
static void tinyweb_on_connection(uv_stream_t* server, int status) { assert(server == (uv_stream_t*)&_server); if(status == 0) { uv_tcp_t* client = (uv_tcp_t*)malloc(sizeof(uv_tcp_t)); client->data = malloc(sizeof(membuf_t)); membuf_init((membuf_t*)client->data, 128); uv_tcp_init(_loop, client); uv_accept((uv_stream_t*)&_server, (uv_stream_t*)client); uv_read_start((uv_stream_t*)client, on_uv_alloc, on_uv_read); //write_uv_data((uv_stream_t*)client, http_respone, -1, 0); //close client after uv_write, and free it in after_uv_close() } }
struct membuf *new_named_buffer(const char *name) { int pos; struct sbe e[1]; struct sbe *ep; struct membuf *mp; /* name is already strdup:ped */ e->name = name; pos = vec_find(s_sbe_table, sbe_cmp, e); if(pos >= 0) { /* found */ LOG(LOG_ERROR, ("buffer already exists.\n")); exit(-1); } membuf_init(e->mb); ep = vec_insert(s_sbe_table, -(pos + 2), e); mp = ep->mb; return mp; }
static void level(const char *appl, int argc, char *argv[]) { char flags_arr[32]; int forward_mode = 0; int literal_sequences_used = 0; int max_safety = 0; int c; int infilec; char **infilev; struct crunch_options options[1] = { CRUNCH_OPTIONS_DEFAULT }; struct common_flags flags[1] = {{NULL, DEFAULT_OUTFILE}}; struct membuf in[1]; struct membuf out[1]; flags->options = options; LOG(LOG_DUMP, ("flagind %d\n", flagind)); sprintf(flags_arr, "f%s", CRUNCH_FLAGS); while ((c = getflag(argc, argv, flags_arr)) != -1) { LOG(LOG_DUMP, (" flagind %d flagopt '%c'\n", flagind, c)); switch (c) { case 'f': forward_mode = 1; break; default: handle_crunch_flags(c, flagarg, print_level_usage, appl, flags); } } membuf_init(in); membuf_init(out); infilev = argv + flagind; infilec = argc - flagind; if (infilec == 0) { LOG(LOG_ERROR, ("Error: no input files to process.\n")); print_level_usage(appl, LOG_NORMAL, DEFAULT_OUTFILE); exit(1); } /* append the files instead of merging them */ for(c = 0; c < infilec; ++c) { struct crunch_info info[1]; int in_load; int in_len; int out_pos; out_pos = membuf_memlen(out); in_load = do_load(infilev[c], in); in_len = membuf_memlen(in); if(forward_mode) { /* append the starting address of decrunching */ membuf_append_char(out, in_load >> 8); membuf_append_char(out, in_load & 255); crunch(in, out, options, info); } else { crunch_backwards(in, out, options, info); /* append the starting address of decrunching */ membuf_append_char(out, (in_load + in_len) & 255); membuf_append_char(out, (in_load + in_len) >> 8); /* reverse the just appended segment of the out buffer */ reverse_buffer((char*)membuf_get(out) + out_pos, membuf_memlen(out) - out_pos); } if(info->literal_sequences_used) { literal_sequences_used = 1; } if(info->needed_safety_offset > max_safety) { max_safety = info->needed_safety_offset; } }