1
0
Files
irix-657m-src/eoe/include/ssdi.h
2022-09-29 17:59:04 +03:00

129 lines
4.0 KiB
C

#ifndef __SSDI_H__
#define __SSDI_H__
#ifdef __cplusplus
extern "C" {
#endif
#ident "$Revision: 1.3 $"
/*
*
* Copyright 1995, Silicon Graphics, Inc.
* All Rights Reserved.
*
* This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
* the contents of this file may not be disclosed to third parties, copied or
* duplicated in any form, in whole or in part, without the prior written
* permission of Silicon Graphics, Inc.
*
* RESTRICTED RIGHTS LEGEND:
* Use, duplication or disclosure by the Government is subject to restrictions
* as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
* and Computer Software clause at DFARS 252.227-7013, and/or in similar or
* successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
* rights reserved under the Copyright Laws of the United States.
*/
/* Maximum # of characters in database name or src name */
#define _SSDI_MAXDBNAME 32
#define _SSDI_MAXSRCNAME 32
/* Max. # of srcs for a database, including compiled-in ones */
#define _SSDI_MAXSRCS 8
/* Max. # of different databases, like passwd, hosts, etc.*/
#define _SSDI_MAXDBS 16
/*
* Symbol that should be exported by dynamic sources; the
* variable corresponding to the symbol holds the ssdi vector.
* Format is: <srcname>_<dbname>_ssdi_funcs.
* Length of vector is determined by the database.
*/
#define _SSDI_MAXSSDISYM (_SSDI_MAXDBNAME + sizeof("_") + _SSDI_MAXSRCNAME + sizeof("_ssdi_funcs"))
/* Path name of config file */
#define _SSDI_CONFIG_FILE "/etc/ssdi.conf"
/* Where to look for shared-lib objs for a given source. */
#define _SSDI_STD_SRC_DIR "/usr/lib"
/*
* Internal to database interface routines --> used to keep track of
* information about sources.
*/
typedef void *(*_SSDI_VOIDFUNC)();
struct ssdisrcinfo {
char *ssdi_si_name; /* name of source */
_SSDI_VOIDFUNC *ssdi_si_funcs; /* ssdi function vector */
};
/* Test for empty srcinfo descriptor. Sname will be null. */
#define _SSDI_ISEMPTYSRC(src) \
(((src)->ssdi_si_name == NULL) || ((src)->ssdi_si_name[0] == '\0'))
/* Invoke function in src by index, return 1; if no func, return NULL */
#define _SSDI_INVOKE_VOID(src,idx,cast) \
( \
((src)->ssdi_si_funcs[(idx)] == 0) ? \
(void)NULL : (*(cast)((src)->ssdi_si_funcs[(idx)]))() \
)
/* Invoke function in src by index if no func, return NULL */
#define _SSDI_INVOKE(src,idx,cast) \
( \
((src)->ssdi_si_funcs[(idx)] == 0) ? \
(NULL) : (*(cast)((src)->ssdi_si_funcs[(idx)]))() \
)
/* Same as above, but with one argument to target function */
#define _SSDI_INVOKE1(src,idx,cast,arg) \
( \
((src)->ssdi_si_funcs[(idx)] == 0) ? \
(NULL) : (*(cast)((src)->ssdi_si_funcs[(idx)]))((arg)) \
)
/* Same as above, but with two argument to target function */
#define _SSDI_INVOKE2(src,idx,cast,arg1,arg2) \
( \
((src)->ssdi_si_funcs[(idx)] == 0) ? \
(NULL) : (*(cast)((src)->ssdi_si_funcs[(idx)]))((arg1),(arg2)) \
)
/* Same as above, but with three argument to target function */
#define _SSDI_INVOKE3(src,idx,cast,arg1,arg2,arg3) \
( \
((src)->ssdi_si_funcs[(idx)] == 0) ? \
(NULL) : (*(cast)((src)->ssdi_si_funcs[(idx)]))((arg1),(arg2),(arg3)) \
)
struct ssdiconfiginfo {
int ssdi_ci_got_config;
char *ssdi_ci_dsrcs[_SSDI_MAXSRCS];
char **ssdi_ci_currdsrc;
};
#define _SSDI_InitConfigInfo { 0, { NULL }, NULL }
/*
* For a given database, get config info if needed, and load the first
* dynamic source that is not already loaded. If a source was loaded,
* information about the source is available in 'sip'. 'ci' keeps track
* of cached config entry and the next source to load.
* Returns 0 if a source was loaded.
* 1 if config entry was not found or no source could be loaded.
*/
int ssdi_get_config_and_load(char *, /* database name */
struct ssdiconfiginfo *,/* config info */
struct ssdisrcinfo *); /* info. about loaded source */
#ifdef __cplusplus
}
#endif
#endif /* !__SSDI_H__ */