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