about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--Completion/Zsh/Command/.distfiles14
-rw-r--r--Completion/Zsh/Command/_limit9
-rw-r--r--Completion/Zsh/Type/_limits2
-rw-r--r--Src/Builtins/rlimits.c22
5 files changed, 37 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index 3599f3c65..f2558b339 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2001-11-01  Bart Schaefer  <schaefer@zsh.org>
+
+	* 16197: Completion/Zsh/Command/.distfiles,
+	Completion/Zsh/Command/_limit, Completion/Zsh/Type/_limits,
+	Src/Builtins/rlimits.c: `limit' accepts `unlimited' as a value.
+
 2001-10-26  Wayne Davison  <wayned@users.sourceforge.net>
 
 	* 16184: Src/hist.c: Improved readhistline() to reject binary data
diff --git a/Completion/Zsh/Command/.distfiles b/Completion/Zsh/Command/.distfiles
index 4e75e0e3d..a3762d14a 100644
--- a/Completion/Zsh/Command/.distfiles
+++ b/Completion/Zsh/Command/.distfiles
@@ -1,10 +1,10 @@
 DISTFILES_SRC='
 .distfiles
-_autoload    _disable     _kill        _sched       _typeset     _zed
-_bindkey     _echotc      _mere        _set         _unhash      _zftp
-_builtin     _emulate     _precommand  _setopt      _unsetopt    _zle
-_cd          _enable      _print       _source      _wait        _zmodload
-_command     _fc          _prompt      _stat        _which       _zpty
-_compdef     _hash        _read        _trap        _zcompile    _zstyle
-_echoti      _ttyctl      _ulimit      _vared       _alias       _jobs_builtin
+_alias     _disable  _jobs_builtin  _read    _ttyctl    _which     _zstyle
+_autoload  _echotc   _kill          _sched   _typeset   _zcompile
+_bindkey   _echoti   _limit         _set     _ulimit    _zed
+_builtin   _emulate  _mere          _setopt  _unhash    _zftp
+_cd        _enable   _precommand    _source  _unsetopt  _zle
+_command   _fc       _print         _stat    _vared     _zmodload
+_compdef   _hash     _prompt        _trap    _wait      _zpty
 '
diff --git a/Completion/Zsh/Command/_limit b/Completion/Zsh/Command/_limit
new file mode 100644
index 000000000..ba384f980
--- /dev/null
+++ b/Completion/Zsh/Command/_limit
@@ -0,0 +1,9 @@
+#compdef limit
+
+if ! ((CURRENT % 2)); then
+    _limits
+elif [[ $PREFIX = u* ]]; then
+    compadd unlimited
+else
+    _message "number and scaling factor"
+fi
diff --git a/Completion/Zsh/Type/_limits b/Completion/Zsh/Type/_limits
index 5dd2bffe5..232ce7e94 100644
--- a/Completion/Zsh/Type/_limits
+++ b/Completion/Zsh/Type/_limits
@@ -1,4 +1,4 @@
-#compdef limit unlimit
+#compdef unlimit
 
 local expl
 
diff --git a/Src/Builtins/rlimits.c b/Src/Builtins/rlimits.c
index 0df671786..3db47f866 100644
--- a/Src/Builtins/rlimits.c
+++ b/Src/Builtins/rlimits.c
@@ -44,12 +44,17 @@ enum {
 
 # include "rlimits.h"
 
-# if defined(RLIM_T_IS_QUAD_T) || defined(RLIM_T_IS_LONG_LONG) || defined(RLIM_T_IS_UNSIGNED)
 static rlim_t
 zstrtorlimt(const char *s, char **t, int base)
 {
     rlim_t ret = 0;
- 
+
+    if (strcmp(s, "unlimited") == 0) {
+	if (t)
+	    *t = (char *) s + 9;
+	return RLIM_INFINITY;
+    }
+# if defined(RLIM_T_IS_QUAD_T) || defined(RLIM_T_IS_LONG_LONG) || defined(RLIM_T_IS_UNSIGNED)
     if (!base) {
 	if (*s != '0')
 	    base = 10;
@@ -67,11 +72,11 @@ zstrtorlimt(const char *s, char **t, int base)
 	    ret = ret * base + (idigit(*s) ? (*s - '0') : (*s & 0x1f) + 9);
     if (t)
 	*t = (char *)s;
-    return ret;
-}
 # else /* !RLIM_T_IS_QUAD_T && !RLIM_T_IS_LONG_LONG && !RLIM_T_IS_UNSIGNED */
-#  define zstrtorlimt(a, b, c)	zstrtol((a), (b), (c))
+    ret = zstrtol(s, t, base);
 # endif /* !RLIM_T_IS_QUAD_T && !RLIM_T_IS_LONG_LONG && !RLIM_T_IS_UNSIGNED */
+    return ret;
+}
 
 /* Display resource limits.  hard indicates whether `hard' or `soft'  *
  * limits should be displayed.  lim specifies the limit, or may be -1 *
@@ -348,9 +353,10 @@ bin_limit(char *nam, char **argv, char *ops, int func)
 	    /* memory-type resource -- `k' and `M' modifiers are permitted,
 	    meaning (respectively) 2^10 and 2^20. */
 	    val = zstrtorlimt(s, &s, 10);
-	    if (!*s || ((*s == 'k' || *s == 'K') && !s[1]))
-		val *= 1024L;
-	    else if ((*s == 'M' || *s == 'm') && !s[1])
+	    if (!*s || ((*s == 'k' || *s == 'K') && !s[1])) {
+		if (val != RLIM_INFINITY)
+		    val *= 1024L;
+	    } else if ((*s == 'M' || *s == 'm') && !s[1])
 		val *= 1024L * 1024;
 	    else {
 		zwarnnam("limit", "unknown scaling factor: %s", s, 0);