summaryrefslogtreecommitdiffstats
path: root/polyp/ioline.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-01-12 17:37:31 +0000
committerLennart Poettering <lennart@poettering.net>2005-01-12 17:37:31 +0000
commit4590f09d0b44aeb7cef3eed72b419444ea36d8e0 (patch)
tree1bdf89c241e1eb1e49906fdb8d163a26927764f0 /polyp/ioline.c
parent32bf3a106a946303f2175f01f3124354edd95a3e (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.c33
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);
+}