~ubuntu-branches/ubuntu/natty/mysql-5.1/natty-proposed

« back to all changes in this revision

Viewing changes to cmd-line-utils/libedit/prompt.c

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2012-02-22 08:30:45 UTC
  • mfrom: (1.4.1)
  • Revision ID: package-import@ubuntu.com-20120222083045-2rd53r4bnyx7qus4
Tags: 5.1.61-0ubuntu0.11.04.1
* SECURITY UPDATE: Update to 5.1.61 to fix multiple security issues
  (LP: #937869)
  - http://www.oracle.com/technetwork/topics/security/cpujan2012-366304.html
  - CVE-2011-2262
  - CVE-2012-0075
  - CVE-2012-0112
  - CVE-2012-0113
  - CVE-2012-0114
  - CVE-2012-0115
  - CVE-2012-0116
  - CVE-2012-0117
  - CVE-2012-0118
  - CVE-2012-0119
  - CVE-2012-0120
  - CVE-2012-0484
  - CVE-2012-0485
  - CVE-2012-0486
  - CVE-2012-0487
  - CVE-2012-0488
  - CVE-2012-0489
  - CVE-2012-0490
  - CVE-2012-0491
  - CVE-2012-0492
  - CVE-2012-0493
  - CVE-2012-0494
  - CVE-2012-0495
  - CVE-2012-0496

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*      $NetBSD: prompt.c,v 1.11 2003/08/07 16:44:32 agc Exp $  */
 
1
/*      $NetBSD: prompt.c,v 1.20 2011/07/29 15:16:33 christos Exp $     */
2
2
 
3
3
/*-
4
4
 * Copyright (c) 1992, 1993
46
46
#include <stdio.h>
47
47
#include "el.h"
48
48
 
49
 
private char    *prompt_default(EditLine *);
50
 
private char    *prompt_default_r(EditLine *);
 
49
private Char    *prompt_default(EditLine *);
 
50
private Char    *prompt_default_r(EditLine *);
51
51
 
52
52
/* prompt_default():
53
53
 *      Just a default prompt, in case the user did not provide one
54
54
 */
55
 
private char *
 
55
private Char *
56
56
/*ARGSUSED*/
57
57
prompt_default(EditLine *el __attribute__((__unused__)))
58
58
{
59
 
        static char a[3] = {'?', ' ', '\0'};
 
59
        static Char a[3] = {'?', ' ', '\0'};
60
60
 
61
 
        return (a);
 
61
        return a;
62
62
}
63
63
 
64
64
 
65
65
/* prompt_default_r():
66
66
 *      Just a default rprompt, in case the user did not provide one
67
67
 */
68
 
private char *
 
68
private Char *
69
69
/*ARGSUSED*/
70
70
prompt_default_r(EditLine *el __attribute__((__unused__)))
71
71
{
72
 
        static char a[1] = {'\0'};
 
72
        static Char a[1] = {'\0'};
73
73
 
74
 
        return (a);
 
74
        return a;
75
75
}
76
76
 
77
77
 
78
78
/* prompt_print():
79
79
 *      Print the prompt and update the prompt position.
80
 
 *      We use an array of integers in case we want to pass
81
 
 *      literal escape sequences in the prompt and we want a
82
 
 *      bit to flag them
83
80
 */
84
81
protected void
85
82
prompt_print(EditLine *el, int op)
86
83
{
87
84
        el_prompt_t *elp;
88
 
        char *p;
 
85
        Char *p;
 
86
        int ignore = 0;
89
87
 
90
88
        if (op == EL_PROMPT)
91
89
                elp = &el->el_prompt;
92
90
        else
93
91
                elp = &el->el_rprompt;
94
 
        p = (elp->p_func) (el);
95
 
        while (*p)
96
 
                re_putc(el, *p++, 1);
 
92
 
 
93
        if (elp->p_wide)
 
94
                p = (*elp->p_func)(el);
 
95
        else
 
96
                p = ct_decode_string((char *)(void *)(*elp->p_func)(el),
 
97
                    &el->el_scratch);
 
98
 
 
99
        for (; *p; p++) {
 
100
                if (elp->p_ignore == *p) {
 
101
                        ignore = !ignore;
 
102
                        continue;
 
103
                }
 
104
                if (ignore)
 
105
                        terminal__putc(el, *p);
 
106
                else
 
107
                        re_putc(el, *p, 1);
 
108
        }
97
109
 
98
110
        elp->p_pos.v = el->el_refresh.r_cursor.v;
99
111
        elp->p_pos.h = el->el_refresh.r_cursor.h;
110
122
        el->el_prompt.p_func = prompt_default;
111
123
        el->el_prompt.p_pos.v = 0;
112
124
        el->el_prompt.p_pos.h = 0;
 
125
        el->el_prompt.p_ignore = '\0';
113
126
        el->el_rprompt.p_func = prompt_default_r;
114
127
        el->el_rprompt.p_pos.v = 0;
115
128
        el->el_rprompt.p_pos.h = 0;
116
 
        return (0);
 
129
        el->el_rprompt.p_ignore = '\0';
 
130
        return 0;
117
131
}
118
132
 
119
133
 
131
145
 *      Install a prompt printing function
132
146
 */
133
147
protected int
134
 
prompt_set(EditLine *el, el_pfunc_t prf, int op)
 
148
prompt_set(EditLine *el, el_pfunc_t prf, Char c, int op, int wide)
135
149
{
136
150
        el_prompt_t *p;
137
151
 
138
 
        if (op == EL_PROMPT)
 
152
        if (op == EL_PROMPT || op == EL_PROMPT_ESC)
139
153
                p = &el->el_prompt;
140
154
        else
141
155
                p = &el->el_rprompt;
 
156
 
142
157
        if (prf == NULL) {
143
 
                if (op == EL_PROMPT)
 
158
                if (op == EL_PROMPT || op == EL_PROMPT_ESC)
144
159
                        p->p_func = prompt_default;
145
160
                else
146
161
                        p->p_func = prompt_default_r;
147
 
        } else
 
162
        } else {
148
163
                p->p_func = prf;
 
164
        }
 
165
 
 
166
        p->p_ignore = c;
 
167
 
149
168
        p->p_pos.v = 0;
150
169
        p->p_pos.h = 0;
151
 
        return (0);
 
170
        p->p_wide = wide;
 
171
 
 
172
        return 0;
152
173
}
153
174
 
154
175
 
156
177
 *      Retrieve the prompt printing function
157
178
 */
158
179
protected int
159
 
prompt_get(EditLine *el, el_pfunc_t *prf, int op)
 
180
prompt_get(EditLine *el, el_pfunc_t *prf, Char *c, int op)
160
181
{
 
182
        el_prompt_t *p;
161
183
 
162
184
        if (prf == NULL)
163
 
                return (-1);
 
185
                return -1;
 
186
 
164
187
        if (op == EL_PROMPT)
165
 
                *prf = el->el_prompt.p_func;
 
188
                p = &el->el_prompt;
166
189
        else
167
 
                *prf = el->el_rprompt.p_func;
168
 
        return (0);
 
190
                p = &el->el_rprompt;
 
191
 
 
192
        if (prf)
 
193
                *prf = p->p_func;
 
194
        if (c)
 
195
                *c = p->p_ignore;
 
196
 
 
197
        return 0;
169
198
}