159 lines
7.3 KiB
C
159 lines
7.3 KiB
C
/*
|
|
* Copyright (c) 1991, 1992, 1994 by the University of Southern California
|
|
*
|
|
* For copying and distribution information, please see the file
|
|
* <usc-license.h>.
|
|
*/
|
|
|
|
#include <usc-license.h>
|
|
|
|
#include <pfs_threads.h>
|
|
|
|
/*
|
|
* pcompat.h - Definitions for compatability library
|
|
*
|
|
* This file contains the defintions used by the compatability
|
|
* library. Among the definitions are the possible values for
|
|
* the pfs_enable variable. This file also contains the external
|
|
* declaration of that variable. The module pfs_enable.o is included in
|
|
* libpfs.a because some of the routines in that library set it.
|
|
* It can also be explicitly declared in a program that uses the compatability
|
|
* library, if you wish.
|
|
*
|
|
* The only place it is checked, however, is in pfs_access,
|
|
* found in libpcompat.a
|
|
*/
|
|
|
|
#if 0 /* this code is commented out because
|
|
pfs_default is no longer an external
|
|
interface. --swa, April 13, 1994*/
|
|
extern int pfs_default; /* initialized to PMAP_UNINITIALIZED in
|
|
libpcompat. Set to some other value in
|
|
p__get_pfs_default(), which might include
|
|
PMAP_UNSET. Keeping this as a global
|
|
variable isn't really necessary. It does
|
|
let the users know what the starting value
|
|
of PFS_DEFAULT was, but I'm not sure that's
|
|
strictly necessary.
|
|
This variable is currently used entirely
|
|
internally to the PCOMPAT library, and could
|
|
be renamed easily, since no users are using
|
|
it as an interface. */
|
|
#endif
|
|
|
|
extern int pfs_enable; /* pfs_enable is declared in the PFS library,
|
|
since routines in that library modify it.
|
|
In that library, it defaults to PMAP_UNSET.
|
|
This can be declared explicitly in a file
|
|
linked with the program using this library
|
|
if the programmer wants to override the
|
|
value. */
|
|
|
|
extern int pfs_quiet; /* see lib/pcompat/pfs_quiet.c. This can be
|
|
declared explicitly in a file linked with
|
|
the program using this library if the
|
|
programmer wants to override the
|
|
value. Non-zero value means system calls
|
|
don't print any information. */
|
|
|
|
/* Definitions for values of pfs_enable */
|
|
#if 0 /* this will probably never be needed, and can
|
|
be deleted after Beta.5.3 goes out.
|
|
|
|
--swa, April 13, 1994*/
|
|
#define PMAP_UNINITIALIZED (-1) /* Used only for pfs_default. Indicates that
|
|
its starting value hasn't been read from the
|
|
environment yet. If the environment has
|
|
already been searched for PFS_DEFAULT, then
|
|
this will be reset to PMAP_UNSET. */
|
|
#endif
|
|
#define PMAP_DISABLE 0 /* always resolve names in UNIX */
|
|
#define PMAP_ENABLE 1 /* always reslve names in VS */
|
|
#define PMAP_COLON 2 /* Resolve names in UNIX by default. Names
|
|
preceded with a colon are resolved in the
|
|
VS. */
|
|
#define PMAP_ATSIGN_NF 3 /* Resolve names in VS by default. Names
|
|
preceded with an @ sign and names not found
|
|
in the VS are resolved in the UNIX
|
|
filesystem. */
|
|
|
|
#define PMAP_ATSIGN 4 /* Resolve names in the VS by default. Names
|
|
preceded with an @ sign are resolved in the
|
|
UNIX filesystem. */
|
|
#define PMAP_UNSET 5 /* pfs_enable is initialized to this value by
|
|
the pcompat library, unless the user program
|
|
declares its own version of pfs_enable and
|
|
initializes it to something else. If
|
|
pfs_enable is set to PMAP_UNSET, then
|
|
p__initialize_pfs_enable() will be called by
|
|
the PCOMPAT library routines in order to
|
|
initialize pfs_enable to the current pfs
|
|
default.
|
|
|
|
This allows a user program to initialize
|
|
pfs_enable and not have it overridden by
|
|
pfs_default. */
|
|
|
|
/* Definitions for PFS_ACCESS */
|
|
#define PFA_MAP 0 /* Map the file name only */
|
|
#define PFA_CREATE 1 /* Create file if not found */
|
|
#define PFA_CRMAP 2 /* Map file name. Map to new name if not found */
|
|
#define PFA_RO 4 /* Access to file is read only */
|
|
|
|
|
|
#define DISABLE_PFS(stmt) do {int DpfStmp; DpfStmp = pfs_enable;\
|
|
pfs_enable = PMAP_DISABLE; \
|
|
stmt; \
|
|
pfs_enable = DpfStmp;} while (0)
|
|
|
|
#define DISABLE_PFS_START() DpfStmp = pfs_enable; pfs_enable = PMAP_DISABLE;
|
|
#define DISABLE_PFS_END() pfs_enable = DpfStmp;
|
|
|
|
#if 0 /* This interface is dead as of 4/13/94 --swa
|
|
*/
|
|
void p__get_pfs_default(); /* only used here :) */
|
|
#define check_pfs_default() \
|
|
do { if(pfs_default == -1) p__get_pfs_default(); } while (0)
|
|
#endif
|
|
/* New interface as of 4/13/94 --swa */
|
|
/* This is called by the p__compat_initialize() routine, iff pfs_enable is set
|
|
to PMAP_UNSET. It looks for the PFS_DEFAULT environment variable and
|
|
attempts to set pfs_enable accordingly.
|
|
*/
|
|
void p__set_pfs_enable_from_default(void);
|
|
|
|
extern int pfs_access(const char path[], char npath[], int npathlen, int
|
|
flags);
|
|
|
|
/* Subfunctions used internally by the PCOMPAT library. */
|
|
|
|
extern int p__getvdirentries(int fd, char *buf, int nbytes, int *basep);
|
|
|
|
extern int p__readvdirentries(char *dirname);
|
|
|
|
extern int p__delvdirentries(int desc);
|
|
|
|
extern int p__seekvdir(int desc, int pos);
|
|
|
|
extern int p__getvdbsize(int desc, int pos);
|
|
|
|
#ifndef DIR
|
|
#include <pmachine.h> /* for USE_SYS_DIR_H test. */
|
|
|
|
/* Needed if not already included. */
|
|
#ifdef USE_SYS_DIR_H
|
|
#include <sys/dir.h>
|
|
#else /* USE_SYS_DIR_H */
|
|
#include <dirent.h>
|
|
#endif /* USE_SYS_DIR_H */
|
|
|
|
#endif /* DIR */
|
|
|
|
/* Called by seekdir(). */
|
|
extern void p__seekdir(register DIR *dirp, long loc);
|
|
|
|
/* This is called internally by all pcompat library functions that call
|
|
PFS library functions. It makes sure that the PFS library and any libraries
|
|
that PFS uses are properly initialized before usage. */
|
|
extern void p__compat_initialize(void);
|