[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: overlays and config parsing
Howard Chu wrote:
Pierangelo Masarati wrote:
In some cases, it may be useful that overlays see configuration
directives
__before__ the database, to allow intercepting and overriding them.
Directives ignored by the overlays would get to the database anyway; the
specific overlay may allow the directive to eventually get to the
database, maybe changed as appropriate.
Seems safe for now, but this behavior won't translate into back-config
since database and overlay configuration is segregated to their own
entries.
In this case, the configuration should belong to the overlay, because in
my design the overlay parses the directives and, after its judgement,
may propagate it to the database's parsing routine directly, e.g. by
calling something like
char *save_argv0 = argv[ 0 ];
if ( strncasecmp( argv[ 0 ], "overlay-", STRLENOF( "overlay-" ) ) ==
0 ) {
argv[ 0 ] += STRLENOF( "overlay-" );
}
rc = on->on_info->oi_orig->bi_db_config( be, fname, lineno, argc,
argv );
argv[ 0 ] = save_argv0;
or
char *save_argv0 = argv[ 0 ];
argv[ 0 ] += STRLENOF( "overlay-" );
rc = be->bd_info->bi_db_config( be, fname, lineno, argc, argv );
argv[ 0 ] = save_argv0;
where the overlay is supposed to know if it's more appropriate to go
straight to the original function or to re-call the entire stack after
stripping the overlay's prefix "overlay-". The former, of ocurse, is
necessary if the statement was entered without the "overlay-" prefix,
otherwise and endless loop would occur :)
Also, overlays are meant to be generic; overriding as you suggest
means the overlay recognizes the specific database it's used with and
only works with specific types. Not a problem, but something to be
documented.
Yes; in this case, I'm considering overlays that are database specific,
because they implement features that are database specific and are
implemented in overlays because they're not of general use or are
intended to keep the database clean when the feature is not required.
p.
SysNet - via Dossi,8 27100 Pavia Tel: +390382573859 Fax: +390382476497