|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ T s ┃
Length: 1917 (0x77d) Types: TextFile Names: »selectproc.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─ ⟦this⟧ »EUUGD11/euug-87hel/sec8/sps/selectproc.c«
# include "sps.h" # include "flags.h" # ifdef USELOGINUID # include <pwd.h> # endif USELOGINUID /* ** SELECTPROC - Given a process structure, this procedure decides whether ** the process is a candidate for printing. */ selectproc ( p, process, thisuid ) register struct process *p ; register struct process *process ; int thisuid ; { register union flaglist *fp ; register struct process *pp ; #ifdef USELOGINUID char *username ; struct passwd *pw ; char *getlogin() ; struct passwd *getpwnam() ; #endif USELOGINUID extern struct flags Flg ; /* Flg.flg_AZ is an internal flag set if one of flags `A' to `Z' was specified. If this is not set, a process is listed only if it or one of its ancestors belongs to the invoking user. */ if ( !Flg.flg_AZ ) { #ifdef USELOGINUID thisuid = (username = getlogin()) && (pw = getpwnam( username )) ? pw->pw_uid : getuid() ; #endif USELOGINUID for ( pp = p ; pp > &process[1] ; pp = pp->pr_pptr ) if ( thisuid == pp->pr_p.p_uid ) return ( 1 ) ; } if ( Flg.flg_A ) return ( 1 ) ; if ( Flg.flg_P ) for ( fp = Flg.flg_Plist ; fp->f_pid >= 0 ; fp++ ) if ( fp->f_pid == p->pr_p.p_pid ) return ( 1 ) ; if ( Flg.flg_U ) for ( pp = p ; pp > &process[1] ; pp = pp->pr_pptr ) for ( fp = Flg.flg_Ulist ; fp->f_uid >= 0 ; fp++ ) if ( fp->f_uid == pp->pr_p.p_uid ) return ( 1 ) ; switch ( p->pr_p.p_stat ) { case SRUN : if ( Flg.flg_B ) return ( 1 ) ; break ; case SSLEEP : if ( Flg.flg_B && p->pr_p.p_pri < PZERO && p->pr_p.p_pid > MSPID ) return ( 1 ) ; case SWAIT : case SIDL : if ( Flg.flg_W ) return ( 1 ) ; break ; case SSTOP : if ( Flg.flg_S ) return ( 1 ) ; break ; case SZOMB : if ( Flg.flg_Z ) return ( 1 ) ; break ; default : break ; } return ( 0 ) ; }