diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2010-02-25 11:15:26 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2010-02-25 11:15:26 +0000 |
commit | a3b971a27ec7ba78e0a6b0a248c619b8cec53d98 (patch) | |
tree | a9b209d3e63a7ea3cbeab3eea7fc607aeffef8d1 /Src/Modules | |
parent | bec3de98dfab722b21e69a905bd83e4bfac22f72 (diff) | |
download | zsh-a3b971a27ec7ba78e0a6b0a248c619b8cec53d98.tar.gz zsh-a3b971a27ec7ba78e0a6b0a248c619b8cec53d98.tar.xz zsh-a3b971a27ec7ba78e0a6b0a248c619b8cec53d98.zip |
27755: add "zsystem supports" to zsh/system
Diffstat (limited to 'Src/Modules')
-rw-r--r-- | Src/Modules/system.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/Src/Modules/system.c b/Src/Modules/system.c index ef1ebb0b0..93796128b 100644 --- a/Src/Modules/system.c +++ b/Src/Modules/system.c @@ -491,6 +491,35 @@ bin_zsystem_flock(char *nam, char **args, UNUSED(Options ops), UNUSED(int func)) } +/* + * Return status zero if the zsystem feature is supported, else 1. + * Operates silently for future-proofing. + */ +/**/ +static int +bin_zsystem_supports(char *nam, char **args, + UNUSED(Options ops), UNUSED(int func)) +{ + if (!args[0]) { + zwarnnam(nam, "supports: not enough arguments"); + return 255; + } + if (args[1]) { + zwarnnam(nam, "supports: too many arguments"); + return 255; + } + + /* stupid but logically this should work... */ + if (!strcmp(*args, "supports")) + return 0; +#ifdef HAVE_FCNTL_H + if (!strcmp(*args, "flock")) + return 0; +#endif + return 1; +} + + /**/ static int bin_zsystem(char *nam, char **args, Options ops, int func) @@ -498,6 +527,8 @@ bin_zsystem(char *nam, char **args, Options ops, int func) /* If more commands are implemented, this can be more sophisticated */ if (!strcmp(*args, "flock")) { return bin_zsystem_flock(nam, args+1, ops, func); + } else if (!strcmp(*args, "supports")) { + return bin_zsystem_supports(nam, args+1, ops, func); } zwarnnam(nam, "unknown subcommand: %s", *args); return 1; |