Re: [dwm] broken pipes

From: Anselm R. Garbe <arg_AT_suckless.org>
Date: Sun, 26 Nov 2006 14:27:02 +0100

Hi guys,

I applied a mixture of Jukka's and Manuel's patch to hg tip.
Thanks to Manuel!

Regards,
        Anselm

On Sun, Nov 26, 2006 at 02:12:42PM +0100, Manuel Badzong wrote:
> Ciao Jukka
>
> Jukka Salmi wrote:
> >aka `dwm <>dwm_pipe', BTW...
> >
> This definitely looks better and doesn't block on open. Though AFAIK
> POSIX doesn't specify the behavior of a FIFO opened O_RDWR and may
> result differently across operating systems. Anyway this works fine.
>
> >Thanks for the cleanup. But now that dwm's reading from stdin isn't
> >line buffered anymore the read string shouldn't be required to have a
> >trailing newline. See attached patch.
> >
> Must have been blind. Because \n looks really bad, I propose the
> following patch (also removes 2 useless lines).
>
> Regards, Manuel
>

> --- jukka/main.c 2006-11-26 14:06:32.000000000 +0100
> +++ my_dwm-2.3/main.c 2006-11-26 14:04:30.000000000 +0100
> @@ -228,6 +228,7 @@
> int
> main(int argc, char *argv[]) {
> int r, xfd;
> + char *p;
> fd_set rd;
>
> if(argc == 2 && !strncmp("-v", argv[1], 3)) {
> @@ -270,14 +271,12 @@
> if(select(xfd + 1, &rd, NULL, NULL, NULL) == -1) {
> if(errno == EINTR)
> continue;
> - else
> - eprint("select failed\n");
> + eprint("select failed\n");
> }
> if(FD_ISSET(STDIN_FILENO, &rd)) {
> switch(r = read(STDIN_FILENO, stext, sizeof(stext)-1)) {
> case -1:
> - strncpy(stext, strerror(errno), sizeof(stext));
> - stext[sizeof(stext)-1] = '\0';
> + strncpy(stext, strerror(errno), sizeof(stext)-1);
> readin = False;
> break;
> case 0:
> @@ -286,6 +285,9 @@
> break;
> default:
> stext[r-(stext[r-1]=='\n'?1:0)] = '\0';
> + for(p=stext+strlen(stext)-1;p>stext && *p!='\n';--p);
> + if(p>stext)
> + strncpy(stext, p+1, sizeof(stext));
> }
> drawstatus();
> }

-- 
 Anselm R. Garbe >< http://suckless.org/~arg/ >< GPG key: 0D73F361
Received on Sun Nov 26 2006 - 14:27:02 UTC

This archive was generated by hypermail 2.2.0 : Sun Jul 13 2008 - 14:32:46 UTC