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