Chris Bennett <[email protected]> writes:

> I am having trouble seeing how these two functions are accomplshinig the
> same thing, checking for control files in the spool.
> These files always start with cf.
>
> in lpd.c
> makes sense to me.
>
> /*
>  * Make sure there's some work to do before forking off a child
>  * XXX - could be common w/ lpq
>  */
> static int
> ckqueue(char *cap)
> {
>       struct dirent *d;
>       DIR *dirp;
>       char *spooldir;
>
>       if (cgetstr(cap, "sd", &spooldir) >= 0) {
>               dirp = opendir(spooldir);
>               free(spooldir);
>       } else
>               dirp = opendir(_PATH_DEFSPOOL);
>
>       if (dirp == NULL)
>               return (-1);
>       while ((d = readdir(dirp)) != NULL) {
>               if (d->d_name[0] == 'c' && d->d_name[1] == 'f') {
>                       closedir(dirp);
>                       return (1);             /* found a cf file */
>               }
>       }
>       closedir(dirp);
>       return (0);
> }
>
>
> in lpq.c
> does not make sense to me
>
> /* XXX - could be common w/ lpd */
> static int
> ckqueue(char *cap)
> {
>       struct dirent *d;
>       DIR *dirp;
>       char *spooldir;
>
>       if (cgetstr(cap, "sd", &spooldir) >= 0) {
>               dirp = opendir(spooldir);
>               free(spooldir);
>       } else
>               dirp = opendir(_PATH_DEFSPOOL);
>
>       if (dirp == NULL)
>               return (-1);
>       while ((d = readdir(dirp)) != NULL) {
>               if (d->d_name[0] != 'c' || d->d_name[1] != 'f')
>                       continue;       /* daemon control files only */
>               closedir(dirp);
>               return (1);             /* found something */
>       }
>       closedir(dirp);
>       return (0);
> }
>
>
> the line:
> if (d->d_name[0] != 'c' || d->d_name[1] != 'f')
> is excluding files that start with cf,

The test is true for files names that *do not* start with "cf".  The
action is "continue", ie, restart the loop.  I think the code is
correct.

> yet then has the comment that daemon
> controls files are found.
> They both acccomplish the same thing of returning if there are files in the
> spool.

I agree that the lpq.c version is harder to read.  Patches to:
- use the same test in both lpd and lpq (the one from lpd is nicer)
- move ckqueue() to common_source/
would be welcome IMO.

-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to