Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 91878
Collapse All | Expand All

(-)src/misc.c (+47 lines)
Lines 223-228 Link Here
223
    return (pnew - str);
223
    return (pnew - str);
224
}
224
}
225
225
226
spif_charptr_t
227
escape_string(spif_charptr_t str, spif_char_t quote, spif_int32_t maxlen)
228
{
229
    spif_charptr_t buff, s = str, pbuff;
230
231
    D_STRINGS(("escape_string(%s %c %ld)\n", (char *) str, quote, maxlen));
232
    if (! quote) {
233
        quote = '\"';
234
    }
235
236
    /* The escaped string will be at most twice the length of the original. */
237
    buff = SPIF_CAST(charptr) MALLOC(strlen(SPIF_CAST_PTR(char) str) * 2 + 1);
238
239
    /* Copy and escape the string from str into buff. */
240
    for (pbuff = buff; (*s); s++, pbuff++) {
241
        if (*s == quote) {
242
            D_STRINGS(("Double-escaping \'%c\' at position %d\n", *s, s - str));
243
            *pbuff = '\\';
244
            pbuff++;
245
            *pbuff = '\\';
246
            pbuff++;
247
        } else {
248
            if (quote == '\"') {
249
                if ((*s == '\\') || (*s == '`')) {
250
                    D_STRINGS(("Escaping \'%c\' at position %d\n", *s, s - str));
251
                    *pbuff = '\\';
252
                    pbuff++;
253
                }
254
            }
255
        }
256
        D_STRINGS(("Copying \'%c\' at position %d\n", *s, s - str));
257
        *pbuff = *s;
258
    }
259
    *pbuff = 0;
260
261
    if (maxlen) {
262
        /* Given maxlen, we know "str" can hold at least "maxlen" chars. */
263
        if (!spiftool_safe_strncpy(str, buff, maxlen)) {
264
            str[maxlen] = 0;
265
        }
266
        FREE(buff);
267
        return str;
268
    } else {
269
        return buff;
270
    }
271
}
272
226
char *
273
char *
227
safe_print_string(const char *str, unsigned long len)
274
safe_print_string(const char *str, unsigned long len)
228
{
275
{
(-)src/misc.h (+1 lines)
Lines 40-45 Link Here
40
extern unsigned long str_leading_match(register const char *, register const char *);
40
extern unsigned long str_leading_match(register const char *, register const char *);
41
extern char *str_trim(char *str);
41
extern char *str_trim(char *str);
42
extern int parse_escaped_string(char *str);
42
extern int parse_escaped_string(char *str);
43
extern spif_charptr_t escape_string(spif_charptr_t str, spif_char_t quote, spif_int32_t maxlen);
43
extern char *safe_print_string(const char *buff, unsigned long len);
44
extern char *safe_print_string(const char *buff, unsigned long len);
44
extern unsigned long add_carriage_returns(unsigned char *buff, unsigned long cnt);
45
extern unsigned long add_carriage_returns(unsigned char *buff, unsigned long cnt);
45
extern unsigned char mkdirhier(const char *);
46
extern unsigned char mkdirhier(const char *);
(-)src/options.c (-1 / +4 lines)
Lines 3850-3856 Link Here
3850
    }
3863
    }
3851
#ifdef CUTCHAR_OPTION
3864
#ifdef CUTCHAR_OPTION
3852
    if (rs_cutchars) {
3865
    if (rs_cutchars) {
3853
        fprintf(fp, "    cut_chars '%s'\n", rs_cutchars);
3866
        spif_charptr_t cut_chars_escaped;
3867
3868
        cut_chars_escaped = escape_string(SPIF_CAST(charptr) rs_cutchars, '\"', 0);
3869
        fprintf(fp, "    cut_chars \"%s\"\n", (char *) cut_chars_escaped);
3854
    }
3870
    }
3855
#endif
3871
#endif
3856
    fprintf(fp, "end misc\n\n");
3872
    fprintf(fp, "end misc\n\n");
(-)src/windows.c (-3 / +1 lines)
Lines 473-481 Link Here
473
        XClearWindow(Xdisplay, TermWin.vt);
473
        XClearWindow(Xdisplay, TermWin.vt);
474
    }
474
    }
475
    XDefineCursor(Xdisplay, TermWin.vt, TermWin_cursor);
475
    XDefineCursor(Xdisplay, TermWin.vt, TermWin_cursor);
476
    TermWin.mask = (KeyPressMask | EnterWindowMask | LeaveWindowMask | ExposureMask
476
    TermWin.mask = (EnterWindowMask | LeaveWindowMask | ExposureMask | ButtonPressMask | ButtonReleaseMask | Button1MotionMask | Button2MotionMask | Button3MotionMask);
477
                    | ButtonPressMask | ButtonReleaseMask | Button1MotionMask
478
                    | Button2MotionMask | Button3MotionMask);
479
    XSelectInput(Xdisplay, TermWin.vt, TermWin.mask);
477
    XSelectInput(Xdisplay, TermWin.vt, TermWin.mask);
480
478
481
    /* If the user wants a specific desktop, tell the WM that */
479
    /* If the user wants a specific desktop, tell the WM that */

Return to bug 91878