Mercurial > hg > Members > kono > nitros9-code
view 3rdparty/packages/uucpbb/src/findwork.c @ 1772:5ba8e711a1a3
source added
author | boisy |
---|---|
date | Fri, 01 Apr 2005 22:04:25 +0000 |
parents | |
children |
line wrap: on
line source
/* findwork.c Routine to find and process outgoing uucp traffic. Copyright (C) 1990, 1993 Rick Adams and Bob Billson This file is part of the OS-9 UUCP package, UUCPbb. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. The author of UUCPbb, Bob Billson, can be contacted at: bob@kc2wz.bubble.org or uunet!kc2wz!bob or by snail mail: 21 Bates Way, Westfield, NJ 07090 */ #include "uucp.h" #include "uucico.h" #include <modes.h> #ifndef _OSK #include "dir_6809.h" #else #include <dir.h> #endif /* This function checks to see if there is any work to do. Used by slave() -- BAS */ int anywork() { DIR *dp; register struct direct *dirbuf; /* defined in dir.h */ flag worktodo = FALSE; if ((dp = opendir (".")) == NULL) { logerror ("anywork: not enough memory to read directory"); longjmp (env, FATAL); } while ((dirbuf = readdir (dp)) != NULL) if (strnucmp (dirbuf->d_name, "C.", 2) == 0) { worktodo = TRUE; break; } closedir (dp); return ((int)worktodo); } /* findwork() should ONLY be executed when the role is MASTER -- BAS */ void findwork() { void dowork(); DIR *dp; /* defined in dir.h */ register struct direct *dirbuf; /* */ /* Open spool directory; exit on error. Our current data directory should already be the correct spool directory for this remote. */ if (role == SLAVE) { if (debuglvl > 1) fputs ("findwork: Why is the SLAVE here?\n", log); return; } if ((dp = opendir (".")) == NULL) { logerror ("findwork: can't read entire directory--too much work to do"); /* fatal error, abort back to uucico() */ longjmp (env, FATAL); } /* scan the directory */ while ((dirbuf = readdir (dp)) != NULL) if (dirbuf->d_name[0] != '.') if (strnucmp (dirbuf->d_name, "C.", 2) == 0) dowork (dirbuf->d_name); closedir (dp); } /* dowork --do work for one C. file (while in master mode) */ void dowork (cfile) char *cfile; { char line[100]; FILE *file; register char *p; flag workdone, killC = TRUE; /* assume we succeed */ if ((file = fopen (cfile, "r")) == NULL) /* DEBUG */ { fprintf (log, "DEBUG--dowork: can't open C. file '%s'\n", cfile); return; } p = line; while (mfgets (p, sizeof (line), file) != NULL) { switch (*p) { case 'S': workdone = msendfile (p); break; case 'R': workdone = mrecvfile (p); break; default: workdone = TRUE; break; } if (!workdone) killC = FALSE; } fclose (file); /* get rid of C. file only if everything went okay */ if (killC) if (unlink (cfile) == ERROR) { char tmp[65]; sprintf (tmp, "dowork: can't unlink %s ...error %d\n", cfile, errno); logerror (tmp); } } /* slavework --do queued work from remote system */ int slavework (cline) char *cline; { char command[120]; strcpy (command, cline); switch (*cline) { case 'R': srecvfile (command); break; case 'S': ssendfile (command); break; default: break; } }