view 3rdparty/packages/uucpbb/src/log.c @ 2855:e126b9acab32 lwtools-port

rules.mak: Do not hardcode path for "echo" It is basically the only tool with full path here and I don't see any reason for it. We don't use special echo options that would fail on the shell built-in echo. Also don't hardcode path for losetup. sudo should make sure you have the relevant location in your path, and that the path is sanitized, otherwise your sudo setup is broken.
author Tormod Volden <debian.tormod@gmail.com>
date Sat, 13 Jul 2013 11:30:31 +0200
parents 5ba8e711a1a3
children
line wrap: on
line source

/*  log.c   Routines to manage the uulog file.
    Copyright (C) 1994 Brad Spencer

    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"

static char logpath[200], fcaller[200];
static flag  copylog = FALSE,
             to_stderr = FALSE,
             wval;


/* Initalize logpath to requested log path and others */

void inizlog (caller, where)
char *caller;
int where;
{
     if (logdir == NULL)
          if ((logdir = getenv ("LOGDIR")) != NULL)
               logdir = strdup (logdir);
          else
               logdir = LOGDIR;

     if (caller == NULL  ||  *caller == '\0')
          strcpy (fcaller, "unnamed");
     else
          strcpy (fcaller, caller);

     switch (where)
       {
          /* Someone did something silly, so log to LOGDIR/uulog */
          default:
              where = 1;
              /* Fall through */

          /* Ok, log to the disk file LOGDIR/uulog */
          case 1:
               sprintf (logpath, "%s/uulog", logdir);
               break;

          /* Ok, log to the RAMDISK and copy the contents to LOGDIR/uulog
             later */

          case 2:
               sprintf (logpath, "%s/uulog", RAMDISK);
               copylog = TRUE;
               break;

          /* Ok, log to stderr */
          case 3:
               strcpy (logpath, "stderr");
               to_stderr = TRUE;
               break;
       }
     wval = where;

     /* Ensure that something is in the uulog.  Might as well make it useful
        information */
}



/* Log will write a message to the end of the log, returning where, or -1
   Really, varargs should be used here, but I don't know if OSK or OS-9000
   has them */

int log (message)
char *message;
{
     FILE *fd;

     /* Need a message in order to log one */
     if (message == NULL  || *message == '\0')
          return (wval);

     if (to_stderr)
          fd = stderr;
     else
          if ((fd = fopen (logpath, "a")) == NULL)
            {
              fprintf (stderr, "log: Couldn't open '%s', because %d\n",
                       logpath, errno);
              return (-1);
            }

     fprintf (fd,"%s %s %s\n", fcaller, gtime(), message);

     if (!to_stderr)
          fclose (fd);

     return (wval);
}



/* deinizlog will copy the log from RAMDISK, if needed */

int deinizlog()
{
     FILE *rfd, *lfd;
     char nlog[200], bigbuf[1024], llbuf[100];
     int r;

     /* Copy the file from the RAMDRIVE to LOGDIR/uulog, if asked to */
     if (copylog)
       {
          if ((rfd = fopen (logpath, "r")) == NULL)
            {
               fprintf (stderr, "deinizlog: Can't open '%s', because %d\n",
                        logpath, errno);
               return (-1);
            }

          sprintf (nlog, "%s/uulog", logdir);

          if ((lfd = fopen (nlog, "a")) == NULL)
            {
               fprintf (stderr, "deinizlog: Can't open '%s'\n", nlog);
               return (-1);
            }

          do
            {
               if ((r = fread (bigbuf, 1, sizeof (bigbuf)-1, rfd)) < 0)
                    fputs ("deinizlog: read error\n", stderr);
               else
                    if (r != 0)
                         fwrite (bigbuf, 1, r, lfd);
            }
          while (r > 0);

          fclose (rfd);
          fclose (lfd);

          if (r == 0)
               unlink (logpath);
       }
     return (r);
}