xref: /netbsd-src/external/gpl3/gdb/dist/gdb/completer.c (revision d909946ca08dceb44d7d0f22ec9488679695d976)
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 
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   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 	  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 
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 
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 }
1790