141 lines
4.3 KiB
Plaintext
141 lines
4.3 KiB
Plaintext
|
/* syshdr.unx -*- C -*-
|
||
|
Unix system header for the uuconf library.
|
||
|
|
||
|
Copyright (C) 1992, 1993 Ian Lance Taylor
|
||
|
|
||
|
This file is part of the Taylor UUCP uuconf library.
|
||
|
|
||
|
This library is free software; you can redistribute it and/or
|
||
|
modify it under the terms of the GNU Library General Public License
|
||
|
as published by the Free Software Foundation; either version 2 of
|
||
|
the License, or (at your option) any later version.
|
||
|
|
||
|
This library 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
|
||
|
Library General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU Library General Public
|
||
|
License along with this library; if not, write to the Free Software
|
||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||
|
|
||
|
The author of the program may be contacted at ian@airs.com or
|
||
|
c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
|
||
|
*/
|
||
|
|
||
|
/* The root directory (used when setting local-send and local-receive
|
||
|
values). */
|
||
|
#define ZROOTDIR "/"
|
||
|
|
||
|
/* The current directory (used by uuconv as a prefix for the newly
|
||
|
created file names). */
|
||
|
#define ZCURDIR "."
|
||
|
|
||
|
/* The names of the Taylor UUCP configuration files. These are
|
||
|
appended to NEWCONFIGLIB which is defined in Makefile. */
|
||
|
#define CONFIGFILE "/config"
|
||
|
#define SYSFILE "/sys"
|
||
|
#define PORTFILE "/port"
|
||
|
#define DIALFILE "/dial"
|
||
|
#define CALLFILE "/call"
|
||
|
#define PASSWDFILE "/passwd"
|
||
|
#define DIALCODEFILE "/dialcode"
|
||
|
|
||
|
/* The names of the various V2 configuration files. These are
|
||
|
appended to OLDCONFIGLIB which is defined in Makefile. */
|
||
|
#define V2_SYSTEMS "/L.sys"
|
||
|
#define V2_DEVICES "/L-devices"
|
||
|
#define V2_USERFILE "/USERFILE"
|
||
|
#define V2_CMDS "/L.cmds"
|
||
|
#define V2_DIALCODES "/L-dialcodes"
|
||
|
|
||
|
/* The names of the HDB configuration files. These are appended to
|
||
|
OLDCONFIGLIB which is defined in Makefile. */
|
||
|
#define HDB_SYSFILES "/Sysfiles"
|
||
|
#define HDB_SYSTEMS "/Systems"
|
||
|
#define HDB_PERMISSIONS "/Permissions"
|
||
|
#define HDB_DEVICES "/Devices"
|
||
|
#define HDB_DIALERS "/Dialers"
|
||
|
#define HDB_DIALCODES "/Dialcodes"
|
||
|
#define HDB_MAXUUXQTS "/Maxuuxqts"
|
||
|
#define HDB_REMOTE_UNKNOWN "/remote.unknown"
|
||
|
|
||
|
/* A string which is inserted between the value of OLDCONFIGLIB
|
||
|
(defined in the Makefile) and any names specified in the HDB
|
||
|
Sysfiles file. */
|
||
|
#define HDB_SEPARATOR "/"
|
||
|
|
||
|
/* A macro to check whether fopen failed because the file did not
|
||
|
exist. */
|
||
|
#define FNO_SUCH_FILE() (errno == ENOENT)
|
||
|
|
||
|
#if ! HAVE_STRERROR
|
||
|
|
||
|
/* We need a definition for strerror; normally the function in the
|
||
|
unix directory is used, but we want to be independent of that
|
||
|
library. This macro evaluates its argument multiple times. */
|
||
|
extern int sys_nerr;
|
||
|
extern char *sys_errlist[];
|
||
|
|
||
|
#define strerror(ierr) \
|
||
|
((ierr) >= 0 && (ierr) < sys_nerr ? sys_errlist[ierr] : "unknown error")
|
||
|
|
||
|
#endif /* ! HAVE_STRERROR */
|
||
|
|
||
|
/* This macro is used to make a filename found in a configuration file
|
||
|
into an absolute path. The zdir argument is the directory to put it
|
||
|
in. The zset argument is set to the new string. The fallocated
|
||
|
argument is set to TRUE if the new string was allocated. */
|
||
|
#define MAKE_ABSOLUTE(zset, fallocated, zfile, zdir, pblock) \
|
||
|
do \
|
||
|
{ \
|
||
|
if (*(zfile) == '/') \
|
||
|
{ \
|
||
|
(zset) = (zfile); \
|
||
|
(fallocated) = FALSE; \
|
||
|
} \
|
||
|
else \
|
||
|
{ \
|
||
|
size_t abs_cdir, abs_cfile; \
|
||
|
char *abs_zret; \
|
||
|
\
|
||
|
abs_cdir = strlen (zdir); \
|
||
|
abs_cfile = strlen (zfile); \
|
||
|
abs_zret = (char *) uuconf_malloc ((pblock), \
|
||
|
abs_cdir + abs_cfile + 2); \
|
||
|
(zset) = abs_zret; \
|
||
|
(fallocated) = TRUE; \
|
||
|
if (abs_zret != NULL) \
|
||
|
{ \
|
||
|
memcpy ((pointer) abs_zret, (pointer) (zdir), abs_cdir); \
|
||
|
abs_zret[abs_cdir] = '/'; \
|
||
|
memcpy ((pointer) (abs_zret + abs_cdir + 1), \
|
||
|
(pointer) (zfile), abs_cfile + 1); \
|
||
|
} \
|
||
|
} \
|
||
|
} \
|
||
|
while (0)
|
||
|
|
||
|
/* We want to be able to mark the Taylor UUCP system files as close on
|
||
|
exec. */
|
||
|
#if HAVE_FCNTL_H
|
||
|
#include <fcntl.h>
|
||
|
#else
|
||
|
#if HAVE_SYS_FILE_H
|
||
|
#include <sys/file.h>
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef FD_CLOEXEC
|
||
|
#define FD_CLOEXEC 1
|
||
|
#endif
|
||
|
|
||
|
#define CLOSE_ON_EXEC(e) \
|
||
|
do \
|
||
|
{ \
|
||
|
int cle_i = fileno (e); \
|
||
|
\
|
||
|
fcntl (cle_i, F_SETFD, fcntl (cle_i, F_GETFD, 0) | FD_CLOEXEC); \
|
||
|
} \
|
||
|
while (0)
|