diff options
author | Lennart Poettering <lennart@poettering.net> | 2005-01-12 17:37:31 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2005-01-12 17:37:31 +0000 |
commit | 4590f09d0b44aeb7cef3eed72b419444ea36d8e0 (patch) | |
tree | 1bdf89c241e1eb1e49906fdb8d163a26927764f0 /polyp/ioline.c | |
parent | 32bf3a106a946303f2175f01f3124354edd95a3e (diff) |
* make pa_sample_spec_snprint return point to written string
* first try of a http module
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@339 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'polyp/ioline.c')
-rw-r--r-- | polyp/ioline.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/polyp/ioline.c b/polyp/ioline.c index f52af2db..6f7886da 100644 --- a/polyp/ioline.c +++ b/polyp/ioline.c @@ -51,6 +51,8 @@ struct pa_ioline { void (*callback)(struct pa_ioline*io, const char *s, void *userdata); void *userdata; + + int defer_close; }; static void io_callback(struct pa_iochannel*io, void *userdata); @@ -78,6 +80,8 @@ struct pa_ioline* pa_ioline_new(struct pa_iochannel *io) { l->defer_event = l->mainloop->defer_new(l->mainloop, defer_callback, l); l->mainloop->defer_enable(l->defer_event, 0); + + l->defer_close = 0; pa_iochannel_set_callback(io, io_callback, l); @@ -181,8 +185,10 @@ static void failure(struct pa_ioline *l) { pa_ioline_close(l); - if (l->callback) + if (l->callback) { l->callback(l, NULL, l->userdata); + l->callback = NULL; + } } static void scan_for_lines(struct pa_ioline *l, size_t skip) { @@ -309,6 +315,9 @@ static void do_work(struct pa_ioline *l) { if (!l->dead) do_read(l); + if (l->defer_close && !l->wbuf_valid_length) + failure(l); + pa_ioline_unref(l); } @@ -325,3 +334,25 @@ static void defer_callback(struct pa_mainloop_api*m, struct pa_defer_event*e, vo do_work(l); } + +void pa_ioline_defer_close(struct pa_ioline *l) { + assert(l); + + l->defer_close = 1; + + if (!l->wbuf_valid_length) + l->mainloop->defer_enable(l->defer_event, 1); +} + +void pa_ioline_printf(struct pa_ioline *s, const char *format, ...) { + char *t; + va_list ap; + + + va_start(ap, format); + t = pa_vsprintf_malloc(format, ap); + va_end(ap); + + pa_ioline_puts(s, t); + pa_xfree(t); +} |