X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=grab_client.c;h=8e6715036769dace2f633d867d4bdb436901b6e0;hp=2c95022e3ed7769308532f9598d3b80a8d82bda9;hb=69a7e7aa11d8bf9b05d6431c57276befbc9b35a3;hpb=e2c65e016f5fb330e0360a6fcea60b6ded845460 diff --git a/grab_client.c b/grab_client.c index 2c95022e..8e671503 100644 --- a/grab_client.c +++ b/grab_client.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 Andre Noll + * Copyright (C) 2006-2011 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -45,6 +45,8 @@ enum grab_flags { struct grab_client { /* The value of the -p option. */ char *parent; + /* The value of the -n option. */ + char *name; /** The file descriptor to send the grabbed stream to. */ int fd; /** See \ref grab_mode. */ @@ -76,7 +78,7 @@ static int gc_write(struct grab_client *gc, char *buf, size_t len) if (gc->mode == GM_SLOPPY) return len; } - ret = write_nonblock(gc->fd, buf, len, 0); + ret = write_nonblock(gc->fd, buf, len); if (ret < 0) goto err; if (ret > 0) @@ -99,11 +101,8 @@ static void gc_pre_select(struct sched *s, struct task *t) if (ret == 0) return; - if (ret < 0) { - s->timeout.tv_sec = 0; - s->timeout.tv_usec = 0; - return; - } + if (ret < 0) + sched_min_delay(s); para_fd_set(gc->fd, &s->wfds, &s->max_fileno); } @@ -121,6 +120,7 @@ static void gc_post_select(struct sched *s, struct task *t); static void gc_activate(struct grab_client *gc) { struct btr_node *root = audiod_get_btr_root(), *parent; + char *name = gc->name? gc->name : "grab"; if (!root) return; @@ -129,11 +129,13 @@ static void gc_activate(struct grab_client *gc) return; PARA_INFO_LOG("activating fd %d\n", gc->fd); list_move(&gc->node, &active_grab_client_list); - gc->btrn = btr_new_node("grab", parent, NULL, NULL); + gc->btrn = btr_new_node(&(struct btr_node_description) + EMBRACE(.name = name, .parent = parent)); if (!gc->task.pre_select) { gc->task.pre_select = gc_pre_select; gc->task.post_select = gc_post_select; - sprintf(gc->task.status, "grab"); + snprintf(gc->task.status, sizeof(gc->task.status) - 1, "%s", name); + gc->task.status[sizeof(gc->task.status) - 1] = '\0'; register_task(&gc->task); } } @@ -178,6 +180,7 @@ static int gc_close(struct grab_client *gc, int err) */ close(gc->fd); free(gc->parent); + free(gc->name); return 1; } gc_activate(gc); @@ -247,6 +250,10 @@ static int gc_check_args(int argc, char **argv, struct grab_client *gc) gc->parent = para_strdup(arg + 3); continue; } + if (!strncmp(arg, "-n=", 3)) { + gc->name = para_strdup(arg + 3); + continue; + } return -E_GC_SYNTAX; } if (i != argc)