From 35bcc701d39a34927b6f10d719ed294efeb10679 Mon Sep 17 00:00:00 2001 From: Stephen Heumann Date: Sun, 9 Apr 2017 22:06:13 -0500 Subject: [PATCH] Check for presence of AppleShare FST and don't load if it is missing. We also don't load if the Marinetti tool stub is missing (we can't easily check for the Marinetti init). --- afpbridge.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/afpbridge.c b/afpbridge.c index 9826fe2..0229f49 100644 --- a/afpbridge.c +++ b/afpbridge.c @@ -4,10 +4,15 @@ #include #include #include +#include #include "installcmds.h" #include "aspinterface.h" #include "asmglue.h" +extern Word *unloadFlagPtr; + +FSTInfoRecGS fstInfoRec; + void pollTask(void); static struct RunQRec { @@ -20,7 +25,29 @@ static struct RunQRec { } runQRec; +void setUnloadFlag(void) { + if (*unloadFlagPtr == 0) + *unloadFlagPtr = 1; +} + int main(void) { + unsigned int i; + + /* + * Check for presence of AppleShare FST. We error out and unload + * if it's not present. Our code doesn't directly depend on the + * AppleShare FST, but in practice it's not useful without it. + * This also ensures lower-level AppleTalk stuff is present. + */ + fstInfoRec.pCount = 2; + fstInfoRec.fileSysID = 0; + for (i = 1; fstInfoRec.fileSysID != appleShareFSID; i++) { + fstInfoRec.fstNum = i; + GetFSTInfoGS(&fstInfoRec); + if (toolerror() == paramRangeErr) + goto error; + } + LoadOneTool(54, 0x0300); /* load Marinetti 3.0+ */ if (toolerror()) goto error; @@ -44,8 +71,11 @@ int main(void) { runQRec.jml = 0x5C; runQRec.proc = pollTask; AddToRunQ((Pointer)&runQRec); + + return; error: + setUnloadFlag(); return; }