diff options
author | ola.soder@axis.com <ola.soder@axis.com> | 2022-02-10 20:21:04 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-02-10 20:21:04 +0000 |
commit | 949b35d83b69a7eab7b280b5af6940da9aedad43 (patch) | |
tree | 34325547a4b0503d0e1e7fe991df54d0602e37e2 | |
parent | 560dff49c0095111fc96b4b8dd7f4d269aba9473 (diff) | |
download | vim-git-8.2.4340.tar.gz |
patch 8.2.4340: Amiga: mch_can_exe() is not implementedv8.2.4340
Problem: Amiga: mch_can_exe() is not implemented.
Solution: Implement mch_can_exe() for Amiga OS 4. (Ola Söder, closes #9731)
-rw-r--r-- | src/os_amiga.c | 44 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 44 insertions, 2 deletions
diff --git a/src/os_amiga.c b/src/os_amiga.c index e9d622141..c6d9c253f 100644 --- a/src/os_amiga.c +++ b/src/os_amiga.c @@ -891,8 +891,48 @@ mch_mkdir(char_u *name) int mch_can_exe(char_u *name, char_u **path, int use_path) { - // TODO - return -1; + int exe = -1; +#ifdef __amigaos4__ + // Load file sections using elf.library or hunk.library. + BPTR seg = LoadSeg(name); + + if (seg && GetSegListInfoTags(seg, GSLI_Native, NULL, TAG_DONE) != + GetSegListInfoTags(seg, GSLI_68KHUNK, NULL, TAG_DONE)) + { + // Test if file permissions allow execution. + struct ExamineData *exd = ExamineObjectTags(EX_StringNameInput, name); + + exe = (exd && !(exd->Protection & EXDF_NO_EXECUTE)) ? 1 : 0; + FreeDosObject(DOS_EXAMINEDATA, exd); + } + else + { + exe = 0; + } + + UnLoadSeg(seg); + + // Search for executable in path if applicable. + if (!exe && use_path) + { + // Save current working dir. + BPTR cwd = GetCurrentDir(); + struct PathNode *head = DupCmdPathList(NULL); + + // For each entry, recur to check for executable. + for(struct PathNode *tail = head; !exe && tail; + tail = (struct PathNode *) BADDR(tail->pn_Next)) + { + SetCurrentDir(tail->pn_Lock); + exe = mch_can_exe(name, path, 0); + } + + // Go back to where we were. + FreeCmdPathList(head); + SetCurrentDir(cwd); + } +#endif + return exe; } /* diff --git a/src/version.c b/src/version.c index 6b6d3cc20..42e6a4ca1 100644 --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4340, +/**/ 4339, /**/ 4338, |