/*
- * $Id: main.c,v 1.24 2009-01-16 18:21:16 morgana Exp $
+ * $Id: main.c,v 1.31 2009-10-29 13:38:15 didg Exp $
*
* Copyright (c) 1990,1995 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
#include "uam_auth.h"
#include "print_cups.h"
-#define _PATH_PAPDPPDFILE ".ppd"
#define PIPED_STATUS "status: print spooler processing job"
exit(i);
}
-#if !defined( ibm032 ) && !defined( _IBMR2 )
- void
-#endif /* ! ibm032 && ! _IBMR2 */
-die( n )
- int n;
+static void
+die(int n)
{
struct printer *pr;
struct at_addr addr;
papd_exit( n );
}
-#if !defined( ibm032 ) && !defined( _IBMR2 )
- void
-#endif /* ! ibm032 && ! _IBMR2 */
-reap()
+static void
+reap(int sig _U_)
{
int status;
int pid;
- while (( pid = wait3( &status, WNOHANG, 0 )) > 0 ) {
+ while (( pid = wait3( &status, WNOHANG, NULL )) > 0 ) {
if ( WIFEXITED( status )) {
if ( WEXITSTATUS( status )) {
LOG(log_error, logtype_papd, "child %d exited with %d", pid,
return;
}
-char rbuf[ 255 + 1 + 8 ];
+static char rbuf[ 255 + 1 + 8 ];
-int main( ac, av )
- int ac;
- char **av;
+int main(int ac, char **av)
{
extern char *optarg;
perror( "gethostname" );
exit( 1 );
}
- if (( p = strchr( hostname, '.' )) != 0 ) {
+ if (( p = strchr( hostname, '.' )) != NULL ) {
*p = '\0';
}
if (( defprinter.p_name = (char *)malloc( strlen( hostname ) + 1 ))
defprinter.p_type = "LaserWriter";
defprinter.p_zone = "*";
memset(&defprinter.p_addr, 0, sizeof(defprinter.p_addr));
- defprinter.p_ppdfile = _PATH_PAPDPPDFILE;
#ifdef __svr4__
defprinter.p_flags = P_PIPED;
defprinter.p_printer = "/usr/bin/lp -T PS";
}
if (!(pr->p_flags & P_CUPS)) {
- if ((size_t)-1 != convert_string_allocate(CH_UNIX, CH_MAC, pr->p_name, strlen(pr->p_name), &atname)) {
+ if ((size_t)-1 != convert_string_allocate(CH_UNIX, CH_MAC, pr->p_name, -1, &atname)) {
pr->p_u_name = pr->p_name;
pr->p_name = atname;
}
sv.sa_handler = die;
sigemptyset( &sv.sa_mask );
sv.sa_flags = SA_RESTART;
- if ( sigaction( SIGTERM, &sv, 0 ) < 0 ) {
+ if ( sigaction( SIGTERM, &sv, NULL ) < 0 ) {
LOG(log_error, logtype_papd, "sigaction: %s", strerror(errno) );
papd_exit( 1 );
}
sv.sa_handler = reap;
sigemptyset( &sv.sa_mask );
sv.sa_flags = SA_RESTART;
- if ( sigaction( SIGCHLD, &sv, 0 ) < 0 ) {
+ if ( sigaction( SIGCHLD, &sv, NULL ) < 0 ) {
LOG(log_error, logtype_papd, "sigaction: %s", strerror(errno) );
papd_exit( 1 );
}
for ( pr = printers; pr; pr = pr->p_next ) {
FD_SET( atp_fileno( pr->p_atp ), &fdset );
}
- if (( c = select( FD_SETSIZE, &fdset, 0, 0, 0 )) < 0 ) {
+ if (( c = select( FD_SETSIZE, &fdset, NULL, NULL, NULL )) < 0 ) {
if ( errno == EINTR ) {
continue;
}
* 0xffff to indicate we're busy
*/
#ifdef DEBUG
- LOG(log_debug, logtype_papd, "CUPS: PAP_OPEN");
+ LOG(log_debug9, logtype_papd, "CUPS: PAP_OPEN");
#endif
if ( (pr->p_flags & P_SPOOLED) && (cups_get_printer_status ( pr ) == 0)) {
LOG(log_error, logtype_papd, "CUPS_PAP_OPEN: %s is not accepting jobs",
sv.sa_handler = SIG_DFL;
sigemptyset( &sv.sa_mask );
sv.sa_flags = SA_RESTART;
- if ( sigaction( SIGTERM, &sv, 0 ) < 0 ) {
+ if ( sigaction( SIGTERM, &sv, NULL ) < 0 ) {
LOG(log_error, logtype_papd, "sigaction: %s", strerror(errno) );
exit( 1 );
}
+
+ if ( sigaction( SIGCHLD, &sv, NULL ) < 0 ) {
+ LOG(log_error, logtype_papd, "sigaction: %s", strerror(errno) );
+ exit( 1 );
+ }
for ( pr = printers; pr; pr = pr->p_next ) {
atp_close( pr->p_atp );
* We assume buf is big enough for 255 bytes of data and a length byte.
*/
-int getstatus( pr, buf )
- struct printer *pr;
- char *buf;
+int getstatus(struct printer *pr, char *buf)
{
#ifdef HAVE_CUPS
#endif /* HAVE_CUPS */
}
-char *pgetstr();
+char *pgetstr(char *id, char **area);
char *getpname(char **area, int bufsize);
#define PF_CONFBUFFER 1024
-static void getprinters( cf )
- char *cf;
+static void getprinters( char *cf)
{
char buf[ PF_CONFBUFFER ], area[ PF_CONFBUFFER ], *a, *p, *name, *type, *zone;
struct printer *pr;
/*
* Get PPD file.
*/
- if (( p = pgetstr( "pd", &a )) == NULL ) {
- pr->p_ppdfile = defprinter.p_ppdfile;
- } else {
+ if (( p = pgetstr( "pd", &a ) )) {
if (( pr->p_ppdfile = (char *)malloc( strlen( p ) + 1 )) == NULL ) {
perror( "malloc" );
exit( 1 );
}
}
-int rprintcap( pr )
- struct printer *pr;
+int rprintcap( struct printer *pr)
{
#ifdef HAVE_CUPS
* Check for ppd file, moved here because of cups_autoadd we cannot check at the usual location
*/
- if ( pr->p_ppdfile == defprinter.p_ppdfile ) {
+ if ( pr->p_ppdfile == NULL ) {
if ( (p = (char *) cups_get_printer_ppd ( pr->p_printer )) != NULL ) {
if (( pr->p_ppdfile = (char *)malloc( strlen( p ) + 1 )) == NULL ) {
LOG(log_error, logtype_papd, "malloc: %s", strerror(errno) );
}
strcpy( pr->p_ppdfile, p );
pr->p_flags |= P_CUPS_PPD;
- /*LOG(log_info, logtype_papd, "PPD File for %s set to %s", pr->p_printer, pr->p_ppdfile );*/
+ LOG(log_info, logtype_papd, "PPD File for %s set to %s", pr->p_printer, pr->p_ppdfile );
}
}