diff options
Diffstat (limited to 'builtins/pushd.def')
-rw-r--r-- | builtins/pushd.def | 46 |
1 files changed, 20 insertions, 26 deletions
diff --git a/builtins/pushd.def b/builtins/pushd.def index f47b2941..2bb72ffa 100644 --- a/builtins/pushd.def +++ b/builtins/pushd.def @@ -1,7 +1,7 @@ This file is pushd.def, from which is created pushd.c. It implements the builtins "pushd", "popd", and "dirs" in Bash. -Copyright (C) 1987, 1989, 1991 Free Software Foundation, Inc. +Copyright (C) 1987-2002 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -125,8 +125,6 @@ $END extern int errno; #endif /* !errno */ -static char *m_badarg = "%s: bad argument"; - /* The list of remembered directories. */ static char **pushd_directory_list = (char **)NULL; @@ -141,7 +139,7 @@ static void clear_directory_stack __P((void)); static int cd_to_string __P((char *)); static int change_to_temp __P((char *)); static void add_dirstack_element __P((char *)); -static int get_dirstack_index __P((long, int, int *)); +static int get_dirstack_index __P((intmax_t, int, int *)); #define NOCD 0x01 #define ROTATE 0x02 @@ -154,9 +152,12 @@ pushd_builtin (list) { char *temp, *current_directory, *top; int j, flags; - long num; + intmax_t num; char direction; + if (list && list->word && ISOPTION (list->word->word, '-')) + list = list->next; + /* If there is no argument list then switch current and top of list. */ if (list == 0) @@ -197,7 +198,7 @@ pushd_builtin (list) { if (legal_number (list->word->word + 1, &num) == 0) { - builtin_error (m_badarg, list->word->word); + sh_invalidnum (list->word->word); builtin_usage (); return (EXECUTION_FAILURE); } @@ -214,7 +215,7 @@ pushd_builtin (list) } else if (*list->word->word == '-') { - bad_option (list->word->word); + sh_invalidopt (list->word->word); builtin_usage (); return (EXECUTION_FAILURE); } @@ -287,7 +288,7 @@ popd_builtin (list) WORD_LIST *list; { register int i; - long which; + intmax_t which; int flags; char direction; char *which_word; @@ -308,7 +309,7 @@ popd_builtin (list) { if (legal_number (list->word->word + 1, &which) == 0) { - builtin_error (m_badarg, list->word->word); + sh_invalidnum (list->word->word); builtin_usage (); return (EXECUTION_FAILURE); } @@ -316,7 +317,7 @@ popd_builtin (list) } else if (*list->word->word == '-') { - bad_option (list->word->word); + sh_invalidopt (list->word->word); builtin_usage (); return (EXECUTION_FAILURE); } @@ -364,7 +365,7 @@ dirs_builtin (list) WORD_LIST *list; { int flags, desired_index, index_flag, vflag; - long i; + intmax_t i; char *temp, *w; for (flags = vflag = index_flag = 0, desired_index = -1, w = ""; list; list = list->next) @@ -395,7 +396,7 @@ dirs_builtin (list) int sign; if (legal_number (w = list->word->word + 1, &i) == 0) { - builtin_error (m_badarg, list->word->word); + sh_invalidnum (list->word->word); builtin_usage (); return (EXECUTION_FAILURE); } @@ -404,7 +405,7 @@ dirs_builtin (list) } else { - bad_option (list->word->word); + sh_invalidopt (list->word->word); builtin_usage (); return (EXECUTION_FAILURE); } @@ -475,10 +476,8 @@ pushd_error (offset, arg) { if (offset == 0) builtin_error ("directory stack empty"); - else if (arg) - builtin_error ("%s: bad directory stack index", arg); else - builtin_error ("bad directory stack index"); + sh_erange (arg, "directory stack index"); } static void @@ -525,19 +524,14 @@ static void add_dirstack_element (dir) char *dir; { - int j; - if (directory_list_offset == directory_list_size) - { - j = (directory_list_size += 10) * sizeof (char *); - pushd_directory_list = (char **)xrealloc (pushd_directory_list, j); - } + pushd_directory_list = strvec_resize (pushd_directory_list, directory_list_size += 10); pushd_directory_list[directory_list_offset++] = dir; } static int get_dirstack_index (ind, sign, indexp) - long ind; + intmax_t ind; int sign, *indexp; { if (indexp) @@ -565,7 +559,7 @@ get_dirstack_from_string (string) char *string; { int ind, sign, index_flag; - long i; + intmax_t i; sign = 1; if (*string == '-' || *string == '+') @@ -589,7 +583,7 @@ get_dirstack_from_string (string) #ifdef INCLUDE_UNUSED char * get_dirstack_element (ind, sign) - long ind; + intmax_t ind; int sign; { int i; @@ -602,7 +596,7 @@ get_dirstack_element (ind, sign) void set_dirstack_element (ind, sign, value) - long ind; + intmax_t ind; int sign; char *value; { |