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