MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / c_gets

Function c_gets

extern/editline/src/chared.c:671–730  ·  view source on GitHub ↗

c_gets(): * Get a string */

Source from the content-addressed store, hash-verified

669 * Get a string
670 */
671protected int
672c_gets(EditLine *el, Char *buf, const Char *prompt)
673{
674 Char ch;
675 ssize_t len;
676 Char *cp = el->el_line.buffer;
677
678 if (prompt) {
679 len = (ssize_t)Strlen(prompt);
680 (void)memcpy(cp, prompt, (size_t)len * sizeof(*cp));
681 cp += len;
682 }
683 len = 0;
684
685 for (;;) {
686 el->el_line.cursor = cp;
687 *cp = ' ';
688 el->el_line.lastchar = cp + 1;
689 re_refresh(el);
690
691 if (FUN(el,getc)(el, &ch) != 1) {
692 ed_end_of_file(el, 0);
693 len = -1;
694 break;
695 }
696
697 switch (ch) {
698
699 case 0010: /* Delete and backspace */
700 case 0177:
701 if (len == 0) {
702 len = -1;
703 break;
704 }
705 cp--;
706 continue;
707
708 case 0033: /* ESC */
709 case '\r': /* Newline */
710 case '\n':
711 buf[len] = ch;
712 break;
713
714 default:
715 if (len >= (ssize_t)(EL_BUFSIZ - 16))
716 terminal_beep(el);
717 else {
718 buf[len++] = ch;
719 *cp++ = ch;
720 }
721 continue;
722 }
723 break;
724 }
725
726 el->el_line.buffer[0] = '\0';
727 el->el_line.lastchar = el->el_line.buffer;
728 el->el_line.cursor = el->el_line.buffer;

Callers 2

ed_commandFunction · 0.85
cv_searchFunction · 0.85

Calls 3

re_refreshFunction · 0.85
ed_end_of_fileFunction · 0.85
terminal_beepFunction · 0.85

Tested by

no test coverage detected