@@ -76,6 +76,7 @@ strpriority(char *s, int *facility, int *level)
7676int
7777main (int argc , char * argv [])
7878{
79+ char buf [1024 ];
7980 char * p , * argv0 ;
8081 char * tag = "vlogger" ;
8182 int c ;
@@ -98,16 +99,21 @@ main(int argc, char *argv[])
9899 }
99100 }
100101
101- while ((c = getopt (argc , argv , "ip:Sst:" )) != -1 )
102+ while ((c = getopt (argc , argv , "f: ip:Sst:" )) != -1 )
102103 switch (c ) {
104+ case 'f' :
105+ if (freopen (optarg , "r" , stdin ) == NULL ) {
106+ fprintf (stderr , "vlogger: %s: %s\n" , optarg , strerror (errno ));
107+ return 1 ;
108+ }
109+ break ;
103110 case 'i' : logflags |= LOG_PID ; break ;
104111 case 'p' : strpriority (optarg , & facility , & level ); break ;
105112 case 'S' : Sflag ++ ; break ;
106113 case 's' : logflags |= LOG_PERROR ; break ;
107114 case 't' : tag = optarg ; break ;
108115 default :
109- usage :
110- fprintf (stderr , "usage: vlogger [-isS] [-p pri] [-t tag]\n" );
116+ fprintf (stderr , "usage: vlogger [-isS] [-f file] [-p pri] [-t tag]\n" );
111117 exit (1 );
112118 }
113119
@@ -129,14 +135,8 @@ main(int argc, char *argv[])
129135
130136 openlog (tag , logflags , facility );
131137
132- char * line = NULL ;
133- size_t linelen = 0 ;
134- ssize_t rd ;
135- while ((rd = getline (& line , & linelen , stdin )) != -1 ) {
136- if (line [rd - 1 ] == '\n' )
137- line [rd - 1 ] = '\0' ;
138- syslog (level |facility , "%s" , line );
139- }
138+ while (fgets (buf , sizeof buf , stdin ) != NULL )
139+ syslog (level |facility , "%s" , buf );
140140
141141 return 1 ;
142142}
0 commit comments