1 /* This module makes GNU readline available to Python.  It has ideas
2  * contributed by Lee Busby, LLNL, and William Magro, Cornell Theory
3  * Center.  The completer interface was inspired by Lele Gaifax.  More
4  * recently, it was largely rewritten by Guido van Rossum.
5  */
6 
7 /* Standard definitions */
8 #include "Python.h"
9 
10 #include <errno.h>
11 #include <signal.h>
12 #include <stddef.h>
13 #include <stdlib.h>               // free()
14 #include <sys/time.h>
15 
16 #if defined(HAVE_SETLOCALE)
17 /* GNU readline() mistakenly sets the LC_CTYPE locale.
18  * This is evil.  Only the user or the app's main() should do this!
19  * We must save and restore the locale around the rl_initialize() call.
20  */
21 #define SAVE_LOCALE
22 #include <locale.h>
23 #endif
24 
25 #ifdef SAVE_LOCALE
26 #  define RESTORE_LOCALE(sl) { setlocale(LC_CTYPE, sl); free(sl); }
27 #else
28 #  define RESTORE_LOCALE(sl)
29 #endif
30 
31 #ifdef WITH_EDITLINE
32 #  include <editline/readline.h>
33 #else
34 /* GNU readline definitions */
35 #  undef HAVE_CONFIG_H /* Else readline/chardefs.h includes strings.h */
36 #  include <readline/readline.h>
37 #  include <readline/history.h>
38 #endif
39 
40 #ifdef HAVE_RL_COMPLETION_MATCHES
41 #define completion_matches(x, y) \
42     rl_completion_matches((x), ((rl_compentry_func_t *)(y)))
43 #else
44 #if defined(_RL_FUNCTION_TYPEDEF)
45 extern char **completion_matches(char *, rl_compentry_func_t *);
46 #else
47 
48 #if !defined(__APPLE__)
49 extern char **completion_matches(char *, CPFunction *);
50 #endif
51 #endif
52 #endif
53 
54 /*
55  * It is possible to link the readline module to the readline
56  * emulation library of editline/libedit.
57  *
58  * This emulation library is not 100% API compatible with the "real" readline
59  * and cannot be detected at compile-time,
60  * hence we use a runtime check to detect if the Python readline module is
61  * linked to libedit.
62  *
63  * Currently there is one known API incompatibility:
64  * - 'get_history' has a 1-based index with GNU readline, and a 0-based
65  *   index with older versions of libedit's emulation.
66  * - Note that replace_history and remove_history use a 0-based index
67  *   with both implementations.
68  */
69 static int using_libedit_emulation = 0;
70 static const char libedit_version_tag[] = "EditLine wrapper";
71 
72 static int8_t libedit_history_start = 0;
73 static int8_t libedit_append_replace_history_offset = 0;
74 
75 #ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
76 static void
77 on_completion_display_matches_hook(char **matches,
78                                    int num_matches, int max_length);
79 #endif
80 
81 /* Memory allocated for rl_completer_word_break_characters
82    (see issue #17289 for the motivation). */
83 static char *completer_word_break_characters;
84 
85 typedef struct {
86   /* Specify hook functions in Python */
87   PyObject *completion_display_matches_hook;
88   PyObject *startup_hook;
89   PyObject *pre_input_hook;
90 
91   PyObject *completer; /* Specify a word completer in Python */
92   PyObject *begidx;
93   PyObject *endidx;
94 } readlinestate;
95 
96 static inline readlinestate*
get_readline_state(PyObject * module)97 get_readline_state(PyObject *module)
98 {
99     void *state = PyModule_GetState(module);
100     assert(state != NULL);
101     return (readlinestate *)state;
102 }
103 
104 /*[clinic input]
105 module readline
106 [clinic start generated code]*/
107 /*[clinic end generated code: output=da39a3ee5e6b4b0d input=ad49da781b9c8721]*/
108 
109 static int
readline_clear(PyObject * m)110 readline_clear(PyObject *m)
111 {
112    readlinestate *state = get_readline_state(m);
113    Py_CLEAR(state->completion_display_matches_hook);
114    Py_CLEAR(state->startup_hook);
115    Py_CLEAR(state->pre_input_hook);
116    Py_CLEAR(state->completer);
117    Py_CLEAR(state->begidx);
118    Py_CLEAR(state->endidx);
119    return 0;
120 }
121 
122 static int
readline_traverse(PyObject * m,visitproc visit,void * arg)123 readline_traverse(PyObject *m, visitproc visit, void *arg)
124 {
125     readlinestate *state = get_readline_state(m);
126     Py_VISIT(state->completion_display_matches_hook);
127     Py_VISIT(state->startup_hook);
128     Py_VISIT(state->pre_input_hook);
129     Py_VISIT(state->completer);
130     Py_VISIT(state->begidx);
131     Py_VISIT(state->endidx);
132     return 0;
133 }
134 
135 static void
readline_free(void * m)136 readline_free(void *m)
137 {
138     readline_clear((PyObject *)m);
139 }
140 
141 static PyModuleDef readlinemodule;
142 
143 #define readlinestate_global ((readlinestate *)PyModule_GetState(PyState_FindModule(&readlinemodule)))
144 
145 
146 /* Convert to/from multibyte C strings */
147 
148 static PyObject *
encode(PyObject * b)149 encode(PyObject *b)
150 {
151     return PyUnicode_EncodeLocale(b, "surrogateescape");
152 }
153 
154 static PyObject *
decode(const char * s)155 decode(const char *s)
156 {
157     return PyUnicode_DecodeLocale(s, "surrogateescape");
158 }
159 
160 
161 /*
162 Explicitly disable bracketed paste in the interactive interpreter, even if it's
163 set in the inputrc, is enabled by default (eg GNU Readline 8.1), or a user calls
164 readline.read_init_file(). The Python REPL has not implemented bracketed
165 paste support. Also, bracketed mode writes the "\x1b[?2004h" escape sequence
166 into stdout which causes test failures in applications that don't support it.
167 It can still be explicitly enabled by calling readline.parse_and_bind("set
168 enable-bracketed-paste on"). See bpo-42819 for more details.
169 
170 This should be removed if bracketed paste mode is implemented (bpo-39820).
171 */
172 
173 static void
disable_bracketed_paste(void)174 disable_bracketed_paste(void)
175 {
176     if (!using_libedit_emulation) {
177         rl_variable_bind ("enable-bracketed-paste", "off");
178     }
179 }
180 
181 /* Exported function to send one line to readline's init file parser */
182 
183 /*[clinic input]
184 readline.parse_and_bind
185 
186     string: object
187     /
188 
189 Execute the init line provided in the string argument.
190 [clinic start generated code]*/
191 
192 static PyObject *
readline_parse_and_bind(PyObject * module,PyObject * string)193 readline_parse_and_bind(PyObject *module, PyObject *string)
194 /*[clinic end generated code: output=1a1ede8afb9546c1 input=8a28a00bb4d61eec]*/
195 {
196     char *copy;
197     PyObject *encoded = encode(string);
198     if (encoded == NULL) {
199         return NULL;
200     }
201     /* Make a copy -- rl_parse_and_bind() modifies its argument */
202     /* Bernard Herzog */
203     copy = PyMem_Malloc(1 + PyBytes_GET_SIZE(encoded));
204     if (copy == NULL) {
205         Py_DECREF(encoded);
206         return PyErr_NoMemory();
207     }
208     strcpy(copy, PyBytes_AS_STRING(encoded));
209     Py_DECREF(encoded);
210     rl_parse_and_bind(copy);
211     PyMem_Free(copy); /* Free the copy */
212     Py_RETURN_NONE;
213 }
214 
215 /* Exported function to parse a readline init file */
216 
217 /*[clinic input]
218 readline.read_init_file
219 
220     filename as filename_obj: object = None
221     /
222 
223 Execute a readline initialization file.
224 
225 The default filename is the last filename used.
226 [clinic start generated code]*/
227 
228 static PyObject *
readline_read_init_file_impl(PyObject * module,PyObject * filename_obj)229 readline_read_init_file_impl(PyObject *module, PyObject *filename_obj)
230 /*[clinic end generated code: output=8e059b676142831e input=4c80c473e448139d]*/
231 {
232     PyObject *filename_bytes;
233     if (filename_obj != Py_None) {
234         if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
235             return NULL;
236         errno = rl_read_init_file(PyBytes_AS_STRING(filename_bytes));
237         Py_DECREF(filename_bytes);
238     } else
239         errno = rl_read_init_file(NULL);
240     if (errno)
241         return PyErr_SetFromErrno(PyExc_OSError);
242     disable_bracketed_paste();
243     Py_RETURN_NONE;
244 }
245 
246 /* Exported function to load a readline history file */
247 
248 /*[clinic input]
249 readline.read_history_file
250 
251     filename as filename_obj: object = None
252     /
253 
254 Load a readline history file.
255 
256 The default filename is ~/.history.
257 [clinic start generated code]*/
258 
259 static PyObject *
readline_read_history_file_impl(PyObject * module,PyObject * filename_obj)260 readline_read_history_file_impl(PyObject *module, PyObject *filename_obj)
261 /*[clinic end generated code: output=66a951836fb54fbb input=3d29d755b7e6932e]*/
262 {
263     PyObject *filename_bytes;
264     if (filename_obj != Py_None) {
265         if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
266             return NULL;
267         errno = read_history(PyBytes_AS_STRING(filename_bytes));
268         Py_DECREF(filename_bytes);
269     } else
270         errno = read_history(NULL);
271     if (errno)
272         return PyErr_SetFromErrno(PyExc_OSError);
273     Py_RETURN_NONE;
274 }
275 
276 static int _history_length = -1; /* do not truncate history by default */
277 
278 /* Exported function to save a readline history file */
279 
280 /*[clinic input]
281 readline.write_history_file
282 
283     filename as filename_obj: object = None
284     /
285 
286 Save a readline history file.
287 
288 The default filename is ~/.history.
289 [clinic start generated code]*/
290 
291 static PyObject *
readline_write_history_file_impl(PyObject * module,PyObject * filename_obj)292 readline_write_history_file_impl(PyObject *module, PyObject *filename_obj)
293 /*[clinic end generated code: output=fbcad13d8ef59ae6 input=28a8e062fe363703]*/
294 {
295     PyObject *filename_bytes;
296     const char *filename;
297     int err;
298     if (filename_obj != Py_None) {
299         if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
300             return NULL;
301         filename = PyBytes_AS_STRING(filename_bytes);
302     } else {
303         filename_bytes = NULL;
304         filename = NULL;
305     }
306     errno = err = write_history(filename);
307     if (!err && _history_length >= 0)
308         history_truncate_file(filename, _history_length);
309     Py_XDECREF(filename_bytes);
310     errno = err;
311     if (errno)
312         return PyErr_SetFromErrno(PyExc_OSError);
313     Py_RETURN_NONE;
314 }
315 
316 #ifdef HAVE_RL_APPEND_HISTORY
317 /* Exported function to save part of a readline history file */
318 
319 /*[clinic input]
320 readline.append_history_file
321 
322     nelements: int
323     filename as filename_obj: object = None
324     /
325 
326 Append the last nelements items of the history list to file.
327 
328 The default filename is ~/.history.
329 [clinic start generated code]*/
330 
331 static PyObject *
readline_append_history_file_impl(PyObject * module,int nelements,PyObject * filename_obj)332 readline_append_history_file_impl(PyObject *module, int nelements,
333                                   PyObject *filename_obj)
334 /*[clinic end generated code: output=5df06fc9da56e4e4 input=784b774db3a4b7c5]*/
335 {
336     PyObject *filename_bytes;
337     const char *filename;
338     int err;
339     if (filename_obj != Py_None) {
340         if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
341             return NULL;
342         filename = PyBytes_AS_STRING(filename_bytes);
343     } else {
344         filename_bytes = NULL;
345         filename = NULL;
346     }
347     errno = err = append_history(
348         nelements - libedit_append_replace_history_offset, filename);
349     if (!err && _history_length >= 0)
350         history_truncate_file(filename, _history_length);
351     Py_XDECREF(filename_bytes);
352     errno = err;
353     if (errno)
354         return PyErr_SetFromErrno(PyExc_OSError);
355     Py_RETURN_NONE;
356 }
357 #endif
358 
359 
360 /* Set history length */
361 
362 /*[clinic input]
363 readline.set_history_length
364 
365     length: int
366     /
367 
368 Set the maximal number of lines which will be written to the history file.
369 
370 A negative length is used to inhibit history truncation.
371 [clinic start generated code]*/
372 
373 static PyObject *
readline_set_history_length_impl(PyObject * module,int length)374 readline_set_history_length_impl(PyObject *module, int length)
375 /*[clinic end generated code: output=e161a53e45987dc7 input=b8901bf16488b760]*/
376 {
377     _history_length = length;
378     Py_RETURN_NONE;
379 }
380 
381 /* Get history length */
382 
383 /*[clinic input]
384 readline.get_history_length
385 
386 Return the maximum number of lines that will be written to the history file.
387 [clinic start generated code]*/
388 
389 static PyObject *
readline_get_history_length_impl(PyObject * module)390 readline_get_history_length_impl(PyObject *module)
391 /*[clinic end generated code: output=83a2eeae35b6d2b9 input=5dce2eeba4327817]*/
392 {
393     return PyLong_FromLong(_history_length);
394 }
395 
396 /* Generic hook function setter */
397 
398 static PyObject *
set_hook(const char * funcname,PyObject ** hook_var,PyObject * function)399 set_hook(const char *funcname, PyObject **hook_var, PyObject *function)
400 {
401     if (function == Py_None) {
402         Py_CLEAR(*hook_var);
403     }
404     else if (PyCallable_Check(function)) {
405         Py_INCREF(function);
406         Py_XSETREF(*hook_var, function);
407     }
408     else {
409         PyErr_Format(PyExc_TypeError,
410                      "set_%.50s(func): argument not callable",
411                      funcname);
412         return NULL;
413     }
414     Py_RETURN_NONE;
415 }
416 
417 /*[clinic input]
418 readline.set_completion_display_matches_hook
419 
420     function: object = None
421     /
422 
423 Set or remove the completion display function.
424 
425 The function is called as
426   function(substitution, [matches], longest_match_length)
427 once each time matches need to be displayed.
428 [clinic start generated code]*/
429 
430 static PyObject *
readline_set_completion_display_matches_hook_impl(PyObject * module,PyObject * function)431 readline_set_completion_display_matches_hook_impl(PyObject *module,
432                                                   PyObject *function)
433 /*[clinic end generated code: output=516e5cb8db75a328 input=4f0bfd5ab0179a26]*/
434 {
435     PyObject *result = set_hook("completion_display_matches_hook",
436                     &readlinestate_global->completion_display_matches_hook,
437                     function);
438 #ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
439     /* We cannot set this hook globally, since it replaces the
440        default completion display. */
441     rl_completion_display_matches_hook =
442         readlinestate_global->completion_display_matches_hook ?
443 #if defined(_RL_FUNCTION_TYPEDEF)
444         (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
445 #else
446         (VFunction *)on_completion_display_matches_hook : 0;
447 #endif
448 #endif
449     return result;
450 
451 }
452 
453 /*[clinic input]
454 readline.set_startup_hook
455 
456     function: object = None
457     /
458 
459 Set or remove the function invoked by the rl_startup_hook callback.
460 
461 The function is called with no arguments just
462 before readline prints the first prompt.
463 [clinic start generated code]*/
464 
465 static PyObject *
readline_set_startup_hook_impl(PyObject * module,PyObject * function)466 readline_set_startup_hook_impl(PyObject *module, PyObject *function)
467 /*[clinic end generated code: output=02cd0e0c4fa082ad input=7783b4334b26d16d]*/
468 {
469     return set_hook("startup_hook", &readlinestate_global->startup_hook,
470             function);
471 }
472 
473 #ifdef HAVE_RL_PRE_INPUT_HOOK
474 
475 /* Set pre-input hook */
476 
477 /*[clinic input]
478 readline.set_pre_input_hook
479 
480     function: object = None
481     /
482 
483 Set or remove the function invoked by the rl_pre_input_hook callback.
484 
485 The function is called with no arguments after the first prompt
486 has been printed and just before readline starts reading input
487 characters.
488 [clinic start generated code]*/
489 
490 static PyObject *
readline_set_pre_input_hook_impl(PyObject * module,PyObject * function)491 readline_set_pre_input_hook_impl(PyObject *module, PyObject *function)
492 /*[clinic end generated code: output=fe1a96505096f464 input=4f3eaeaf7ce1fdbe]*/
493 {
494     return set_hook("pre_input_hook", &readlinestate_global->pre_input_hook,
495             function);
496 }
497 #endif
498 
499 
500 /* Get the completion type for the scope of the tab-completion */
501 
502 /*[clinic input]
503 readline.get_completion_type
504 
505 Get the type of completion being attempted.
506 [clinic start generated code]*/
507 
508 static PyObject *
readline_get_completion_type_impl(PyObject * module)509 readline_get_completion_type_impl(PyObject *module)
510 /*[clinic end generated code: output=5c54d58a04997c07 input=04b92bc7a82dac91]*/
511 {
512   return PyLong_FromLong(rl_completion_type);
513 }
514 
515 /* Get the beginning index for the scope of the tab-completion */
516 
517 /*[clinic input]
518 readline.get_begidx
519 
520 Get the beginning index of the completion scope.
521 [clinic start generated code]*/
522 
523 static PyObject *
readline_get_begidx_impl(PyObject * module)524 readline_get_begidx_impl(PyObject *module)
525 /*[clinic end generated code: output=362616ee8ed1b2b1 input=e083b81c8eb4bac3]*/
526 {
527     Py_INCREF(readlinestate_global->begidx);
528     return readlinestate_global->begidx;
529 }
530 
531 /* Get the ending index for the scope of the tab-completion */
532 
533 /*[clinic input]
534 readline.get_endidx
535 
536 Get the ending index of the completion scope.
537 [clinic start generated code]*/
538 
539 static PyObject *
readline_get_endidx_impl(PyObject * module)540 readline_get_endidx_impl(PyObject *module)
541 /*[clinic end generated code: output=7f763350b12d7517 input=d4c7e34a625fd770]*/
542 {
543     Py_INCREF(readlinestate_global->endidx);
544     return readlinestate_global->endidx;
545 }
546 
547 /* Set the tab-completion word-delimiters that readline uses */
548 
549 /*[clinic input]
550 readline.set_completer_delims
551 
552     string: object
553     /
554 
555 Set the word delimiters for completion.
556 [clinic start generated code]*/
557 
558 static PyObject *
readline_set_completer_delims(PyObject * module,PyObject * string)559 readline_set_completer_delims(PyObject *module, PyObject *string)
560 /*[clinic end generated code: output=4305b266106c4f1f input=ae945337ebd01e20]*/
561 {
562     char *break_chars;
563     PyObject *encoded = encode(string);
564     if (encoded == NULL) {
565         return NULL;
566     }
567     /* Keep a reference to the allocated memory in the module state in case
568        some other module modifies rl_completer_word_break_characters
569        (see issue #17289). */
570     break_chars = strdup(PyBytes_AS_STRING(encoded));
571     Py_DECREF(encoded);
572     if (break_chars) {
573         free(completer_word_break_characters);
574         completer_word_break_characters = break_chars;
575         rl_completer_word_break_characters = break_chars;
576         Py_RETURN_NONE;
577     }
578     else
579         return PyErr_NoMemory();
580 }
581 
582 /* _py_free_history_entry: Utility function to free a history entry. */
583 
584 #if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
585 
586 /* Readline version >= 5.0 introduced a timestamp field into the history entry
587    structure; this needs to be freed to avoid a memory leak.  This version of
588    readline also introduced the handy 'free_history_entry' function, which
589    takes care of the timestamp. */
590 
591 static void
_py_free_history_entry(HIST_ENTRY * entry)592 _py_free_history_entry(HIST_ENTRY *entry)
593 {
594     histdata_t data = free_history_entry(entry);
595     free(data);
596 }
597 
598 #else
599 
600 /* No free_history_entry function;  free everything manually. */
601 
602 static void
_py_free_history_entry(HIST_ENTRY * entry)603 _py_free_history_entry(HIST_ENTRY *entry)
604 {
605     if (entry->line)
606         free((void *)entry->line);
607     if (entry->data)
608         free(entry->data);
609     free(entry);
610 }
611 
612 #endif
613 
614 /*[clinic input]
615 readline.remove_history_item
616 
617     pos as entry_number: int
618     /
619 
620 Remove history item given by its zero-based position.
621 [clinic start generated code]*/
622 
623 static PyObject *
readline_remove_history_item_impl(PyObject * module,int entry_number)624 readline_remove_history_item_impl(PyObject *module, int entry_number)
625 /*[clinic end generated code: output=ab114f029208c7e8 input=f248beb720ff1838]*/
626 {
627     HIST_ENTRY *entry;
628 
629     if (entry_number < 0) {
630         PyErr_SetString(PyExc_ValueError,
631                         "History index cannot be negative");
632         return NULL;
633     }
634     entry = remove_history(entry_number);
635     if (!entry) {
636         PyErr_Format(PyExc_ValueError,
637                      "No history item at position %d",
638                       entry_number);
639         return NULL;
640     }
641     /* free memory allocated for the history entry */
642     _py_free_history_entry(entry);
643     Py_RETURN_NONE;
644 }
645 
646 /*[clinic input]
647 readline.replace_history_item
648 
649     pos as entry_number: int
650     line: unicode
651     /
652 
653 Replaces history item given by its position with contents of line.
654 
655 pos is zero-based.
656 [clinic start generated code]*/
657 
658 static PyObject *
readline_replace_history_item_impl(PyObject * module,int entry_number,PyObject * line)659 readline_replace_history_item_impl(PyObject *module, int entry_number,
660                                    PyObject *line)
661 /*[clinic end generated code: output=f8cec2770ca125eb input=368bb66fe5ee5222]*/
662 {
663     PyObject *encoded;
664     HIST_ENTRY *old_entry;
665 
666     if (entry_number < 0) {
667         PyErr_SetString(PyExc_ValueError,
668                         "History index cannot be negative");
669         return NULL;
670     }
671     encoded = encode(line);
672     if (encoded == NULL) {
673         return NULL;
674     }
675     old_entry = replace_history_entry(
676         entry_number + libedit_append_replace_history_offset,
677         PyBytes_AS_STRING(encoded), (void *)NULL);
678     Py_DECREF(encoded);
679     if (!old_entry) {
680         PyErr_Format(PyExc_ValueError,
681                      "No history item at position %d",
682                      entry_number);
683         return NULL;
684     }
685     /* free memory allocated for the old history entry */
686     _py_free_history_entry(old_entry);
687     Py_RETURN_NONE;
688 }
689 
690 /* Add a line to the history buffer */
691 
692 /*[clinic input]
693 readline.add_history
694 
695     string: object
696     /
697 
698 Add an item to the history buffer.
699 [clinic start generated code]*/
700 
701 static PyObject *
readline_add_history(PyObject * module,PyObject * string)702 readline_add_history(PyObject *module, PyObject *string)
703 /*[clinic end generated code: output=b107b7e8106e803d input=e57c1cf6bc68d7e3]*/
704 {
705     PyObject *encoded = encode(string);
706     if (encoded == NULL) {
707         return NULL;
708     }
709     add_history(PyBytes_AS_STRING(encoded));
710     Py_DECREF(encoded);
711     Py_RETURN_NONE;
712 }
713 
714 static int should_auto_add_history = 1;
715 
716 /* Enable or disable automatic history */
717 
718 /*[clinic input]
719 readline.set_auto_history
720 
721     enabled as _should_auto_add_history: bool
722     /
723 
724 Enables or disables automatic history.
725 [clinic start generated code]*/
726 
727 static PyObject *
readline_set_auto_history_impl(PyObject * module,int _should_auto_add_history)728 readline_set_auto_history_impl(PyObject *module,
729                                int _should_auto_add_history)
730 /*[clinic end generated code: output=619c6968246fd82b input=3d413073a1a03355]*/
731 {
732     should_auto_add_history = _should_auto_add_history;
733     Py_RETURN_NONE;
734 }
735 
736 
737 /* Get the tab-completion word-delimiters that readline uses */
738 
739 /*[clinic input]
740 readline.get_completer_delims
741 
742 Get the word delimiters for completion.
743 [clinic start generated code]*/
744 
745 static PyObject *
readline_get_completer_delims_impl(PyObject * module)746 readline_get_completer_delims_impl(PyObject *module)
747 /*[clinic end generated code: output=6b060280fa68ef43 input=e36eb14fb8a1f08a]*/
748 {
749     return decode(rl_completer_word_break_characters);
750 }
751 
752 /* Set the completer function */
753 
754 /*[clinic input]
755 readline.set_completer
756 
757     function: object = None
758     /
759 
760 Set or remove the completer function.
761 
762 The function is called as function(text, state),
763 for state in 0, 1, 2, ..., until it returns a non-string.
764 It should return the next possible completion starting with 'text'.
765 [clinic start generated code]*/
766 
767 static PyObject *
readline_set_completer_impl(PyObject * module,PyObject * function)768 readline_set_completer_impl(PyObject *module, PyObject *function)
769 /*[clinic end generated code: output=171a2a60f81d3204 input=51e81e13118eb877]*/
770 {
771     return set_hook("completer", &readlinestate_global->completer, function);
772 }
773 
774 /*[clinic input]
775 readline.get_completer
776 
777 Get the current completer function.
778 [clinic start generated code]*/
779 
780 static PyObject *
readline_get_completer_impl(PyObject * module)781 readline_get_completer_impl(PyObject *module)
782 /*[clinic end generated code: output=6e6bbd8226d14475 input=6457522e56d70d13]*/
783 {
784     if (readlinestate_global->completer == NULL) {
785         Py_RETURN_NONE;
786     }
787     Py_INCREF(readlinestate_global->completer);
788     return readlinestate_global->completer;
789 }
790 
791 /* Private function to get current length of history.  XXX It may be
792  * possible to replace this with a direct use of history_length instead,
793  * but it's not clear whether BSD's libedit keeps history_length up to date.
794  * See issue #8065.*/
795 
796 static int
_py_get_history_length(void)797 _py_get_history_length(void)
798 {
799     HISTORY_STATE *hist_st = history_get_history_state();
800     int length = hist_st->length;
801     /* the history docs don't say so, but the address of hist_st changes each
802        time history_get_history_state is called which makes me think it's
803        freshly malloc'd memory...  on the other hand, the address of the last
804        line stays the same as long as history isn't extended, so it appears to
805        be malloc'd but managed by the history package... */
806     free(hist_st);
807     return length;
808 }
809 
810 /* Exported function to get any element of history */
811 
812 /*[clinic input]
813 readline.get_history_item
814 
815     index as idx: int
816     /
817 
818 Return the current contents of history item at one-based index.
819 [clinic start generated code]*/
820 
821 static PyObject *
readline_get_history_item_impl(PyObject * module,int idx)822 readline_get_history_item_impl(PyObject *module, int idx)
823 /*[clinic end generated code: output=83d3e53ea5f34b3d input=8adf5c80e6c7ff2b]*/
824 {
825     HIST_ENTRY *hist_ent;
826 
827     if (using_libedit_emulation) {
828         /* Older versions of libedit's readline emulation
829          * use 0-based indexes, while readline and newer
830          * versions of libedit use 1-based indexes.
831          */
832         int length = _py_get_history_length();
833 
834         idx = idx - 1 + libedit_history_start;
835 
836         /*
837          * Apple's readline emulation crashes when
838          * the index is out of range, therefore
839          * test for that and fail gracefully.
840          */
841         if (idx < (0 + libedit_history_start)
842                 || idx >= (length + libedit_history_start)) {
843             Py_RETURN_NONE;
844         }
845     }
846     if ((hist_ent = history_get(idx)))
847         return decode(hist_ent->line);
848     else {
849         Py_RETURN_NONE;
850     }
851 }
852 
853 /* Exported function to get current length of history */
854 
855 /*[clinic input]
856 readline.get_current_history_length
857 
858 Return the current (not the maximum) length of history.
859 [clinic start generated code]*/
860 
861 static PyObject *
readline_get_current_history_length_impl(PyObject * module)862 readline_get_current_history_length_impl(PyObject *module)
863 /*[clinic end generated code: output=436b294f12ba1e3f input=9cb3f431a68d071f]*/
864 {
865     return PyLong_FromLong((long)_py_get_history_length());
866 }
867 
868 /* Exported function to read the current line buffer */
869 
870 /*[clinic input]
871 readline.get_line_buffer
872 
873 Return the current contents of the line buffer.
874 [clinic start generated code]*/
875 
876 static PyObject *
readline_get_line_buffer_impl(PyObject * module)877 readline_get_line_buffer_impl(PyObject *module)
878 /*[clinic end generated code: output=d22f9025ecad80e4 input=5f5fbc0d12c69412]*/
879 {
880     return decode(rl_line_buffer);
881 }
882 
883 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
884 
885 /* Exported function to clear the current history */
886 
887 /*[clinic input]
888 readline.clear_history
889 
890 Clear the current readline history.
891 [clinic start generated code]*/
892 
893 static PyObject *
readline_clear_history_impl(PyObject * module)894 readline_clear_history_impl(PyObject *module)
895 /*[clinic end generated code: output=1f2dbb0dfa5d5ebb input=208962c4393f5d16]*/
896 {
897     clear_history();
898     Py_RETURN_NONE;
899 }
900 #endif
901 
902 
903 /* Exported function to insert text into the line buffer */
904 
905 /*[clinic input]
906 readline.insert_text
907 
908     string: object
909     /
910 
911 Insert text into the line buffer at the cursor position.
912 [clinic start generated code]*/
913 
914 static PyObject *
readline_insert_text(PyObject * module,PyObject * string)915 readline_insert_text(PyObject *module, PyObject *string)
916 /*[clinic end generated code: output=23d792821d320c19 input=bc96c3c848d5ccb5]*/
917 {
918     PyObject *encoded = encode(string);
919     if (encoded == NULL) {
920         return NULL;
921     }
922     rl_insert_text(PyBytes_AS_STRING(encoded));
923     Py_DECREF(encoded);
924     Py_RETURN_NONE;
925 }
926 
927 /* Redisplay the line buffer */
928 
929 /*[clinic input]
930 readline.redisplay
931 
932 Change what's displayed on the screen to reflect contents of the line buffer.
933 [clinic start generated code]*/
934 
935 static PyObject *
readline_redisplay_impl(PyObject * module)936 readline_redisplay_impl(PyObject *module)
937 /*[clinic end generated code: output=a8b9725827c3c34b input=b485151058d75edc]*/
938 {
939     rl_redisplay();
940     Py_RETURN_NONE;
941 }
942 
943 #include "clinic/readline.c.h"
944 
945 /* Table of functions exported by the module */
946 
947 static struct PyMethodDef readline_methods[] =
948 {
949     READLINE_PARSE_AND_BIND_METHODDEF
950     READLINE_GET_LINE_BUFFER_METHODDEF
951     READLINE_INSERT_TEXT_METHODDEF
952     READLINE_REDISPLAY_METHODDEF
953     READLINE_READ_INIT_FILE_METHODDEF
954     READLINE_READ_HISTORY_FILE_METHODDEF
955     READLINE_WRITE_HISTORY_FILE_METHODDEF
956 #ifdef HAVE_RL_APPEND_HISTORY
957     READLINE_APPEND_HISTORY_FILE_METHODDEF
958 #endif
959     READLINE_GET_HISTORY_ITEM_METHODDEF
960     READLINE_GET_CURRENT_HISTORY_LENGTH_METHODDEF
961     READLINE_SET_HISTORY_LENGTH_METHODDEF
962     READLINE_GET_HISTORY_LENGTH_METHODDEF
963     READLINE_SET_COMPLETER_METHODDEF
964     READLINE_GET_COMPLETER_METHODDEF
965     READLINE_GET_COMPLETION_TYPE_METHODDEF
966     READLINE_GET_BEGIDX_METHODDEF
967     READLINE_GET_ENDIDX_METHODDEF
968     READLINE_SET_COMPLETER_DELIMS_METHODDEF
969     READLINE_SET_AUTO_HISTORY_METHODDEF
970     READLINE_ADD_HISTORY_METHODDEF
971     READLINE_REMOVE_HISTORY_ITEM_METHODDEF
972     READLINE_REPLACE_HISTORY_ITEM_METHODDEF
973     READLINE_GET_COMPLETER_DELIMS_METHODDEF
974     READLINE_SET_COMPLETION_DISPLAY_MATCHES_HOOK_METHODDEF
975     READLINE_SET_STARTUP_HOOK_METHODDEF
976 #ifdef HAVE_RL_PRE_INPUT_HOOK
977     READLINE_SET_PRE_INPUT_HOOK_METHODDEF
978 #endif
979 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
980     READLINE_CLEAR_HISTORY_METHODDEF
981 #endif
982     {0, 0}
983 };
984 
985 
986 /* C function to call the Python hooks. */
987 
988 static int
on_hook(PyObject * func)989 on_hook(PyObject *func)
990 {
991     int result = 0;
992     if (func != NULL) {
993         PyObject *r;
994         r = PyObject_CallNoArgs(func);
995         if (r == NULL)
996             goto error;
997         if (r == Py_None)
998             result = 0;
999         else {
1000             result = _PyLong_AsInt(r);
1001             if (result == -1 && PyErr_Occurred())
1002                 goto error;
1003         }
1004         Py_DECREF(r);
1005         goto done;
1006       error:
1007         PyErr_Clear();
1008         Py_XDECREF(r);
1009       done:
1010         return result;
1011     }
1012     return result;
1013 }
1014 
1015 static int
1016 #if defined(_RL_FUNCTION_TYPEDEF)
on_startup_hook(void)1017 on_startup_hook(void)
1018 #else
1019 on_startup_hook()
1020 #endif
1021 {
1022     int r;
1023     PyGILState_STATE gilstate = PyGILState_Ensure();
1024     r = on_hook(readlinestate_global->startup_hook);
1025     PyGILState_Release(gilstate);
1026     return r;
1027 }
1028 
1029 #ifdef HAVE_RL_PRE_INPUT_HOOK
1030 static int
1031 #if defined(_RL_FUNCTION_TYPEDEF)
on_pre_input_hook(void)1032 on_pre_input_hook(void)
1033 #else
1034 on_pre_input_hook()
1035 #endif
1036 {
1037     int r;
1038     PyGILState_STATE gilstate = PyGILState_Ensure();
1039     r = on_hook(readlinestate_global->pre_input_hook);
1040     PyGILState_Release(gilstate);
1041     return r;
1042 }
1043 #endif
1044 
1045 
1046 /* C function to call the Python completion_display_matches */
1047 
1048 #ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
1049 static void
on_completion_display_matches_hook(char ** matches,int num_matches,int max_length)1050 on_completion_display_matches_hook(char **matches,
1051                                    int num_matches, int max_length)
1052 {
1053     int i;
1054     PyObject *sub, *m=NULL, *s=NULL, *r=NULL;
1055     PyGILState_STATE gilstate = PyGILState_Ensure();
1056     m = PyList_New(num_matches);
1057     if (m == NULL)
1058         goto error;
1059     for (i = 0; i < num_matches; i++) {
1060         s = decode(matches[i+1]);
1061         if (s == NULL)
1062             goto error;
1063         PyList_SET_ITEM(m, i, s);
1064     }
1065     sub = decode(matches[0]);
1066     r = PyObject_CallFunction(readlinestate_global->completion_display_matches_hook,
1067                               "NNi", sub, m, max_length);
1068 
1069     m=NULL;
1070 
1071     if (r == NULL ||
1072         (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
1073         goto error;
1074     }
1075     Py_CLEAR(r);
1076 
1077     if (0) {
1078     error:
1079         PyErr_Clear();
1080         Py_XDECREF(m);
1081         Py_XDECREF(r);
1082     }
1083     PyGILState_Release(gilstate);
1084 }
1085 
1086 #endif
1087 
1088 #ifdef HAVE_RL_RESIZE_TERMINAL
1089 static volatile sig_atomic_t sigwinch_received;
1090 static PyOS_sighandler_t sigwinch_ohandler;
1091 
1092 static void
readline_sigwinch_handler(int signum)1093 readline_sigwinch_handler(int signum)
1094 {
1095     sigwinch_received = 1;
1096     if (sigwinch_ohandler &&
1097             sigwinch_ohandler != SIG_IGN && sigwinch_ohandler != SIG_DFL)
1098         sigwinch_ohandler(signum);
1099 
1100 #ifndef HAVE_SIGACTION
1101     /* If the handler was installed with signal() rather than sigaction(),
1102     we need to reinstall it. */
1103     PyOS_setsig(SIGWINCH, readline_sigwinch_handler);
1104 #endif
1105 }
1106 #endif
1107 
1108 /* C function to call the Python completer. */
1109 
1110 static char *
on_completion(const char * text,int state)1111 on_completion(const char *text, int state)
1112 {
1113     char *result = NULL;
1114     if (readlinestate_global->completer != NULL) {
1115         PyObject *r = NULL, *t;
1116         PyGILState_STATE gilstate = PyGILState_Ensure();
1117         rl_attempted_completion_over = 1;
1118         t = decode(text);
1119         r = PyObject_CallFunction(readlinestate_global->completer, "Ni", t, state);
1120         if (r == NULL)
1121             goto error;
1122         if (r == Py_None) {
1123             result = NULL;
1124         }
1125         else {
1126             PyObject *encoded = encode(r);
1127             if (encoded == NULL)
1128                 goto error;
1129             result = strdup(PyBytes_AS_STRING(encoded));
1130             Py_DECREF(encoded);
1131         }
1132         Py_DECREF(r);
1133         goto done;
1134       error:
1135         PyErr_Clear();
1136         Py_XDECREF(r);
1137       done:
1138         PyGILState_Release(gilstate);
1139         return result;
1140     }
1141     return result;
1142 }
1143 
1144 
1145 /* A more flexible constructor that saves the "begidx" and "endidx"
1146  * before calling the normal completer */
1147 
1148 static char **
flex_complete(const char * text,int start,int end)1149 flex_complete(const char *text, int start, int end)
1150 {
1151     char **result;
1152     char saved;
1153     size_t start_size, end_size;
1154     wchar_t *s;
1155     PyGILState_STATE gilstate = PyGILState_Ensure();
1156 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
1157     rl_completion_append_character ='\0';
1158 #endif
1159 #ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
1160     rl_completion_suppress_append = 0;
1161 #endif
1162 
1163     saved = rl_line_buffer[start];
1164     rl_line_buffer[start] = 0;
1165     s = Py_DecodeLocale(rl_line_buffer, &start_size);
1166     rl_line_buffer[start] = saved;
1167     if (s == NULL) {
1168         goto done;
1169     }
1170     PyMem_RawFree(s);
1171     saved = rl_line_buffer[end];
1172     rl_line_buffer[end] = 0;
1173     s = Py_DecodeLocale(rl_line_buffer + start, &end_size);
1174     rl_line_buffer[end] = saved;
1175     if (s == NULL) {
1176         goto done;
1177     }
1178     PyMem_RawFree(s);
1179     start = (int)start_size;
1180     end = start + (int)end_size;
1181 
1182 done:
1183     Py_XDECREF(readlinestate_global->begidx);
1184     Py_XDECREF(readlinestate_global->endidx);
1185     readlinestate_global->begidx = PyLong_FromLong((long) start);
1186     readlinestate_global->endidx = PyLong_FromLong((long) end);
1187     result = completion_matches((char *)text, *on_completion);
1188     PyGILState_Release(gilstate);
1189     return result;
1190 }
1191 
1192 
1193 /* Helper to initialize GNU readline properly.
1194    Return -1 on memory allocation failure, return 0 on success. */
1195 static int
setup_readline(readlinestate * mod_state)1196 setup_readline(readlinestate *mod_state)
1197 {
1198 #ifdef SAVE_LOCALE
1199     char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1200     if (!saved_locale) {
1201         return -1;
1202     }
1203 #endif
1204 
1205     /* The name must be defined before initialization */
1206     rl_readline_name = "python";
1207 
1208     /* the libedit readline emulation resets key bindings etc
1209      * when calling rl_initialize.  So call it upfront
1210      */
1211     if (using_libedit_emulation)
1212         rl_initialize();
1213 
1214     /* Detect if libedit's readline emulation uses 0-based
1215      * indexing or 1-based indexing.
1216      */
1217     add_history("1");
1218     if (history_get(1) == NULL) {
1219         libedit_history_start = 0;
1220     } else {
1221         libedit_history_start = 1;
1222     }
1223     /* Some libedit implementations use 1 based indexing on
1224      * replace_history_entry where libreadline uses 0 based.
1225      * The API our module presents is supposed to be 0 based.
1226      * It's a mad mad mad mad world.
1227      */
1228     {
1229         add_history("2");
1230         HIST_ENTRY *old_entry = replace_history_entry(1, "X", NULL);
1231         _py_free_history_entry(old_entry);
1232         HIST_ENTRY *item = history_get(libedit_history_start);
1233         if (item && item->line && strcmp(item->line, "X")) {
1234             libedit_append_replace_history_offset = 0;
1235         } else {
1236             libedit_append_replace_history_offset = 1;
1237         }
1238     }
1239     clear_history();
1240 
1241     using_history();
1242 
1243     /* Force rebind of TAB to insert-tab */
1244     rl_bind_key('\t', rl_insert);
1245     /* Bind both ESC-TAB and ESC-ESC to the completion function */
1246     rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
1247     rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
1248 #ifdef HAVE_RL_RESIZE_TERMINAL
1249     /* Set up signal handler for window resize */
1250     sigwinch_ohandler = PyOS_setsig(SIGWINCH, readline_sigwinch_handler);
1251 #endif
1252     /* Set our hook functions */
1253     rl_startup_hook = on_startup_hook;
1254 #ifdef HAVE_RL_PRE_INPUT_HOOK
1255     rl_pre_input_hook = on_pre_input_hook;
1256 #endif
1257     /* Set our completion function */
1258     rl_attempted_completion_function = flex_complete;
1259     /* Set Python word break characters */
1260     completer_word_break_characters =
1261         strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
1262         /* All nonalphanums except '.' */
1263     rl_completer_word_break_characters = completer_word_break_characters;
1264 
1265     mod_state->begidx = PyLong_FromLong(0L);
1266     mod_state->endidx = PyLong_FromLong(0L);
1267 
1268     if (!using_libedit_emulation)
1269     {
1270         if (!isatty(STDOUT_FILENO)) {
1271             /* Issue #19884: stdout is not a terminal. Disable meta modifier
1272                keys to not write the ANSI sequence "\033[1034h" into stdout. On
1273                terminals supporting 8 bit characters like TERM=xterm-256color
1274                (which is now the default Fedora since Fedora 18), the meta key is
1275                used to enable support of 8 bit characters (ANSI sequence
1276                "\033[1034h").
1277 
1278                With libedit, this call makes readline() crash. */
1279             rl_variable_bind ("enable-meta-key", "off");
1280         }
1281     }
1282 
1283     /* Initialize (allows .inputrc to override)
1284      *
1285      * XXX: A bug in the readline-2.2 library causes a memory leak
1286      * inside this function.  Nothing we can do about it.
1287      */
1288     if (using_libedit_emulation)
1289         rl_read_init_file(NULL);
1290     else
1291         rl_initialize();
1292 
1293     disable_bracketed_paste();
1294 
1295     RESTORE_LOCALE(saved_locale)
1296     return 0;
1297 }
1298 
1299 /* Wrapper around GNU readline that handles signals differently. */
1300 
1301 static char *completed_input_string;
1302 static void
rlhandler(char * text)1303 rlhandler(char *text)
1304 {
1305     completed_input_string = text;
1306     rl_callback_handler_remove();
1307 }
1308 
1309 static char *
readline_until_enter_or_signal(const char * prompt,int * signal)1310 readline_until_enter_or_signal(const char *prompt, int *signal)
1311 {
1312     char * not_done_reading = "";
1313     fd_set selectset;
1314 
1315     *signal = 0;
1316 #ifdef HAVE_RL_CATCH_SIGNAL
1317     rl_catch_signals = 0;
1318 #endif
1319 
1320     rl_callback_handler_install (prompt, rlhandler);
1321     FD_ZERO(&selectset);
1322 
1323     completed_input_string = not_done_reading;
1324 
1325     while (completed_input_string == not_done_reading) {
1326         int has_input = 0, err = 0;
1327 
1328         while (!has_input)
1329         {               struct timeval timeout = {0, 100000}; /* 0.1 seconds */
1330 
1331             /* [Bug #1552726] Only limit the pause if an input hook has been
1332                defined.  */
1333             struct timeval *timeoutp = NULL;
1334             if (PyOS_InputHook)
1335                 timeoutp = &timeout;
1336 #ifdef HAVE_RL_RESIZE_TERMINAL
1337             /* Update readline's view of the window size after SIGWINCH */
1338             if (sigwinch_received) {
1339                 sigwinch_received = 0;
1340                 rl_resize_terminal();
1341             }
1342 #endif
1343             FD_SET(fileno(rl_instream), &selectset);
1344             /* select resets selectset if no input was available */
1345             has_input = select(fileno(rl_instream) + 1, &selectset,
1346                                NULL, NULL, timeoutp);
1347             err = errno;
1348             if(PyOS_InputHook) PyOS_InputHook();
1349         }
1350 
1351         if (has_input > 0) {
1352             rl_callback_read_char();
1353         }
1354         else if (err == EINTR) {
1355             int s;
1356             PyEval_RestoreThread(_PyOS_ReadlineTState);
1357             s = PyErr_CheckSignals();
1358             PyEval_SaveThread();
1359             if (s < 0) {
1360                 rl_free_line_state();
1361 #if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0700
1362                 rl_callback_sigcleanup();
1363 #endif
1364                 rl_cleanup_after_signal();
1365                 rl_callback_handler_remove();
1366                 *signal = 1;
1367                 completed_input_string = NULL;
1368             }
1369         }
1370     }
1371 
1372     return completed_input_string;
1373 }
1374 
1375 
1376 static char *
call_readline(FILE * sys_stdin,FILE * sys_stdout,const char * prompt)1377 call_readline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)
1378 {
1379     size_t n;
1380     char *p;
1381     int signal;
1382 
1383 #ifdef SAVE_LOCALE
1384     char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1385     if (!saved_locale)
1386         Py_FatalError("not enough memory to save locale");
1387     _Py_SetLocaleFromEnv(LC_CTYPE);
1388 #endif
1389 
1390     if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1391         rl_instream = sys_stdin;
1392         rl_outstream = sys_stdout;
1393 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
1394         rl_prep_terminal (1);
1395 #endif
1396     }
1397 
1398     p = readline_until_enter_or_signal(prompt, &signal);
1399 
1400     /* we got an interrupt signal */
1401     if (signal) {
1402         RESTORE_LOCALE(saved_locale)
1403         return NULL;
1404     }
1405 
1406     /* We got an EOF, return an empty string. */
1407     if (p == NULL) {
1408         p = PyMem_RawMalloc(1);
1409         if (p != NULL)
1410             *p = '\0';
1411         RESTORE_LOCALE(saved_locale)
1412         return p;
1413     }
1414 
1415     /* we have a valid line */
1416     n = strlen(p);
1417     if (should_auto_add_history && n > 0) {
1418         const char *line;
1419         int length = _py_get_history_length();
1420         if (length > 0) {
1421             HIST_ENTRY *hist_ent;
1422             if (using_libedit_emulation) {
1423                 /* handle older 0-based or newer 1-based indexing */
1424                 hist_ent = history_get(length + libedit_history_start - 1);
1425             } else
1426                 hist_ent = history_get(length);
1427             line = hist_ent ? hist_ent->line : "";
1428         } else
1429             line = "";
1430         if (strcmp(p, line))
1431             add_history(p);
1432     }
1433     /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1434        release the original. */
1435     char *q = p;
1436     p = PyMem_RawMalloc(n+2);
1437     if (p != NULL) {
1438         memcpy(p, q, n);
1439         p[n] = '\n';
1440         p[n+1] = '\0';
1441     }
1442     free(q);
1443     RESTORE_LOCALE(saved_locale)
1444     return p;
1445 }
1446 
1447 
1448 /* Initialize the module */
1449 
1450 PyDoc_STRVAR(doc_module,
1451 "Importing this module enables command line editing using GNU readline.");
1452 
1453 PyDoc_STRVAR(doc_module_le,
1454 "Importing this module enables command line editing using libedit readline.");
1455 
1456 static struct PyModuleDef readlinemodule = {
1457     PyModuleDef_HEAD_INIT,
1458     "readline",
1459     doc_module,
1460     sizeof(readlinestate),
1461     readline_methods,
1462     NULL,
1463     readline_traverse,
1464     readline_clear,
1465     readline_free
1466 };
1467 
1468 
1469 PyMODINIT_FUNC
PyInit_readline(void)1470 PyInit_readline(void)
1471 {
1472     PyObject *m;
1473     readlinestate *mod_state;
1474 
1475     if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1476         using_libedit_emulation = 1;
1477     }
1478 
1479     if (using_libedit_emulation)
1480         readlinemodule.m_doc = doc_module_le;
1481 
1482 
1483     m = PyModule_Create(&readlinemodule);
1484 
1485     if (m == NULL)
1486         return NULL;
1487 
1488     if (PyModule_AddIntConstant(m, "_READLINE_VERSION",
1489                                 RL_READLINE_VERSION) < 0) {
1490         goto error;
1491     }
1492     if (PyModule_AddIntConstant(m, "_READLINE_RUNTIME_VERSION",
1493                                 rl_readline_version) < 0) {
1494         goto error;
1495     }
1496     if (PyModule_AddStringConstant(m, "_READLINE_LIBRARY_VERSION",
1497                                    rl_library_version) < 0)
1498     {
1499         goto error;
1500     }
1501 
1502     mod_state = (readlinestate *) PyModule_GetState(m);
1503     PyOS_ReadlineFunctionPointer = call_readline;
1504     if (setup_readline(mod_state) < 0) {
1505         PyErr_NoMemory();
1506         goto error;
1507     }
1508 
1509     return m;
1510 
1511 error:
1512     Py_DECREF(m);
1513     return NULL;
1514 }
1515