X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=grab_client.c;h=5971f115e7e11d077e825cc744d97abf2f6cbfd5;hp=2c95022e3ed7769308532f9598d3b80a8d82bda9;hb=70d1779ed65ed4fb71680743aba2e6ca8aebb43c;hpb=e2c65e016f5fb330e0360a6fcea60b6ded845460 diff --git a/grab_client.c b/grab_client.c index 2c95022e..5971f115 100644 --- a/grab_client.c +++ b/grab_client.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 Andre Noll + * Copyright (C) 2006-2010 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) @@ -121,6 +123,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 +132,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 +183,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 +253,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)