@ -44,7 +44,7 @@ const char ev_root[] = "/dev/input/";
int pressBufferAdd ( struct pressed_buffer * , unsigned short ) ;
int pressBufferAdd ( struct pressed_buffer * , unsigned short ) ;
int pressBufferRemove ( struct pressed_buffer * , unsigned short ) ;
int pressBufferRemove ( struct pressed_buffer * , unsigned short ) ;
void termHandler ( int signum ) ;
void termHandler ( int signum ) ;
void die ( void ) ;
void die ( const char * , int ) ;
void execCommand ( const char * ) ;
void execCommand ( const char * ) ;
// TODO: use getopts() to parse command line options
// TODO: use getopts() to parse command line options
@ -60,7 +60,7 @@ int main (void)
/* Open the event directory */
/* Open the event directory */
DIR * ev_dir = opendir ( ev_root ) ;
DIR * ev_dir = opendir ( ev_root ) ;
if ( ! ev_dir )
if ( ! ev_dir )
die ( ) ;
die ( " opendir " , errno ) ;
int fd_num = 0 ;
int fd_num = 0 ;
struct pollfd * fds = NULL ;
struct pollfd * fds = NULL ;
@ -105,7 +105,7 @@ int main (void)
tmp_p = realloc ( fds , sizeof ( struct pollfd ) * ( fd_num + 1 ) ) ;
tmp_p = realloc ( fds , sizeof ( struct pollfd ) * ( fd_num + 1 ) ) ;
if ( ! tmp_p )
if ( ! tmp_p )
die ( ) ;
die ( " realloc file descriptors " , errno ) ;
fds = tmp_p ;
fds = tmp_p ;
fds [ fd_num ] . events = POLLIN ;
fds [ fd_num ] . events = POLLIN ;
@ -134,10 +134,10 @@ int main (void)
epoll_read_ev . events = EPOLLIN ;
epoll_read_ev . events = EPOLLIN ;
int ev_fd = epoll_create ( 1 ) ;
int ev_fd = epoll_create ( 1 ) ;
if ( ev_fd < 0 )
if ( ev_fd < 0 )
die ( ) ;
die ( " epoll_create " , errno ) ;
for ( int i = 0 ; i < fd_num ; i + + )
for ( int i = 0 ; i < fd_num ; i + + )
if ( epoll_ctl ( ev_fd , EPOLL_CTL_ADD , fds [ i ] . fd , & epoll_read_ev ) < 0 )
if ( epoll_ctl ( ev_fd , EPOLL_CTL_ADD , fds [ i ] . fd , & epoll_read_ev ) < 0 )
die ( ) ;
die ( " epoll_ctl " , errno ) ;
# endif
# endif
for ( ; ; ) {
for ( ; ; ) {
@ -214,7 +214,8 @@ int main (void)
if ( ! term )
if ( ! term )
fputs ( " An error occured \n " , stderr ) ;
fputs ( " An error occured \n " , stderr ) ;
for ( int i = 0 ; i < fd_num ; i + + ) {
for ( int i = 0 ; i < fd_num ; i + + ) {
if ( close ( fds [ i ] . fd ) = = - 1 ) die ( ) ;
if ( close ( fds [ i ] . fd ) = = - 1 )
die ( " close file descriptors " , errno ) ;
}
}
return 0 ;
return 0 ;
}
}
@ -234,10 +235,8 @@ int pressBufferAdd (struct pressed_buffer *pb, unsigned short key)
unsigned short * b ;
unsigned short * b ;
b = realloc ( pb - > buf , sizeof ( unsigned short ) * ( pb - > size + 1 ) ) ;
b = realloc ( pb - > buf , sizeof ( unsigned short ) * ( pb - > size + 1 ) ) ;
if ( ! b ) {
if ( ! b )
fprintf ( stderr , " realloc failed in pressBufferAdd: %s " , strerror ( errno ) ) ;
die ( " realloc failed in pressBufferAdd " , errno ) ;
exit ( errno ) ;
}
pb - > buf = b ;
pb - > buf = b ;
pb - > buf [ pb - > size + + ] = key ;
pb - > buf [ pb - > size + + ] = key ;
@ -257,11 +256,8 @@ int pressBufferRemove (struct pressed_buffer *pb, unsigned short key)
unsigned short * b ;
unsigned short * b ;
b = realloc ( pb - > buf , sizeof ( unsigned short ) * pb - > size ) ;
b = realloc ( pb - > buf , sizeof ( unsigned short ) * pb - > size ) ;
/* if realloc failed but the buffer is populated throw an error */
/* if realloc failed but the buffer is populated throw an error */
if ( ! b & & pb - > size ) {
if ( ! b & & pb - > size )
fprintf ( stderr , " realloc failed in pressBufferRemove: %s " ,
die ( " realloc failed in pressBufferRemove: %s " , errno ) ;
strerror ( errno ) ) ;
exit ( errno ) ;
}
pb - > buf = b ;
pb - > buf = b ;
return 0 ;
return 0 ;
}
}
@ -275,17 +271,17 @@ void termHandler (int signum)
term = 1 ;
term = 1 ;
}
}
void die ( void )
void die ( const char * msg , int err )
{
{
fputs ( strerror ( errno ) , stderr ) ;
fprintf ( stderr , " %s: %s " , msg ! = NULL ? msg : " error " , err ? strerror ( err ) : " exiting " ) ;
exit ( errno ) ;
exit ( err ) ;
}
}
void execCommand ( const char * path )
void execCommand ( const char * path )
{
{
switch ( fork ( ) ) {
switch ( fork ( ) ) {
case - 1 :
case - 1 :
fprintf ( stderr , " Could not fork: %s " , strerror ( errno ) ) ;
die ( " Could not fork: %s " , errno ) ;
break ;
break ;
case 0 :
case 0 :
/* we are the child */
/* we are the child */