Clean up "completer_handle_brkchars" callback handling
[external/binutils.git] / gdb / completer.c
1 /* Line completion stuff for GDB, the GNU debugger.
2    Copyright (C) 2000-2017 Free Software Foundation, Inc.
3
4    This file is part of GDB.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
18
19 #include "defs.h"
20 #include "symtab.h"
21 #include "gdbtypes.h"
22 #include "expression.h"
23 #include "filenames.h"          /* For DOSish file names.  */
24 #include "language.h"
25 #include "gdb_signals.h"
26 #include "target.h"
27 #include "reggroups.h"
28 #include "user-regs.h"
29 #include "arch-utils.h"
30 #include "location.h"
31
32 #include "cli/cli-decode.h"
33
34 /* FIXME: This is needed because of lookup_cmd_1 ().  We should be
35    calling a hook instead so we eliminate the CLI dependency.  */
36 #include "gdbcmd.h"
37
38 /* Needed for rl_completer_word_break_characters() and for
39    rl_filename_completion_function.  */
40 #include "readline/readline.h"
41
42 /* readline defines this.  */
43 #undef savestring
44
45 #include "completer.h"
46
47 /* An enumeration of the various things a user might
48    attempt to complete for a location.  */
49
50 enum explicit_location_match_type
51 {
52     /* The filename of a source file.  */
53     MATCH_SOURCE,
54
55     /* The name of a function or method.  */
56     MATCH_FUNCTION,
57
58     /* The name of a label.  */
59     MATCH_LABEL
60 };
61
62 /* Prototypes for local functions.  */
63 static
64 char *line_completion_function (const char *text, int matches, 
65                                 char *line_buffer,
66                                 int point);
67
68 /* readline uses the word breaks for two things:
69    (1) In figuring out where to point the TEXT parameter to the
70    rl_completion_entry_function.  Since we don't use TEXT for much,
71    it doesn't matter a lot what the word breaks are for this purpose,
72    but it does affect how much stuff M-? lists.
73    (2) If one of the matches contains a word break character, readline
74    will quote it.  That's why we switch between
75    current_language->la_word_break_characters() and
76    gdb_completer_command_word_break_characters.  I'm not sure when
77    we need this behavior (perhaps for funky characters in C++ 
78    symbols?).  */
79
80 /* Variables which are necessary for fancy command line editing.  */
81
82 /* When completing on command names, we remove '-' from the list of
83    word break characters, since we use it in command names.  If the
84    readline library sees one in any of the current completion strings,
85    it thinks that the string needs to be quoted and automatically
86    supplies a leading quote.  */
87 static const char gdb_completer_command_word_break_characters[] =
88 " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,";
89
90 /* When completing on file names, we remove from the list of word
91    break characters any characters that are commonly used in file
92    names, such as '-', '+', '~', etc.  Otherwise, readline displays
93    incorrect completion candidates.  */
94 /* MS-DOS and MS-Windows use colon as part of the drive spec, and most
95    programs support @foo style response files.  */
96 static const char gdb_completer_file_name_break_characters[] =
97 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
98   " \t\n*|\"';?><@";
99 #else
100   " \t\n*|\"';:?><";
101 #endif
102
103 /* Characters that can be used to quote completion strings.  Note that
104    we can't include '"' because the gdb C parser treats such quoted
105    sequences as strings.  */
106 static const char gdb_completer_quote_characters[] = "'";
107 \f
108 /* Accessor for some completer data that may interest other files.  */
109
110 const char *
111 get_gdb_completer_quote_characters (void)
112 {
113   return gdb_completer_quote_characters;
114 }
115
116 /* Line completion interface function for readline.  */
117
118 char *
119 readline_line_completion_function (const char *text, int matches)
120 {
121   return line_completion_function (text, matches, 
122                                    rl_line_buffer, rl_point);
123 }
124
125 /* This can be used for functions which don't want to complete on
126    symbols but don't want to complete on anything else either.  */
127 VEC (char_ptr) *
128 noop_completer (struct cmd_list_element *ignore, 
129                 const char *text, const char *prefix)
130 {
131   return NULL;
132 }
133
134 /* Complete on filenames.  */
135
136 VEC (char_ptr) *
137 filename_completer (struct cmd_list_element *ignore, 
138                     const char *text, const char *word)
139 {
140   int subsequent_name;
141   VEC (char_ptr) *return_val = NULL;
142
143   subsequent_name = 0;
144   while (1)
145     {
146       char *p, *q;
147
148       p = rl_filename_completion_function (text, subsequent_name);
149       if (p == NULL)
150         break;
151       /* We need to set subsequent_name to a non-zero value before the
152          continue line below, because otherwise, if the first file
153          seen by GDB is a backup file whose name ends in a `~', we
154          will loop indefinitely.  */
155       subsequent_name = 1;
156       /* Like emacs, don't complete on old versions.  Especially
157          useful in the "source" command.  */
158       if (p[strlen (p) - 1] == '~')
159         {
160           xfree (p);
161           continue;
162         }
163
164       if (word == text)
165         /* Return exactly p.  */
166         q = p;
167       else if (word > text)
168         {
169           /* Return some portion of p.  */
170           q = (char *) xmalloc (strlen (p) + 5);
171           strcpy (q, p + (word - text));
172           xfree (p);
173         }
174       else
175         {
176           /* Return some of TEXT plus p.  */
177           q = (char *) xmalloc (strlen (p) + (text - word) + 5);
178           strncpy (q, word, text - word);
179           q[text - word] = '\0';
180           strcat (q, p);
181           xfree (p);
182         }
183       VEC_safe_push (char_ptr, return_val, q);
184     }
185 #if 0
186   /* There is no way to do this just long enough to affect quote
187      inserting without also affecting the next completion.  This
188      should be fixed in readline.  FIXME.  */
189   /* Ensure that readline does the right thing
190      with respect to inserting quotes.  */
191   rl_completer_word_break_characters = "";
192 #endif
193   return return_val;
194 }
195
196 /* The corresponding completer_handle_brkchars
197    implementation.  */
198
199 static void
200 filename_completer_handle_brkchars (struct cmd_list_element *ignore,
201                                     const char *text, const char *word)
202 {
203   set_rl_completer_word_break_characters
204     (gdb_completer_file_name_break_characters);
205 }
206
207 /* Complete on linespecs, which might be of two possible forms:
208
209        file:line
210    or
211        symbol+offset
212
213    This is intended to be used in commands that set breakpoints
214    etc.  */
215
216 static VEC (char_ptr) *
217 linespec_location_completer (struct cmd_list_element *ignore,
218                              const char *text, const char *word)
219 {
220   int n_syms, n_files, ix;
221   VEC (char_ptr) *fn_list = NULL;
222   VEC (char_ptr) *list = NULL;
223   const char *p;
224   int quote_found = 0;
225   int quoted = *text == '\'' || *text == '"';
226   int quote_char = '\0';
227   const char *colon = NULL;
228   char *file_to_match = NULL;
229   const char *symbol_start = text;
230   const char *orig_text = text;
231   size_t text_len;
232
233   /* Do we have an unquoted colon, as in "break foo.c:bar"?  */
234   for (p = text; *p != '\0'; ++p)
235     {
236       if (*p == '\\' && p[1] == '\'')
237         p++;
238       else if (*p == '\'' || *p == '"')
239         {
240           quote_found = *p;
241           quote_char = *p++;
242           while (*p != '\0' && *p != quote_found)
243             {
244               if (*p == '\\' && p[1] == quote_found)
245                 p++;
246               p++;
247             }
248
249           if (*p == quote_found)
250             quote_found = 0;
251           else
252             break;              /* Hit the end of text.  */
253         }
254 #if HAVE_DOS_BASED_FILE_SYSTEM
255       /* If we have a DOS-style absolute file name at the beginning of
256          TEXT, and the colon after the drive letter is the only colon
257          we found, pretend the colon is not there.  */
258       else if (p < text + 3 && *p == ':' && p == text + 1 + quoted)
259         ;
260 #endif
261       else if (*p == ':' && !colon)
262         {
263           colon = p;
264           symbol_start = p + 1;
265         }
266       else if (strchr (current_language->la_word_break_characters(), *p))
267         symbol_start = p + 1;
268     }
269
270   if (quoted)
271     text++;
272   text_len = strlen (text);
273
274   /* Where is the file name?  */
275   if (colon)
276     {
277       char *s;
278
279       file_to_match = (char *) xmalloc (colon - text + 1);
280       strncpy (file_to_match, text, colon - text);
281       file_to_match[colon - text] = '\0';
282       /* Remove trailing colons and quotes from the file name.  */
283       for (s = file_to_match + (colon - text);
284            s > file_to_match;
285            s--)
286         if (*s == ':' || *s == quote_char)
287           *s = '\0';
288     }
289   /* If the text includes a colon, they want completion only on a
290      symbol name after the colon.  Otherwise, we need to complete on
291      symbols as well as on files.  */
292   if (colon)
293     {
294       list = make_file_symbol_completion_list (symbol_start, word,
295                                                file_to_match);
296       xfree (file_to_match);
297     }
298   else
299     {
300       list = make_symbol_completion_list (symbol_start, word);
301       /* If text includes characters which cannot appear in a file
302          name, they cannot be asking for completion on files.  */
303       if (strcspn (text, 
304                    gdb_completer_file_name_break_characters) == text_len)
305         fn_list = make_source_files_completion_list (text, text);
306     }
307
308   n_syms = VEC_length (char_ptr, list);
309   n_files = VEC_length (char_ptr, fn_list);
310
311   /* Catenate fn_list[] onto the end of list[].  */
312   if (!n_syms)
313     {
314       VEC_free (char_ptr, list); /* Paranoia.  */
315       list = fn_list;
316       fn_list = NULL;
317     }
318   else
319     {
320       char *fn;
321
322       for (ix = 0; VEC_iterate (char_ptr, fn_list, ix, fn); ++ix)
323         VEC_safe_push (char_ptr, list, fn);
324       VEC_free (char_ptr, fn_list);
325     }
326
327   if (n_syms && n_files)
328     {
329       /* Nothing.  */
330     }
331   else if (n_files)
332     {
333       char *fn;
334
335       /* If we only have file names as possible completion, we should
336          bring them in sync with what rl_complete expects.  The
337          problem is that if the user types "break /foo/b TAB", and the
338          possible completions are "/foo/bar" and "/foo/baz"
339          rl_complete expects us to return "bar" and "baz", without the
340          leading directories, as possible completions, because `word'
341          starts at the "b".  But we ignore the value of `word' when we
342          call make_source_files_completion_list above (because that
343          would not DTRT when the completion results in both symbols
344          and file names), so make_source_files_completion_list returns
345          the full "/foo/bar" and "/foo/baz" strings.  This produces
346          wrong results when, e.g., there's only one possible
347          completion, because rl_complete will prepend "/foo/" to each
348          candidate completion.  The loop below removes that leading
349          part.  */
350       for (ix = 0; VEC_iterate (char_ptr, list, ix, fn); ++ix)
351         {
352           memmove (fn, fn + (word - text),
353                    strlen (fn) + 1 - (word - text));
354         }
355     }
356   else if (!n_syms)
357     {
358       /* No completions at all.  As the final resort, try completing
359          on the entire text as a symbol.  */
360       list = make_symbol_completion_list (orig_text, word);
361     }
362
363   return list;
364 }
365
366 /* A helper function to collect explicit location matches for the given
367    LOCATION, which is attempting to match on WORD.  */
368
369 static VEC (char_ptr) *
370 collect_explicit_location_matches (struct event_location *location,
371                                    enum explicit_location_match_type what,
372                                    const char *word)
373 {
374   VEC (char_ptr) *matches = NULL;
375   const struct explicit_location *explicit_loc
376     = get_explicit_location (location);
377
378   switch (what)
379     {
380     case MATCH_SOURCE:
381       {
382         const char *text = (explicit_loc->source_filename == NULL
383                             ? "" : explicit_loc->source_filename);
384
385         matches = make_source_files_completion_list (text, word);
386       }
387       break;
388
389     case MATCH_FUNCTION:
390       {
391         const char *text = (explicit_loc->function_name == NULL
392                             ? "" : explicit_loc->function_name);
393
394         if (explicit_loc->source_filename != NULL)
395           {
396             const char *filename = explicit_loc->source_filename;
397
398             matches = make_file_symbol_completion_list (text, word, filename);
399           }
400         else
401           matches = make_symbol_completion_list (text, word);
402       }
403       break;
404
405     case MATCH_LABEL:
406       /* Not supported.  */
407       break;
408
409     default:
410       gdb_assert_not_reached ("unhandled explicit_location_match_type");
411     }
412
413   return matches;
414 }
415
416 /* A convenience macro to (safely) back up P to the previous word.  */
417
418 static const char *
419 backup_text_ptr (const char *p, const char *text)
420 {
421   while (p > text && isspace (*p))
422     --p;
423   for (; p > text && !isspace (p[-1]); --p)
424     ;
425
426   return p;
427 }
428
429 /* A completer function for explicit locations.  This function
430    completes both options ("-source", "-line", etc) and values.  */
431
432 static VEC (char_ptr) *
433 explicit_location_completer (struct cmd_list_element *ignore,
434                              struct event_location *location,
435                              const char *text, const char *word)
436 {
437   const char *p;
438   VEC (char_ptr) *matches = NULL;
439
440   /* Find the beginning of the word.  This is necessary because
441      we need to know if we are completing an option name or value.  We
442      don't get the leading '-' from the completer.  */
443   p = backup_text_ptr (word, text);
444
445   if (*p == '-')
446     {
447       /* Completing on option name.  */
448       static const char *const keywords[] =
449         {
450           "source",
451           "function",
452           "line",
453           "label",
454           NULL
455         };
456
457       /* Skip over the '-'.  */
458       ++p;
459
460       return complete_on_enum (keywords, p, p);
461     }
462   else
463     {
464       /* Completing on value (or unknown).  Get the previous word to see what
465          the user is completing on.  */
466       size_t len, offset;
467       const char *new_word, *end;
468       enum explicit_location_match_type what;
469       struct explicit_location *explicit_loc
470         = get_explicit_location (location);
471
472       /* Backup P to the previous word, which should be the option
473          the user is attempting to complete.  */
474       offset = word - p;
475       end = --p;
476       p = backup_text_ptr (p, text);
477       len = end - p;
478
479       if (strncmp (p, "-source", len) == 0)
480         {
481           what = MATCH_SOURCE;
482           new_word = explicit_loc->source_filename + offset;
483         }
484       else if (strncmp (p, "-function", len) == 0)
485         {
486           what = MATCH_FUNCTION;
487           new_word = explicit_loc->function_name + offset;
488         }
489       else if (strncmp (p, "-label", len) == 0)
490         {
491           what = MATCH_LABEL;
492           new_word = explicit_loc->label_name + offset;
493         }
494       else
495         {
496           /* The user isn't completing on any valid option name,
497              e.g., "break -source foo.c [tab]".  */
498           return NULL;
499         }
500
501       /* If the user hasn't entered a search expression, e.g.,
502          "break -function <TAB><TAB>", new_word will be NULL, but
503          search routines require non-NULL search words.  */
504       if (new_word == NULL)
505         new_word = "";
506
507       /* Now gather matches  */
508       matches = collect_explicit_location_matches (location, what, new_word);
509     }
510
511   return matches;
512 }
513
514 /* A completer for locations.  */
515
516 VEC (char_ptr) *
517 location_completer (struct cmd_list_element *ignore,
518                     const char *text, const char *word)
519 {
520   VEC (char_ptr) *matches = NULL;
521   const char *copy = text;
522
523   event_location_up location = string_to_explicit_location (&copy,
524                                                             current_language,
525                                                             1);
526   if (location != NULL)
527     matches = explicit_location_completer (ignore, location.get (),
528                                            text, word);
529   else
530     {
531       /* This is an address or linespec location.
532          Right now both of these are handled by the (old) linespec
533          completer.  */
534       matches = linespec_location_completer (ignore, text, word);
535     }
536
537   return matches;
538 }
539
540 /* Helper for expression_completer which recursively adds field and
541    method names from TYPE, a struct or union type, to the array
542    OUTPUT.  */
543 static void
544 add_struct_fields (struct type *type, VEC (char_ptr) **output,
545                    char *fieldname, int namelen)
546 {
547   int i;
548   int computed_type_name = 0;
549   const char *type_name = NULL;
550
551   type = check_typedef (type);
552   for (i = 0; i < TYPE_NFIELDS (type); ++i)
553     {
554       if (i < TYPE_N_BASECLASSES (type))
555         add_struct_fields (TYPE_BASECLASS (type, i),
556                            output, fieldname, namelen);
557       else if (TYPE_FIELD_NAME (type, i))
558         {
559           if (TYPE_FIELD_NAME (type, i)[0] != '\0')
560             {
561               if (! strncmp (TYPE_FIELD_NAME (type, i), 
562                              fieldname, namelen))
563                 VEC_safe_push (char_ptr, *output,
564                                xstrdup (TYPE_FIELD_NAME (type, i)));
565             }
566           else if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_UNION)
567             {
568               /* Recurse into anonymous unions.  */
569               add_struct_fields (TYPE_FIELD_TYPE (type, i),
570                                  output, fieldname, namelen);
571             }
572         }
573     }
574
575   for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
576     {
577       const char *name = TYPE_FN_FIELDLIST_NAME (type, i);
578
579       if (name && ! strncmp (name, fieldname, namelen))
580         {
581           if (!computed_type_name)
582             {
583               type_name = type_name_no_tag (type);
584               computed_type_name = 1;
585             }
586           /* Omit constructors from the completion list.  */
587           if (!type_name || strcmp (type_name, name))
588             VEC_safe_push (char_ptr, *output, xstrdup (name));
589         }
590     }
591 }
592
593 /* Complete on expressions.  Often this means completing on symbol
594    names, but some language parsers also have support for completing
595    field names.  */
596 VEC (char_ptr) *
597 expression_completer (struct cmd_list_element *ignore, 
598                       const char *text, const char *word)
599 {
600   struct type *type = NULL;
601   char *fieldname;
602   enum type_code code = TYPE_CODE_UNDEF;
603
604   /* Perform a tentative parse of the expression, to see whether a
605      field completion is required.  */
606   fieldname = NULL;
607   TRY
608     {
609       type = parse_expression_for_completion (text, &fieldname, &code);
610     }
611   CATCH (except, RETURN_MASK_ERROR)
612     {
613       return NULL;
614     }
615   END_CATCH
616
617   if (fieldname && type)
618     {
619       for (;;)
620         {
621           type = check_typedef (type);
622           if (TYPE_CODE (type) != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type))
623             break;
624           type = TYPE_TARGET_TYPE (type);
625         }
626
627       if (TYPE_CODE (type) == TYPE_CODE_UNION
628           || TYPE_CODE (type) == TYPE_CODE_STRUCT)
629         {
630           int flen = strlen (fieldname);
631           VEC (char_ptr) *result = NULL;
632
633           add_struct_fields (type, &result, fieldname, flen);
634           xfree (fieldname);
635           return result;
636         }
637     }
638   else if (fieldname && code != TYPE_CODE_UNDEF)
639     {
640       VEC (char_ptr) *result;
641       struct cleanup *cleanup = make_cleanup (xfree, fieldname);
642
643       result = make_symbol_completion_type (fieldname, fieldname, code);
644       do_cleanups (cleanup);
645       return result;
646     }
647   xfree (fieldname);
648
649   /* Not ideal but it is what we used to do before...  */
650   return linespec_location_completer (ignore, text, word);
651 }
652
653 /* See definition in completer.h.  */
654
655 void
656 set_rl_completer_word_break_characters (const char *break_chars)
657 {
658   rl_completer_word_break_characters = (char *) break_chars;
659 }
660
661 /* See definition in completer.h.  */
662
663 void
664 set_gdb_completion_word_break_characters (completer_ftype *fn)
665 {
666   const char *break_chars;
667
668   /* So far we are only interested in differentiating filename
669      completers from everything else.  */
670   if (fn == filename_completer)
671     break_chars = gdb_completer_file_name_break_characters;
672   else
673     break_chars = gdb_completer_command_word_break_characters;
674
675   set_rl_completer_word_break_characters (break_chars);
676 }
677
678 /* Complete on symbols.  */
679
680 VEC (char_ptr) *
681 symbol_completer (struct cmd_list_element *ignore,
682                   const char *text, const char *word)
683 {
684   return make_symbol_completion_list (text, word);
685 }
686
687 /* Here are some useful test cases for completion.  FIXME: These
688    should be put in the test suite.  They should be tested with both
689    M-? and TAB.
690
691    "show output-" "radix"
692    "show output" "-radix"
693    "p" ambiguous (commands starting with p--path, print, printf, etc.)
694    "p "  ambiguous (all symbols)
695    "info t foo" no completions
696    "info t " no completions
697    "info t" ambiguous ("info target", "info terminal", etc.)
698    "info ajksdlfk" no completions
699    "info ajksdlfk " no completions
700    "info" " "
701    "info " ambiguous (all info commands)
702    "p \"a" no completions (string constant)
703    "p 'a" ambiguous (all symbols starting with a)
704    "p b-a" ambiguous (all symbols starting with a)
705    "p b-" ambiguous (all symbols)
706    "file Make" "file" (word break hard to screw up here)
707    "file ../gdb.stabs/we" "ird" (needs to not break word at slash)
708  */
709
710 typedef enum
711 {
712   handle_brkchars,
713   handle_completions,
714   handle_help
715 }
716 complete_line_internal_reason;
717
718 /* Helper for complete_line_internal to simplify it.  */
719
720 static VEC (char_ptr) *
721 complete_line_internal_normal_command (const char *command, const char *word,
722                                        const char *cmd_args,
723                                        complete_line_internal_reason reason,
724                                        struct cmd_list_element *c)
725 {
726   const char *p = cmd_args;
727
728   if (c->completer == filename_completer)
729     {
730       /* Many commands which want to complete on file names accept
731          several file names, as in "run foo bar >>baz".  So we don't
732          want to complete the entire text after the command, just the
733          last word.  To this end, we need to find the beginning of the
734          file name by starting at `word' and going backwards.  */
735       for (p = word;
736            p > command
737              && strchr (gdb_completer_file_name_break_characters,
738                         p[-1]) == NULL;
739            p--)
740         ;
741     }
742
743   if (reason == handle_brkchars)
744     {
745       completer_handle_brkchars_ftype *brkchars_fn;
746
747       if (c->completer_handle_brkchars != NULL)
748         brkchars_fn = c->completer_handle_brkchars;
749       else
750         {
751           brkchars_fn
752             = (completer_handle_brkchars_func_for_completer
753                (c->completer));
754         }
755
756       brkchars_fn (c, p, word);
757     }
758
759   if (reason != handle_brkchars && c->completer != NULL)
760     return (*c->completer) (c, p, word);
761   return NULL;
762 }
763
764 /* Internal function used to handle completions.
765
766
767    TEXT is the caller's idea of the "word" we are looking at.
768
769    LINE_BUFFER is available to be looked at; it contains the entire
770    text of the line.  POINT is the offset in that line of the cursor.
771    You should pretend that the line ends at POINT.
772
773    REASON is of type complete_line_internal_reason.
774
775    If REASON is handle_brkchars:
776    Preliminary phase, called by gdb_completion_word_break_characters
777    function, is used to determine the correct set of chars that are
778    word delimiters depending on the current command in line_buffer.
779    No completion list should be generated; the return value should be
780    NULL.  This is checked by an assertion in that function.
781
782    If REASON is handle_completions:
783    Main phase, called by complete_line function, is used to get the list
784    of posible completions.
785
786    If REASON is handle_help:
787    Special case when completing a 'help' command.  In this case,
788    once sub-command completions are exhausted, we simply return NULL.
789  */
790
791 static VEC (char_ptr) *
792 complete_line_internal (const char *text, 
793                         const char *line_buffer, int point,
794                         complete_line_internal_reason reason)
795 {
796   VEC (char_ptr) *list = NULL;
797   char *tmp_command;
798   const char *p;
799   int ignore_help_classes;
800   /* Pointer within tmp_command which corresponds to text.  */
801   char *word;
802   struct cmd_list_element *c, *result_list;
803
804   /* Choose the default set of word break characters to break
805      completions.  If we later find out that we are doing completions
806      on command strings (as opposed to strings supplied by the
807      individual command completer functions, which can be any string)
808      then we will switch to the special word break set for command
809      strings, which leaves out the '-' character used in some
810      commands.  */
811   set_rl_completer_word_break_characters
812     (current_language->la_word_break_characters());
813
814   /* Decide whether to complete on a list of gdb commands or on
815      symbols.  */
816   tmp_command = (char *) alloca (point + 1);
817   p = tmp_command;
818
819   /* The help command should complete help aliases.  */
820   ignore_help_classes = reason != handle_help;
821
822   strncpy (tmp_command, line_buffer, point);
823   tmp_command[point] = '\0';
824   /* Since text always contains some number of characters leading up
825      to point, we can find the equivalent position in tmp_command
826      by subtracting that many characters from the end of tmp_command.  */
827   word = tmp_command + point - strlen (text);
828
829   if (point == 0)
830     {
831       /* An empty line we want to consider ambiguous; that is, it
832          could be any command.  */
833       c = CMD_LIST_AMBIGUOUS;
834       result_list = 0;
835     }
836   else
837     {
838       c = lookup_cmd_1 (&p, cmdlist, &result_list, ignore_help_classes);
839     }
840
841   /* Move p up to the next interesting thing.  */
842   while (*p == ' ' || *p == '\t')
843     {
844       p++;
845     }
846
847   if (!c)
848     {
849       /* It is an unrecognized command.  So there are no
850          possible completions.  */
851       list = NULL;
852     }
853   else if (c == CMD_LIST_AMBIGUOUS)
854     {
855       const char *q;
856
857       /* lookup_cmd_1 advances p up to the first ambiguous thing, but
858          doesn't advance over that thing itself.  Do so now.  */
859       q = p;
860       while (*q && (isalnum (*q) || *q == '-' || *q == '_'))
861         ++q;
862       if (q != tmp_command + point)
863         {
864           /* There is something beyond the ambiguous
865              command, so there are no possible completions.  For
866              example, "info t " or "info t foo" does not complete
867              to anything, because "info t" can be "info target" or
868              "info terminal".  */
869           list = NULL;
870         }
871       else
872         {
873           /* We're trying to complete on the command which was ambiguous.
874              This we can deal with.  */
875           if (result_list)
876             {
877               if (reason != handle_brkchars)
878                 list = complete_on_cmdlist (*result_list->prefixlist, p,
879                                             word, ignore_help_classes);
880             }
881           else
882             {
883               if (reason != handle_brkchars)
884                 list = complete_on_cmdlist (cmdlist, p, word,
885                                             ignore_help_classes);
886             }
887           /* Ensure that readline does the right thing with respect to
888              inserting quotes.  */
889           set_rl_completer_word_break_characters
890             (gdb_completer_command_word_break_characters);
891         }
892     }
893   else
894     {
895       /* We've recognized a full command.  */
896
897       if (p == tmp_command + point)
898         {
899           /* There is no non-whitespace in the line beyond the
900              command.  */
901
902           if (p[-1] == ' ' || p[-1] == '\t')
903             {
904               /* The command is followed by whitespace; we need to
905                  complete on whatever comes after command.  */
906               if (c->prefixlist)
907                 {
908                   /* It is a prefix command; what comes after it is
909                      a subcommand (e.g. "info ").  */
910                   if (reason != handle_brkchars)
911                     list = complete_on_cmdlist (*c->prefixlist, p, word,
912                                                 ignore_help_classes);
913
914                   /* Ensure that readline does the right thing
915                      with respect to inserting quotes.  */
916                   set_rl_completer_word_break_characters
917                     (gdb_completer_command_word_break_characters);
918                 }
919               else if (reason == handle_help)
920                 list = NULL;
921               else if (c->enums)
922                 {
923                   if (reason != handle_brkchars)
924                     list = complete_on_enum (c->enums, p, word);
925                   set_rl_completer_word_break_characters
926                     (gdb_completer_command_word_break_characters);
927                 }
928               else
929                 {
930                   /* It is a normal command; what comes after it is
931                      completed by the command's completer function.  */
932                   list = complete_line_internal_normal_command (tmp_command,
933                                                                 word, p,
934                                                                 reason, c);
935                 }
936             }
937           else
938             {
939               /* The command is not followed by whitespace; we need to
940                  complete on the command itself, e.g. "p" which is a
941                  command itself but also can complete to "print", "ptype"
942                  etc.  */
943               const char *q;
944
945               /* Find the command we are completing on.  */
946               q = p;
947               while (q > tmp_command)
948                 {
949                   if (isalnum (q[-1]) || q[-1] == '-' || q[-1] == '_')
950                     --q;
951                   else
952                     break;
953                 }
954
955               if (reason != handle_brkchars)
956                 list = complete_on_cmdlist (result_list, q, word,
957                                             ignore_help_classes);
958
959               /* Ensure that readline does the right thing
960                  with respect to inserting quotes.  */
961               set_rl_completer_word_break_characters
962                 (gdb_completer_command_word_break_characters);
963             }
964         }
965       else if (reason == handle_help)
966         list = NULL;
967       else
968         {
969           /* There is non-whitespace beyond the command.  */
970
971           if (c->prefixlist && !c->allow_unknown)
972             {
973               /* It is an unrecognized subcommand of a prefix command,
974                  e.g. "info adsfkdj".  */
975               list = NULL;
976             }
977           else if (c->enums)
978             {
979               if (reason != handle_brkchars)
980                 list = complete_on_enum (c->enums, p, word);
981             }
982           else
983             {
984               /* It is a normal command.  */
985               list = complete_line_internal_normal_command (tmp_command,
986                                                             word, p,
987                                                             reason, c);
988             }
989         }
990     }
991
992   return list;
993 }
994
995 /* See completer.h.  */
996
997 int max_completions = 200;
998
999 /* See completer.h.  */
1000
1001 completion_tracker_t
1002 new_completion_tracker (void)
1003 {
1004   if (max_completions <= 0)
1005     return NULL;
1006
1007   return htab_create_alloc (max_completions,
1008                             htab_hash_string, (htab_eq) streq,
1009                             NULL, xcalloc, xfree);
1010 }
1011
1012 /* Cleanup routine to free a completion tracker and reset the pointer
1013    to NULL.  */
1014
1015 static void
1016 free_completion_tracker (void *p)
1017 {
1018   completion_tracker_t *tracker_ptr = (completion_tracker_t *) p;
1019
1020   htab_delete (*tracker_ptr);
1021   *tracker_ptr = NULL;
1022 }
1023
1024 /* See completer.h.  */
1025
1026 struct cleanup *
1027 make_cleanup_free_completion_tracker (completion_tracker_t *tracker_ptr)
1028 {
1029   if (*tracker_ptr == NULL)
1030     return make_cleanup (null_cleanup, NULL);
1031
1032   return make_cleanup (free_completion_tracker, tracker_ptr);
1033 }
1034
1035 /* See completer.h.  */
1036
1037 enum maybe_add_completion_enum
1038 maybe_add_completion (completion_tracker_t tracker, char *name)
1039 {
1040   void **slot;
1041
1042   if (max_completions < 0)
1043     return MAYBE_ADD_COMPLETION_OK;
1044   if (max_completions == 0)
1045     return MAYBE_ADD_COMPLETION_MAX_REACHED;
1046
1047   gdb_assert (tracker != NULL);
1048
1049   if (htab_elements (tracker) >= max_completions)
1050     return MAYBE_ADD_COMPLETION_MAX_REACHED;
1051
1052   slot = htab_find_slot (tracker, name, INSERT);
1053
1054   if (*slot != HTAB_EMPTY_ENTRY)
1055     return MAYBE_ADD_COMPLETION_DUPLICATE;
1056
1057   *slot = name;
1058
1059   return (htab_elements (tracker) < max_completions
1060           ? MAYBE_ADD_COMPLETION_OK
1061           : MAYBE_ADD_COMPLETION_OK_MAX_REACHED);
1062 }
1063
1064 void
1065 throw_max_completions_reached_error (void)
1066 {
1067   throw_error (MAX_COMPLETIONS_REACHED_ERROR, _("Max completions reached."));
1068 }
1069
1070 /* Generate completions all at once.  Returns a vector of unique strings
1071    allocated with xmalloc.  Returns NULL if there are no completions
1072    or if max_completions is 0.  If max_completions is non-negative, this will
1073    return at most max_completions strings.
1074
1075    TEXT is the caller's idea of the "word" we are looking at.
1076
1077    LINE_BUFFER is available to be looked at; it contains the entire
1078    text of the line.
1079
1080    POINT is the offset in that line of the cursor.  You
1081    should pretend that the line ends at POINT.  */
1082
1083 VEC (char_ptr) *
1084 complete_line (const char *text, const char *line_buffer, int point)
1085 {
1086   VEC (char_ptr) *list;
1087   VEC (char_ptr) *result = NULL;
1088   struct cleanup *cleanups;
1089   completion_tracker_t tracker;
1090   char *candidate;
1091   int ix, max_reached;
1092
1093   if (max_completions == 0)
1094     return NULL;
1095   list = complete_line_internal (text, line_buffer, point,
1096                                  handle_completions);
1097   if (max_completions < 0)
1098     return list;
1099
1100   tracker = new_completion_tracker ();
1101   cleanups = make_cleanup_free_completion_tracker (&tracker);
1102   make_cleanup_free_char_ptr_vec (list);
1103
1104   /* Do a final test for too many completions.  Individual completers may
1105      do some of this, but are not required to.  Duplicates are also removed
1106      here.  Otherwise the user is left scratching his/her head: readline and
1107      complete_command will remove duplicates, and if removal of duplicates
1108      there brings the total under max_completions the user may think gdb quit
1109      searching too early.  */
1110
1111   for (ix = 0, max_reached = 0;
1112        !max_reached && VEC_iterate (char_ptr, list, ix, candidate);
1113        ++ix)
1114     {
1115       enum maybe_add_completion_enum add_status;
1116
1117       add_status = maybe_add_completion (tracker, candidate);
1118
1119       switch (add_status)
1120         {
1121           case MAYBE_ADD_COMPLETION_OK:
1122             VEC_safe_push (char_ptr, result, xstrdup (candidate));
1123             break;
1124           case MAYBE_ADD_COMPLETION_OK_MAX_REACHED:
1125             VEC_safe_push (char_ptr, result, xstrdup (candidate));
1126             max_reached = 1;
1127             break;
1128           case MAYBE_ADD_COMPLETION_MAX_REACHED:
1129             gdb_assert_not_reached ("more than max completions reached");
1130           case MAYBE_ADD_COMPLETION_DUPLICATE:
1131             break;
1132         }
1133     }
1134
1135   do_cleanups (cleanups);
1136
1137   return result;
1138 }
1139
1140 /* Complete on command names.  Used by "help".  */
1141
1142 VEC (char_ptr) *
1143 command_completer (struct cmd_list_element *ignore, 
1144                    const char *text, const char *word)
1145 {
1146   return complete_line_internal (word, text, 
1147                                  strlen (text), handle_help);
1148 }
1149
1150 /* The corresponding completer_handle_brkchars implementation.  */
1151
1152 static void
1153 command_completer_handle_brkchars (struct cmd_list_element *ignore,
1154                                    const char *text, const char *word)
1155 {
1156   set_rl_completer_word_break_characters
1157     (gdb_completer_command_word_break_characters);
1158 }
1159
1160 /* Complete on signals.  */
1161
1162 VEC (char_ptr) *
1163 signal_completer (struct cmd_list_element *ignore,
1164                   const char *text, const char *word)
1165 {
1166   VEC (char_ptr) *return_val = NULL;
1167   size_t len = strlen (word);
1168   int signum;
1169   const char *signame;
1170
1171   for (signum = GDB_SIGNAL_FIRST; signum != GDB_SIGNAL_LAST; ++signum)
1172     {
1173       /* Can't handle this, so skip it.  */
1174       if (signum == GDB_SIGNAL_0)
1175         continue;
1176
1177       signame = gdb_signal_to_name ((enum gdb_signal) signum);
1178
1179       /* Ignore the unknown signal case.  */
1180       if (!signame || strcmp (signame, "?") == 0)
1181         continue;
1182
1183       if (strncasecmp (signame, word, len) == 0)
1184         VEC_safe_push (char_ptr, return_val, xstrdup (signame));
1185     }
1186
1187   return return_val;
1188 }
1189
1190 /* Bit-flags for selecting what the register and/or register-group
1191    completer should complete on.  */
1192
1193 enum reg_completer_target
1194   {
1195     complete_register_names = 0x1,
1196     complete_reggroup_names = 0x2
1197   };
1198 DEF_ENUM_FLAGS_TYPE (enum reg_completer_target, reg_completer_targets);
1199
1200 /* Complete register names and/or reggroup names based on the value passed
1201    in TARGETS.  At least one bit in TARGETS must be set.  */
1202
1203 static VEC (char_ptr) *
1204 reg_or_group_completer_1 (struct cmd_list_element *ignore,
1205                           const char *text, const char *word,
1206                           reg_completer_targets targets)
1207 {
1208   VEC (char_ptr) *result = NULL;
1209   size_t len = strlen (word);
1210   struct gdbarch *gdbarch;
1211   const char *name;
1212
1213   gdb_assert ((targets & (complete_register_names
1214                           | complete_reggroup_names)) != 0);
1215   gdbarch = get_current_arch ();
1216
1217   if ((targets & complete_register_names) != 0)
1218     {
1219       int i;
1220
1221       for (i = 0;
1222            (name = user_reg_map_regnum_to_name (gdbarch, i)) != NULL;
1223            i++)
1224         {
1225           if (*name != '\0' && strncmp (word, name, len) == 0)
1226             VEC_safe_push (char_ptr, result, xstrdup (name));
1227         }
1228     }
1229
1230   if ((targets & complete_reggroup_names) != 0)
1231     {
1232       struct reggroup *group;
1233
1234       for (group = reggroup_next (gdbarch, NULL);
1235            group != NULL;
1236            group = reggroup_next (gdbarch, group))
1237         {
1238           name = reggroup_name (group);
1239           if (strncmp (word, name, len) == 0)
1240             VEC_safe_push (char_ptr, result, xstrdup (name));
1241         }
1242     }
1243
1244   return result;
1245 }
1246
1247 /* Perform completion on register and reggroup names.  */
1248
1249 VEC (char_ptr) *
1250 reg_or_group_completer (struct cmd_list_element *ignore,
1251                         const char *text, const char *word)
1252 {
1253   return reg_or_group_completer_1 (ignore, text, word,
1254                                    (complete_register_names
1255                                     | complete_reggroup_names));
1256 }
1257
1258 /* Perform completion on reggroup names.  */
1259
1260 VEC (char_ptr) *
1261 reggroup_completer (struct cmd_list_element *ignore,
1262                     const char *text, const char *word)
1263 {
1264   return reg_or_group_completer_1 (ignore, text, word,
1265                                    complete_reggroup_names);
1266 }
1267
1268 /* The default completer_handle_brkchars implementation.  */
1269
1270 static void
1271 default_completer_handle_brkchars (struct cmd_list_element *ignore,
1272                                    const char *text, const char *word)
1273 {
1274   set_rl_completer_word_break_characters
1275     (current_language->la_word_break_characters ());
1276 }
1277
1278 /* See definition in completer.h.  */
1279
1280 completer_handle_brkchars_ftype *
1281 completer_handle_brkchars_func_for_completer (completer_ftype *fn)
1282 {
1283   if (fn == filename_completer)
1284     return filename_completer_handle_brkchars;
1285
1286   if (fn == command_completer)
1287     return command_completer_handle_brkchars;
1288
1289   return default_completer_handle_brkchars;
1290 }
1291
1292 /* Get the list of chars that are considered as word breaks
1293    for the current command.  */
1294
1295 char *
1296 gdb_completion_word_break_characters (void)
1297 {
1298   VEC (char_ptr) *list;
1299
1300   list = complete_line_internal (rl_line_buffer, rl_line_buffer, rl_point,
1301                                  handle_brkchars);
1302   gdb_assert (list == NULL);
1303   return rl_completer_word_break_characters;
1304 }
1305
1306 /* Generate completions one by one for the completer.  Each time we
1307    are called return another potential completion to the caller.
1308    line_completion just completes on commands or passes the buck to
1309    the command's completer function, the stuff specific to symbol
1310    completion is in make_symbol_completion_list.
1311
1312    TEXT is the caller's idea of the "word" we are looking at.
1313
1314    MATCHES is the number of matches that have currently been collected
1315    from calling this completion function.  When zero, then we need to
1316    initialize, otherwise the initialization has already taken place
1317    and we can just return the next potential completion string.
1318
1319    LINE_BUFFER is available to be looked at; it contains the entire
1320    text of the line.  POINT is the offset in that line of the cursor.
1321    You should pretend that the line ends at POINT.
1322
1323    Returns NULL if there are no more completions, else a pointer to a
1324    string which is a possible completion, it is the caller's
1325    responsibility to free the string.  */
1326
1327 static char *
1328 line_completion_function (const char *text, int matches, 
1329                           char *line_buffer, int point)
1330 {
1331   static VEC (char_ptr) *list = NULL;   /* Cache of completions.  */
1332   static int index;                     /* Next cached completion.  */
1333   char *output = NULL;
1334
1335   if (matches == 0)
1336     {
1337       /* The caller is beginning to accumulate a new set of
1338          completions, so we need to find all of them now, and cache
1339          them for returning one at a time on future calls.  */
1340
1341       if (list)
1342         {
1343           /* Free the storage used by LIST, but not by the strings
1344              inside.  This is because rl_complete_internal () frees
1345              the strings.  As complete_line may abort by calling
1346              `error' clear LIST now.  */
1347           VEC_free (char_ptr, list);
1348         }
1349       index = 0;
1350       list = complete_line (text, line_buffer, point);
1351     }
1352
1353   /* If we found a list of potential completions during initialization
1354      then dole them out one at a time.  After returning the last one,
1355      return NULL (and continue to do so) each time we are called after
1356      that, until a new list is available.  */
1357
1358   if (list)
1359     {
1360       if (index < VEC_length (char_ptr, list))
1361         {
1362           output = VEC_index (char_ptr, list, index);
1363           index++;
1364         }
1365     }
1366
1367 #if 0
1368   /* Can't do this because readline hasn't yet checked the word breaks
1369      for figuring out whether to insert a quote.  */
1370   if (output == NULL)
1371     /* Make sure the word break characters are set back to normal for
1372        the next time that readline tries to complete something.  */
1373     rl_completer_word_break_characters =
1374       current_language->la_word_break_characters();
1375 #endif
1376
1377   return (output);
1378 }
1379
1380 /* Skip over the possibly quoted word STR (as defined by the quote
1381    characters QUOTECHARS and the word break characters BREAKCHARS).
1382    Returns pointer to the location after the "word".  If either
1383    QUOTECHARS or BREAKCHARS is NULL, use the same values used by the
1384    completer.  */
1385
1386 const char *
1387 skip_quoted_chars (const char *str, const char *quotechars,
1388                    const char *breakchars)
1389 {
1390   char quote_char = '\0';
1391   const char *scan;
1392
1393   if (quotechars == NULL)
1394     quotechars = gdb_completer_quote_characters;
1395
1396   if (breakchars == NULL)
1397     breakchars = current_language->la_word_break_characters();
1398
1399   for (scan = str; *scan != '\0'; scan++)
1400     {
1401       if (quote_char != '\0')
1402         {
1403           /* Ignore everything until the matching close quote char.  */
1404           if (*scan == quote_char)
1405             {
1406               /* Found matching close quote.  */
1407               scan++;
1408               break;
1409             }
1410         }
1411       else if (strchr (quotechars, *scan))
1412         {
1413           /* Found start of a quoted string.  */
1414           quote_char = *scan;
1415         }
1416       else if (strchr (breakchars, *scan))
1417         {
1418           break;
1419         }
1420     }
1421
1422   return (scan);
1423 }
1424
1425 /* Skip over the possibly quoted word STR (as defined by the quote
1426    characters and word break characters used by the completer).
1427    Returns pointer to the location after the "word".  */
1428
1429 const char *
1430 skip_quoted (const char *str)
1431 {
1432   return skip_quoted_chars (str, NULL, NULL);
1433 }
1434
1435 /* Return a message indicating that the maximum number of completions
1436    has been reached and that there may be more.  */
1437
1438 const char *
1439 get_max_completions_reached_message (void)
1440 {
1441   return _("*** List may be truncated, max-completions reached. ***");
1442 }
1443 \f
1444 /* GDB replacement for rl_display_match_list.
1445    Readline doesn't provide a clean interface for TUI(curses).
1446    A hack previously used was to send readline's rl_outstream through a pipe
1447    and read it from the event loop.  Bleah.  IWBN if readline abstracted
1448    away all the necessary bits, and this is what this code does.  It
1449    replicates the parts of readline we need and then adds an abstraction
1450    layer, currently implemented as struct match_list_displayer, so that both
1451    CLI and TUI can use it.  We copy all this readline code to minimize
1452    GDB-specific mods to readline.  Once this code performs as desired then
1453    we can submit it to the readline maintainers.
1454
1455    N.B. A lot of the code is the way it is in order to minimize differences
1456    from readline's copy.  */
1457
1458 /* Not supported here.  */
1459 #undef VISIBLE_STATS
1460
1461 #if defined (HANDLE_MULTIBYTE)
1462 #define MB_INVALIDCH(x) ((x) == (size_t)-1 || (x) == (size_t)-2)
1463 #define MB_NULLWCH(x)   ((x) == 0)
1464 #endif
1465
1466 #define ELLIPSIS_LEN    3
1467
1468 /* gdb version of readline/complete.c:get_y_or_n.
1469    'y' -> returns 1, and 'n' -> returns 0.
1470    Also supported: space == 'y', RUBOUT == 'n', ctrl-g == start over.
1471    If FOR_PAGER is non-zero, then also supported are:
1472    NEWLINE or RETURN -> returns 2, and 'q' -> returns 0.  */
1473
1474 static int
1475 gdb_get_y_or_n (int for_pager, const struct match_list_displayer *displayer)
1476 {
1477   int c;
1478
1479   for (;;)
1480     {
1481       RL_SETSTATE (RL_STATE_MOREINPUT);
1482       c = displayer->read_key (displayer);
1483       RL_UNSETSTATE (RL_STATE_MOREINPUT);
1484
1485       if (c == 'y' || c == 'Y' || c == ' ')
1486         return 1;
1487       if (c == 'n' || c == 'N' || c == RUBOUT)
1488         return 0;
1489       if (c == ABORT_CHAR || c < 0)
1490         {
1491           /* Readline doesn't erase_entire_line here, but without it the
1492              --More-- prompt isn't erased and neither is the text entered
1493              thus far redisplayed.  */
1494           displayer->erase_entire_line (displayer);
1495           /* Note: The arguments to rl_abort are ignored.  */
1496           rl_abort (0, 0);
1497         }
1498       if (for_pager && (c == NEWLINE || c == RETURN))
1499         return 2;
1500       if (for_pager && (c == 'q' || c == 'Q'))
1501         return 0;
1502       displayer->beep (displayer);
1503     }
1504 }
1505
1506 /* Pager function for tab-completion.
1507    This is based on readline/complete.c:_rl_internal_pager.
1508    LINES is the number of lines of output displayed thus far.
1509    Returns:
1510    -1 -> user pressed 'n' or equivalent,
1511    0 -> user pressed 'y' or equivalent,
1512    N -> user pressed NEWLINE or equivalent and N is LINES - 1.  */
1513
1514 static int
1515 gdb_display_match_list_pager (int lines,
1516                               const struct match_list_displayer *displayer)
1517 {
1518   int i;
1519
1520   displayer->puts (displayer, "--More--");
1521   displayer->flush (displayer);
1522   i = gdb_get_y_or_n (1, displayer);
1523   displayer->erase_entire_line (displayer);
1524   if (i == 0)
1525     return -1;
1526   else if (i == 2)
1527     return (lines - 1);
1528   else
1529     return 0;
1530 }
1531
1532 /* Return non-zero if FILENAME is a directory.
1533    Based on readline/complete.c:path_isdir.  */
1534
1535 static int
1536 gdb_path_isdir (const char *filename)
1537 {
1538   struct stat finfo;
1539
1540   return (stat (filename, &finfo) == 0 && S_ISDIR (finfo.st_mode));
1541 }
1542
1543 /* Return the portion of PATHNAME that should be output when listing
1544    possible completions.  If we are hacking filename completion, we
1545    are only interested in the basename, the portion following the
1546    final slash.  Otherwise, we return what we were passed.  Since
1547    printing empty strings is not very informative, if we're doing
1548    filename completion, and the basename is the empty string, we look
1549    for the previous slash and return the portion following that.  If
1550    there's no previous slash, we just return what we were passed.
1551
1552    Based on readline/complete.c:printable_part.  */
1553
1554 static char *
1555 gdb_printable_part (char *pathname)
1556 {
1557   char *temp, *x;
1558
1559   if (rl_filename_completion_desired == 0)      /* don't need to do anything */
1560     return (pathname);
1561
1562   temp = strrchr (pathname, '/');
1563 #if defined (__MSDOS__)
1564   if (temp == 0 && ISALPHA ((unsigned char)pathname[0]) && pathname[1] == ':')
1565     temp = pathname + 1;
1566 #endif
1567
1568   if (temp == 0 || *temp == '\0')
1569     return (pathname);
1570   /* If the basename is NULL, we might have a pathname like '/usr/src/'.
1571      Look for a previous slash and, if one is found, return the portion
1572      following that slash.  If there's no previous slash, just return the
1573      pathname we were passed. */
1574   else if (temp[1] == '\0')
1575     {
1576       for (x = temp - 1; x > pathname; x--)
1577         if (*x == '/')
1578           break;
1579       return ((*x == '/') ? x + 1 : pathname);
1580     }
1581   else
1582     return ++temp;
1583 }
1584
1585 /* Compute width of STRING when displayed on screen by print_filename.
1586    Based on readline/complete.c:fnwidth.  */
1587
1588 static int
1589 gdb_fnwidth (const char *string)
1590 {
1591   int width, pos;
1592 #if defined (HANDLE_MULTIBYTE)
1593   mbstate_t ps;
1594   int left, w;
1595   size_t clen;
1596   wchar_t wc;
1597
1598   left = strlen (string) + 1;
1599   memset (&ps, 0, sizeof (mbstate_t));
1600 #endif
1601
1602   width = pos = 0;
1603   while (string[pos])
1604     {
1605       if (CTRL_CHAR (string[pos]) || string[pos] == RUBOUT)
1606         {
1607           width += 2;
1608           pos++;
1609         }
1610       else
1611         {
1612 #if defined (HANDLE_MULTIBYTE)
1613           clen = mbrtowc (&wc, string + pos, left - pos, &ps);
1614           if (MB_INVALIDCH (clen))
1615             {
1616               width++;
1617               pos++;
1618               memset (&ps, 0, sizeof (mbstate_t));
1619             }
1620           else if (MB_NULLWCH (clen))
1621             break;
1622           else
1623             {
1624               pos += clen;
1625               w = wcwidth (wc);
1626               width += (w >= 0) ? w : 1;
1627             }
1628 #else
1629           width++;
1630           pos++;
1631 #endif
1632         }
1633     }
1634
1635   return width;
1636 }
1637
1638 /* Print TO_PRINT, one matching completion.
1639    PREFIX_BYTES is number of common prefix bytes.
1640    Based on readline/complete.c:fnprint.  */
1641
1642 static int
1643 gdb_fnprint (const char *to_print, int prefix_bytes,
1644              const struct match_list_displayer *displayer)
1645 {
1646   int printed_len, w;
1647   const char *s;
1648 #if defined (HANDLE_MULTIBYTE)
1649   mbstate_t ps;
1650   const char *end;
1651   size_t tlen;
1652   int width;
1653   wchar_t wc;
1654
1655   end = to_print + strlen (to_print) + 1;
1656   memset (&ps, 0, sizeof (mbstate_t));
1657 #endif
1658
1659   printed_len = 0;
1660
1661   /* Don't print only the ellipsis if the common prefix is one of the
1662      possible completions */
1663   if (to_print[prefix_bytes] == '\0')
1664     prefix_bytes = 0;
1665
1666   if (prefix_bytes)
1667     {
1668       char ellipsis;
1669
1670       ellipsis = (to_print[prefix_bytes] == '.') ? '_' : '.';
1671       for (w = 0; w < ELLIPSIS_LEN; w++)
1672         displayer->putch (displayer, ellipsis);
1673       printed_len = ELLIPSIS_LEN;
1674     }
1675
1676   s = to_print + prefix_bytes;
1677   while (*s)
1678     {
1679       if (CTRL_CHAR (*s))
1680         {
1681           displayer->putch (displayer, '^');
1682           displayer->putch (displayer, UNCTRL (*s));
1683           printed_len += 2;
1684           s++;
1685 #if defined (HANDLE_MULTIBYTE)
1686           memset (&ps, 0, sizeof (mbstate_t));
1687 #endif
1688         }
1689       else if (*s == RUBOUT)
1690         {
1691           displayer->putch (displayer, '^');
1692           displayer->putch (displayer, '?');
1693           printed_len += 2;
1694           s++;
1695 #if defined (HANDLE_MULTIBYTE)
1696           memset (&ps, 0, sizeof (mbstate_t));
1697 #endif
1698         }
1699       else
1700         {
1701 #if defined (HANDLE_MULTIBYTE)
1702           tlen = mbrtowc (&wc, s, end - s, &ps);
1703           if (MB_INVALIDCH (tlen))
1704             {
1705               tlen = 1;
1706               width = 1;
1707               memset (&ps, 0, sizeof (mbstate_t));
1708             }
1709           else if (MB_NULLWCH (tlen))
1710             break;
1711           else
1712             {
1713               w = wcwidth (wc);
1714               width = (w >= 0) ? w : 1;
1715             }
1716           for (w = 0; w < tlen; ++w)
1717             displayer->putch (displayer, s[w]);
1718           s += tlen;
1719           printed_len += width;
1720 #else
1721           displayer->putch (displayer, *s);
1722           s++;
1723           printed_len++;
1724 #endif
1725         }
1726     }
1727
1728   return printed_len;
1729 }
1730
1731 /* Output TO_PRINT to rl_outstream.  If VISIBLE_STATS is defined and we
1732    are using it, check for and output a single character for `special'
1733    filenames.  Return the number of characters we output.
1734    Based on readline/complete.c:print_filename.  */
1735
1736 static int
1737 gdb_print_filename (char *to_print, char *full_pathname, int prefix_bytes,
1738                     const struct match_list_displayer *displayer)
1739 {
1740   int printed_len, extension_char, slen, tlen;
1741   char *s, c, *new_full_pathname;
1742   const char *dn;
1743   extern int _rl_complete_mark_directories;
1744
1745   extension_char = 0;
1746   printed_len = gdb_fnprint (to_print, prefix_bytes, displayer);
1747
1748 #if defined (VISIBLE_STATS)
1749  if (rl_filename_completion_desired && (rl_visible_stats || _rl_complete_mark_directories))
1750 #else
1751  if (rl_filename_completion_desired && _rl_complete_mark_directories)
1752 #endif
1753     {
1754       /* If to_print != full_pathname, to_print is the basename of the
1755          path passed.  In this case, we try to expand the directory
1756          name before checking for the stat character. */
1757       if (to_print != full_pathname)
1758         {
1759           /* Terminate the directory name. */
1760           c = to_print[-1];
1761           to_print[-1] = '\0';
1762
1763           /* If setting the last slash in full_pathname to a NUL results in
1764              full_pathname being the empty string, we are trying to complete
1765              files in the root directory.  If we pass a null string to the
1766              bash directory completion hook, for example, it will expand it
1767              to the current directory.  We just want the `/'. */
1768           if (full_pathname == 0 || *full_pathname == 0)
1769             dn = "/";
1770           else if (full_pathname[0] != '/')
1771             dn = full_pathname;
1772           else if (full_pathname[1] == 0)
1773             dn = "//";          /* restore trailing slash to `//' */
1774           else if (full_pathname[1] == '/' && full_pathname[2] == 0)
1775             dn = "/";           /* don't turn /// into // */
1776           else
1777             dn = full_pathname;
1778           s = tilde_expand (dn);
1779           if (rl_directory_completion_hook)
1780             (*rl_directory_completion_hook) (&s);
1781
1782           slen = strlen (s);
1783           tlen = strlen (to_print);
1784           new_full_pathname = (char *)xmalloc (slen + tlen + 2);
1785           strcpy (new_full_pathname, s);
1786           if (s[slen - 1] == '/')
1787             slen--;
1788           else
1789             new_full_pathname[slen] = '/';
1790           new_full_pathname[slen] = '/';
1791           strcpy (new_full_pathname + slen + 1, to_print);
1792
1793 #if defined (VISIBLE_STATS)
1794           if (rl_visible_stats)
1795             extension_char = stat_char (new_full_pathname);
1796           else
1797 #endif
1798           if (gdb_path_isdir (new_full_pathname))
1799             extension_char = '/';
1800
1801           xfree (new_full_pathname);
1802           to_print[-1] = c;
1803         }
1804       else
1805         {
1806           s = tilde_expand (full_pathname);
1807 #if defined (VISIBLE_STATS)
1808           if (rl_visible_stats)
1809             extension_char = stat_char (s);
1810           else
1811 #endif
1812             if (gdb_path_isdir (s))
1813               extension_char = '/';
1814         }
1815
1816       xfree (s);
1817       if (extension_char)
1818         {
1819           displayer->putch (displayer, extension_char);
1820           printed_len++;
1821         }
1822     }
1823
1824   return printed_len;
1825 }
1826
1827 /* GDB version of readline/complete.c:complete_get_screenwidth.  */
1828
1829 static int
1830 gdb_complete_get_screenwidth (const struct match_list_displayer *displayer)
1831 {
1832   /* Readline has other stuff here which it's not clear we need.  */
1833   return displayer->width;
1834 }
1835
1836 extern int _rl_completion_prefix_display_length;
1837 extern int _rl_print_completions_horizontally;
1838
1839 EXTERN_C int _rl_qsort_string_compare (const void *, const void *);
1840 typedef int QSFUNC (const void *, const void *);
1841
1842 /* GDB version of readline/complete.c:rl_display_match_list.
1843    See gdb_display_match_list for a description of MATCHES, LEN, MAX.
1844    Returns non-zero if all matches are displayed.  */
1845
1846 static int
1847 gdb_display_match_list_1 (char **matches, int len, int max,
1848                           const struct match_list_displayer *displayer)
1849 {
1850   int count, limit, printed_len, lines, cols;
1851   int i, j, k, l, common_length, sind;
1852   char *temp, *t;
1853   int page_completions = displayer->height != INT_MAX && pagination_enabled;
1854
1855   /* Find the length of the prefix common to all items: length as displayed
1856      characters (common_length) and as a byte index into the matches (sind) */
1857   common_length = sind = 0;
1858   if (_rl_completion_prefix_display_length > 0)
1859     {
1860       t = gdb_printable_part (matches[0]);
1861       temp = strrchr (t, '/');
1862       common_length = temp ? gdb_fnwidth (temp) : gdb_fnwidth (t);
1863       sind = temp ? strlen (temp) : strlen (t);
1864
1865       if (common_length > _rl_completion_prefix_display_length && common_length > ELLIPSIS_LEN)
1866         max -= common_length - ELLIPSIS_LEN;
1867       else
1868         common_length = sind = 0;
1869     }
1870
1871   /* How many items of MAX length can we fit in the screen window? */
1872   cols = gdb_complete_get_screenwidth (displayer);
1873   max += 2;
1874   limit = cols / max;
1875   if (limit != 1 && (limit * max == cols))
1876     limit--;
1877
1878   /* If cols == 0, limit will end up -1 */
1879   if (cols < displayer->width && limit < 0)
1880     limit = 1;
1881
1882   /* Avoid a possible floating exception.  If max > cols,
1883      limit will be 0 and a divide-by-zero fault will result. */
1884   if (limit == 0)
1885     limit = 1;
1886
1887   /* How many iterations of the printing loop? */
1888   count = (len + (limit - 1)) / limit;
1889
1890   /* Watch out for special case.  If LEN is less than LIMIT, then
1891      just do the inner printing loop.
1892            0 < len <= limit  implies  count = 1. */
1893
1894   /* Sort the items if they are not already sorted. */
1895   if (rl_ignore_completion_duplicates == 0 && rl_sort_completion_matches)
1896     qsort (matches + 1, len, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare);
1897
1898   displayer->crlf (displayer);
1899
1900   lines = 0;
1901   if (_rl_print_completions_horizontally == 0)
1902     {
1903       /* Print the sorted items, up-and-down alphabetically, like ls. */
1904       for (i = 1; i <= count; i++)
1905         {
1906           for (j = 0, l = i; j < limit; j++)
1907             {
1908               if (l > len || matches[l] == 0)
1909                 break;
1910               else
1911                 {
1912                   temp = gdb_printable_part (matches[l]);
1913                   printed_len = gdb_print_filename (temp, matches[l], sind,
1914                                                     displayer);
1915
1916                   if (j + 1 < limit)
1917                     for (k = 0; k < max - printed_len; k++)
1918                       displayer->putch (displayer, ' ');
1919                 }
1920               l += count;
1921             }
1922           displayer->crlf (displayer);
1923           lines++;
1924           if (page_completions && lines >= (displayer->height - 1) && i < count)
1925             {
1926               lines = gdb_display_match_list_pager (lines, displayer);
1927               if (lines < 0)
1928                 return 0;
1929             }
1930         }
1931     }
1932   else
1933     {
1934       /* Print the sorted items, across alphabetically, like ls -x. */
1935       for (i = 1; matches[i]; i++)
1936         {
1937           temp = gdb_printable_part (matches[i]);
1938           printed_len = gdb_print_filename (temp, matches[i], sind, displayer);
1939           /* Have we reached the end of this line? */
1940           if (matches[i+1])
1941             {
1942               if (i && (limit > 1) && (i % limit) == 0)
1943                 {
1944                   displayer->crlf (displayer);
1945                   lines++;
1946                   if (page_completions && lines >= displayer->height - 1)
1947                     {
1948                       lines = gdb_display_match_list_pager (lines, displayer);
1949                       if (lines < 0)
1950                         return 0;
1951                     }
1952                 }
1953               else
1954                 for (k = 0; k < max - printed_len; k++)
1955                   displayer->putch (displayer, ' ');
1956             }
1957         }
1958       displayer->crlf (displayer);
1959     }
1960
1961   return 1;
1962 }
1963
1964 /* Utility for displaying completion list matches, used by both CLI and TUI.
1965
1966    MATCHES is the list of strings, in argv format, LEN is the number of
1967    strings in MATCHES, and MAX is the length of the longest string in
1968    MATCHES.  */
1969
1970 void
1971 gdb_display_match_list (char **matches, int len, int max,
1972                         const struct match_list_displayer *displayer)
1973 {
1974   /* Readline will never call this if complete_line returned NULL.  */
1975   gdb_assert (max_completions != 0);
1976
1977   /* complete_line will never return more than this.  */
1978   if (max_completions > 0)
1979     gdb_assert (len <= max_completions);
1980
1981   if (rl_completion_query_items > 0 && len >= rl_completion_query_items)
1982     {
1983       char msg[100];
1984
1985       /* We can't use *query here because they wait for <RET> which is
1986          wrong here.  This follows the readline version as closely as possible
1987          for compatibility's sake.  See readline/complete.c.  */
1988
1989       displayer->crlf (displayer);
1990
1991       xsnprintf (msg, sizeof (msg),
1992                  "Display all %d possibilities? (y or n)", len);
1993       displayer->puts (displayer, msg);
1994       displayer->flush (displayer);
1995
1996       if (gdb_get_y_or_n (0, displayer) == 0)
1997         {
1998           displayer->crlf (displayer);
1999           return;
2000         }
2001     }
2002
2003   if (gdb_display_match_list_1 (matches, len, max, displayer))
2004     {
2005       /* Note: MAX_COMPLETIONS may be -1 or zero, but LEN is always > 0.  */
2006       if (len == max_completions)
2007         {
2008           /* The maximum number of completions has been reached.  Warn the user
2009              that there may be more.  */
2010           const char *message = get_max_completions_reached_message ();
2011
2012           displayer->puts (displayer, message);
2013           displayer->crlf (displayer);
2014         }
2015     }
2016 }
2017 \f
2018 extern initialize_file_ftype _initialize_completer; /* -Wmissing-prototypes */
2019
2020 void
2021 _initialize_completer (void)
2022 {
2023   add_setshow_zuinteger_unlimited_cmd ("max-completions", no_class,
2024                                        &max_completions, _("\
2025 Set maximum number of completion candidates."), _("\
2026 Show maximum number of completion candidates."), _("\
2027 Use this to limit the number of candidates considered\n\
2028 during completion.  Specifying \"unlimited\" or -1\n\
2029 disables limiting.  Note that setting either no limit or\n\
2030 a very large limit can make completion slow."),
2031                                        NULL, NULL, &setlist, &showlist);
2032 }