@ -1145,6 +1145,7 @@ quit(const char *arg) {
readin = running = False ;
}
void
resize ( Client * c , int x , int y , int w , int h , Bool sizehints ) {
XWindowChanges wc ;
@ -1280,15 +1281,19 @@ restack(void) {
void
run ( void ) {
char * p ;
fd_set rd ;
int xfd ;
int r , xfd ;
unsigned int len , offset ;
XEvent ev ;
/* main event loop, also reads status text from stdin */
XSync ( dpy , False ) ;
xfd = ConnectionNumber ( dpy ) ;
readin = True ;
stext [ sizeof stext - 1 ] = ' \0 ' ; /* 0-terminator is never touched */
offset = 0 ;
len = sizeof stext - 1 ;
stext [ len ] = ' \0 ' ; /* 0-terminator is never touched */
while ( running ) {
FD_ZERO ( & rd ) ;
if ( readin )
@ -1300,12 +1305,27 @@ run(void) {
eprint ( " select failed \n " ) ;
}
if ( FD_ISSET ( STDIN_FILENO , & rd ) ) {
if ( ( readin = ( stext = = fgets ( stext , sizeof stext - 1 , stdin ) ) ) )
stext [ strlen ( stext ) - 1 ] = ' \0 ' ; /* remove tailing '\n' */
else if ( feof ( stdin ) )
switch ( ( r = read ( STDIN_FILENO , stext + offset , len - offset ) ) ) {
case - 1 :
strncpy ( stext , strerror ( errno ) , len ) ;
readin = False ;
break ;
case 0 :
strncpy ( stext , " EOF " , 4 ) ;
else /* error occured */
strncpy ( stext , strerror ( errno ) , sizeof stext - 1 ) ;
readin = False ;
break ;
default :
stext [ offset + r ] = ' \0 ' ;
for ( p = stext ; * p & & * p ! = ' \n ' ; p + + ) ;
if ( * p = = ' \n ' ) {
* p = ' \0 ' ;
offset = 0 ;
}
else if ( offset + r < len - 1 )
offset + = r ;
else
offset = 0 ;
}
drawbar ( ) ;
}
while ( XPending ( dpy ) ) {