[DGD] Question about overriding AUTO objects

Noah Gibbs noah_gibbs at yahoo.com
Mon Sep 6 18:13:11 CEST 2004


  Further notes:  in this test case, no scripts (that is, any file of
the form /usr/blah/script/...) are being compiled, and the
game_path_special object is set to (nil).  So neither of those things
should be factors.

--- Noah Gibbs <noah_gibbs at yahoo.com> wrote:

>   I've got a path_special object for use in Phantasmal.  I'm trying
> to
> get nonstandard AUTO objects working for some specific files.  I got
> them working on one particular special case, but I'm trying to apply
> them more broadly and I'm having problems.
> 
>   Phantasmal dies, claiming 'Runtime error: Cycle in inheritance from
> "/usr/common/lib/script_auto.c"'.  That's a little odd since I'm not
> sure why it's compiling the /usr/common/lib/script_auto.c file at
> all. 
> Anyway, this problem suggests that I'm somehow inheriting something I
> don't mean to be.  Let me show you the core function that does this
> stuff and maybe somebody more perceptive than I am will show me the
> error of my ways:
> 
> string path_special(string file) {
>   string user, subdir;
> 
>   if(sscanf(file, "/usr/%s/%s/%*s", user, subdir) != 3) {
>     return nil;
>   }
> 
>   if(file == "/usr/common/lib/common_auto") {
>     return nil;
>   }
> 
>   if(user != "System" && user != "common" && subdir == "script") {
>     LOGD->write_syslog("Inheriting script AUTO for file " + file);
>     return INHERIT_SCRIPT_AUTO;
>   }
> 
>   if(user == "common") {
>     LOGD->write_syslog("Inheriting common AUTO for file " + file);
>     return INHERIT_COMMON_AUTO;
>   }
> 
>   if(user == "System") {
>     return nil;
>   }
> 
>   if(game_path_object)
>     return game_path_object->path_special(file);
> 
>   return nil;
> }
> 
> That perceptive person may have noticed that I'm logging which file
> gets inherited.  My log shows SoulD being successfully compiled, and
> inheriting the COMMON_AUTO version.  Then, the script AUTO file
> ("/usr/common/lib/script_auto.c") gets compiled (why?), and it says
> that it inherits from the common AUTO as well.
> 
> The INHERIT_COMMON_AUTO file, a header, has only a single line in it:
> 
> 'inherit "/usr/common/lib/common_auto"'.
> 
> The /usr/common/lib/common_auto file overrides call_other to check
> for
> errors.  It doesn't explicitly inherit from anybody else, though of
> course it winds up inheriting from the Kernel Lib's AUTO object since
> everything in the system does.
> 
> The version that worked before had no "common AUTO", just a "script
> AUTO", which worked fine.  Scripts were written only outside of
> /usr/common, which may be why this all worked out.
> 
> 
> =====
> 
> 
> 
> 		
> _______________________________
> Do you Yahoo!?
> Win 1 of 4,000 free domain names from Yahoo! Enter now.
> http://promotions.yahoo.com/goldrush
> _________________________________________________________________
> List config page:  http://list.imaginary.com/mailman/listinfo/dgd
> 


=====



		
_______________________________
Do you Yahoo!?
Win 1 of 4,000 free domain names from Yahoo! Enter now.
http://promotions.yahoo.com/goldrush
_________________________________________________________________
List config page:  http://list.imaginary.com/mailman/listinfo/dgd



More information about the DGD mailing list