WRAP_API int wrap_mvwinsnstr(WINDOW *win, int y, int x, uchar2 *str, int n) { #if defined(CURSES_WIDE) && SIZEOF_WCHAR_T == 2 return mvwins_nwstr(win, y, x, str, n); #elif defined(CURSES_WIDE) wchar_t stackbuf[BUFFER_SIZE]; xbuffer xinput, xoutput; int ret; xbuf_init_uc(&xinput, str, n, XBUF_FILL); xbuf_init_wc(&xoutput, stackbuf, BUFFER_SIZE, XBUF_EXPANDABLE); ret = unicode_to_wchar(&xinput, &xoutput); if (ret < 0) goto do_exit; ret = xbuf_tzero_wc(&xoutput); if (ret < 0) goto do_exit; ret = mvwins_nwstr(win, y, x, xbuf_data_wc(&xoutput), xbuf_len_wc(&xoutput)); do_exit: xbuf_free(&xoutput); return ret; #else char stackbuf[BUFFER_SIZE]; xbuffer xinput, xoutput; int ret; xbuf_init_uc(&xinput, str, n, XBUF_FILL); xbuf_init(&xoutput, stackbuf, BUFFER_SIZE, XBUF_EXPANDABLE); ret = unicode_to_char(&xinput, &xoutput); if (ret < 0) goto do_exit; ret = xbuf_tzero(&xoutput); if (ret < 0) goto do_exit; ret = mvwinsnstr(win, y, x, xbuf_data(&xoutput), xbuf_len(&xoutput)); do_exit: xbuf_free(&xoutput); return ret; #endif }
int main(int argc, char *argv[]) { xbuf_t data; xbuf_init(&data); xbuf_cat(&data, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sit amet " "quam purus, vitae fermentum turpis. Nam in augue mi. Donec suscipit moles" "tie felis, eget rhoncus risus pharetra in. Sed id diam id felis fringilla" " adipiscing non vitae odio. Etiam vulputate tristique elit, nec eleifend" " mauris scelerisque eu. Vestibulum luctus, enim a luctus posuere, mauris" " mauris rutrum mi, eget fermentum massa tortor id enim. Nulla feugiat " "porta urna quis laoreet. Morbi metus ante, commodo quis dictum vitae, " "rhoncus a libero. Cras viverra feugiat orci id interdum. Duis pulvinar " "neque id erat adipiscing facilisis. Maecenas vitae urna risus, euismod" " sollicitudin risus." ); char gzipped[4096]; u32 len = zlib_cmp(data.ptr, 0, data.len, gzipped, sizeof(gzipped), 1); printf("Original length: %i\n", data.len); printf("Gzipped length: %i\n\n", len); xbuf_t *reply = get_reply(argv); xbuf_xcat(reply, "HTTP/1.1 200 OK\r\n" "Content-Type: text/plain\r\n" "Content-Length: %i\r\n" "Content-Encoding: gzip\r\n\r\n", len ); xbuf_ncat(reply, gzipped, len); xbuf_free(&data); return -1; //custom headers }
int list_threads(kv_item *item, xbuf_t *reply) { Thread *thread = (Thread*)item->val; xbuf_t thread_li; xbuf_init(&thread_li); //using sprintf-like formatting xbuf_xcat(&thread_li, "<li>" "<a href='/?forum_simple/act=t/id=%llu'>%s</a> (%lu)" "</li>", thread->id, thread->title.ptr, thread->posts.nbr_items ); char *pos = (char*)xbuf_findstr(reply, "<!--tpl-->"); if (pos) xbuf_insert(reply, pos, thread_li.len, thread_li.ptr); xbuf_free(&thread_li); return 1; }