0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

updated for version 7.0073

This commit is contained in:
Bram Moolenaar 2005-05-19 21:08:39 +00:00
parent 051b782fa0
commit 555b280f28
23 changed files with 331 additions and 208 deletions

View File

@ -1,4 +1,4 @@
*todo.txt* For Vim version 7.0aa. Last change: 2005 May 18 *todo.txt* For Vim version 7.0aa. Last change: 2005 May 19
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -88,10 +88,6 @@ Win32: Balloon text can't contain line break.
setline() should accept a List. setline() should accept a List.
smsg() uses IObuff. The checks for the result not fitting are complicated,
find another solution. Add vsnprintf() and snprintf() functions?
http://www.ijs.si/software/snprintf/
Add ":[range]sort" command. Sort on specified field, using a regexp? Remove Add ":[range]sort" command. Sort on specified field, using a regexp? Remove
duplicates? duplicates?

View File

@ -1,4 +1,4 @@
*version7.txt* For Vim version 7.0aa. Last change: 2005 May 18 *version7.txt* For Vim version 7.0aa. Last change: 2005 May 19
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -1068,4 +1068,8 @@ prompt the argument index was advanced anyway.
When "~" is in 'iskeyword' the "gd" doesn't work, it's used for the previous When "~" is in 'iskeyword' the "gd" doesn't work, it's used for the previous
substitute pattern. Put "\V" in the pattern to avoid that. substitute pattern. Put "\V" in the pattern to avoid that.
Use of sprintf() sometimes didn't check properly for buffer overflow. Also
when using smsg(). Included code for snprintf() to avoid having to do size
checks where invoking them
vim:tw=78:ts=8:ft=help:norl: vim:tw=78:ts=8:ft=help:norl:

View File

@ -1,7 +1,8 @@
" Vim indent file " Vim indent file
" Language: Lisp " Language: Lisp
" Maintainer: noone " Maintainer: Sergey Khorev <sergey.khorev@gmail.com>
" Last Change: 2005 Mar 28 " URL: http://iamphet.nm.ru/vim
" Last Change: 2005 May 19
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.
if exists("b:did_indent") if exists("b:did_indent")
@ -9,7 +10,6 @@ if exists("b:did_indent")
endif endif
let b:did_indent = 1 let b:did_indent = 1
" Autoindent is the best we can do. setlocal ai nosi
setlocal ai
let b:undo_indent = "setl ai<" let b:undo_indent = "setl ai< si<"

View File

@ -14,11 +14,7 @@
" I also recommend setting the default 'Comment' hilighting to something " I also recommend setting the default 'Comment' hilighting to something
" other than the color used for 'Function', since both are plentiful in " other than the color used for 'Function', since both are plentiful in
" most mathematica files, and they are often the same color (when using " most mathematica files, and they are often the same color (when using
" background=dark). I use " background=dark).
"
" hi Comment ctermfg=darkcyan
"
" darkgreen also looks good on my terminal.
" "
" Credits: " Credits:
" o Original Mathematica syntax version written by " o Original Mathematica syntax version written by
@ -45,16 +41,6 @@ syntax cluster mmaCommentStrings contains=mmaLooseQuote,mmaCommentString,mmaUnic
syntax cluster mmaStrings contains=@mmaCommentStrings,mmaString syntax cluster mmaStrings contains=@mmaCommentStrings,mmaString
syntax cluster mmaTop contains=mmaOperator,mmaGenericFunction,mmaPureFunction,mmaVariable syntax cluster mmaTop contains=mmaOperator,mmaGenericFunction,mmaPureFunction,mmaVariable
" Variables:
" Dollar sign variables
syntax match mmaVariable "$\a\+\d*"
" Preceding contexts
syntax match mmaVariable "`\=\a\+\d*`"
" Numbers:
syntax match mmaNumber "\<\%(\d\+\.\=\d*\|\d*\.\=\d\+\)\>"
syntax match mmaNumber "`\d\+\>"
" Predefined Constants: " Predefined Constants:
" to list all predefined Symbols would be too insane... " to list all predefined Symbols would be too insane...
" it's probably smarter to define a select few, and get the rest from " it's probably smarter to define a select few, and get the rest from
@ -89,41 +75,24 @@ syntax keyword mmaVariable Black Blue Brown Cyan Gray Green Magenta Orange Pink
" function attributes " function attributes
syntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub syntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub
" Strings: " Comment Sections:
" "string" " this:
" 'string' is not accepted (until literal strings are supported!) " :that:
syntax region mmaString start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"+ end=+"+ syntax match mmaItem "\%(^[( |*\t]*\)\@<=\%(:\+\|\a\)[a-zA-Z0-9 ]\+:" contained contains=@mmaNotes
syntax region mmaCommentString oneline start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"+ end=+"+ contained
" Function Usage Messages:
" "SymbolName::item"
syntax match mmaMessage "$\=\a\+\d*::\a\+\d*"
" Pure Functions:
syntax match mmaPureFunction "#\%(#\|\d\+\)\="
syntax match mmaPureFunction "&"
" Named Functions:
" Since everything is pretty much a function, get this straight
" from context
syntax match mmaGenericFunction "[A-Za-z0-9`]\+\s*\%([@[]\|/:\|/\=/@\)\@=" contains=mmaOperator
syntax match mmaGenericFunction "\~\s*[^~]\+\s*\~"hs=s+1,he=e-1 contains=mmaOperator,mmaBoring
syntax match mmaGenericFunction "//\s*[A-Za-z0-9`]\+"hs=s+2 contains=mmaOperator
" Comment Keywords: " Comment Keywords:
syntax keyword mmaTodo TODO NOTE HEY contained syntax keyword mmaTodo TODO NOTE HEY contained
syntax match mmaTodo "X\{3,}" contained syntax match mmaTodo "X\{3,}" contained
syntax keyword mmaFixme FIX[ME] FIXTHIS BROKEN contained syntax keyword mmaFixme FIX[ME] FIXTHIS BROKEN contained
" yay pirates... " yay pirates...
syntax match mmaFixme "\%(Y\=A\+R\+G\+\|GRR\+\|CR\+A\+P\+\)\%(!\+\)\=" contained syntax match mmaFixme "\%(Y\=A\+R\+G\+\|GRR\+\|CR\+A\+P\+\)\%(!\+\)\=" contained
syntax match mmaemPHAsis "\(_\+\)[ a-zA-Z0-9]\+\1" contained
" Comment Sections: " EmPHAsis:
" this: " this unnecessary, but whatever :)
" :that: syntax match mmaemPHAsis "\%(^\|\s\)\([_/]\)[a-zA-Z0-9]\+\%(\s\+[a-zA-Z0-9]\+\)*\1\%(\s\|$\)" contained contains=mmaemPHAsis
syntax match mmaItem "\%(^[( |*\t]*\)\@<=\%(:\+\|\a\)[a-zA-Z0-9 ]\+:" contained contains=@mmaNotes syntax match mmaemPHAsis "\%(^\|\s\)(\@<!\*[a-zA-Z0-9]\+\%(\s\+[a-zA-Z0-9]\+\)*)\@!\*\%(\s\|$\)" contained contains=mmaemPHAsis
" Actual Mathematica Comments: " Regular Comments:
" (* *) " (* *)
" allow nesting (* (* *) *) even though the frontend " allow nesting (* (* *) *) even though the frontend
" won't always like it. " won't always like it.
@ -141,6 +110,19 @@ syntax match mmaComment "(\*\*\+)"
" catch preceding * " catch preceding *
syntax match mmaCommentStar "^\s*\*\+" contained syntax match mmaCommentStar "^\s*\*\+" contained
" Variables:
" Dollar sign variables
syntax match mmaVariable "$\a\+\d*"
" Preceding contexts
syntax match mmaVariable "`\=\a\+\d*`"
" Strings:
" "string"
" 'string' is not accepted (until literal strings are supported!)
syntax region mmaString start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"+ end=+"+
syntax region mmaCommentString oneline start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"+ end=+"+ contained
" Patterns: " Patterns:
" Each pattern marker below can be Blank[] (_), BlankSequence[] (__) " Each pattern marker below can be Blank[] (_), BlankSequence[] (__)
" or BlankNullSequence[] (___). Most examples below can also be " or BlankNullSequence[] (___). Most examples below can also be
@ -197,7 +179,25 @@ syntax match mmaOperator "[*+=^.:?-]"
syntax match mmaOperator "\%(\~\~\=\)" syntax match mmaOperator "\%(\~\~\=\)"
syntax match mmaOperator "\%(=\{2,3}\|=\=!=\|||\=\|&&\|!\)" contains=ALLBUT,mmaPureFunction syntax match mmaOperator "\%(=\{2,3}\|=\=!=\|||\=\|&&\|!\)" contains=ALLBUT,mmaPureFunction
" Function Usage Messages:
" "SymbolName::item"
syntax match mmaMessage "$\=\a\+\d*::\a\+\d*"
" Pure Functions:
syntax match mmaPureFunction "#\%(#\|\d\+\)\="
syntax match mmaPureFunction "&"
" Named Functions:
" Since everything is pretty much a function, get this straight
" from context
syntax match mmaGenericFunction "[A-Za-z0-9`]\+\s*\%([@[]\|/:\|/\=/@\)\@=" contains=mmaOperator
syntax match mmaGenericFunction "\~\s*[^~]\+\s*\~"hs=s+1,he=e-1 contains=mmaOperator,mmaBoring
syntax match mmaGenericFunction "//\s*[A-Za-z0-9`]\+"hs=s+2 contains=mmaOperator
" Numbers:
syntax match mmaNumber "\<\%(\d\+\.\=\d*\|\d*\.\=\d\+\)\>"
syntax match mmaNumber "`\d\+\%(\d\@!\.\|\>\)"
" Special Characters: " Special Characters:
" \[Name] named character " \[Name] named character
" \ooo octal " \ooo octal
@ -243,10 +243,10 @@ if version >= 508 || !exists("did_mma_syn_inits")
HiLink mmaFunctionComment Comment HiLink mmaFunctionComment Comment
HiLink mmaLooseQuote Comment HiLink mmaLooseQuote Comment
HiLink mmaGenericFunction Function HiLink mmaGenericFunction Function
HiLink mmaVariable Identifier
HiLink mmaOperator Operator HiLink mmaOperator Operator
HiLink mmaPatternOp Operator HiLink mmaPatternOp Operator
HiLink mmaPureFunction Operator HiLink mmaPureFunction Operator
HiLink mmaVariable Identifier
HiLink mmaString String HiLink mmaString String
HiLink mmaCommentString String HiLink mmaCommentString String
HiLink mmaUnicode String HiLink mmaUnicode String

View File

@ -2459,7 +2459,7 @@ ex_loadkeymap(eap)
*/ */
for (i = 0; i < curbuf->b_kmap_ga.ga_len; ++i) for (i = 0; i < curbuf->b_kmap_ga.ga_len; ++i)
{ {
sprintf((char *)buf, "<buffer> %s %s", vim_snprintf((char *)buf, sizeof(buf), "<buffer> %s %s",
((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].from, ((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].from,
((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].to); ((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].to);
(void)do_map(2, buf, LANGMAP, FALSE); (void)do_map(2, buf, LANGMAP, FALSE);
@ -2492,8 +2492,8 @@ keymap_unload()
/* clear the ":lmap"s */ /* clear the ":lmap"s */
for (i = 0; i < curbuf->b_kmap_ga.ga_len; ++i) for (i = 0; i < curbuf->b_kmap_ga.ga_len; ++i)
{ {
sprintf((char *)buf, "<buffer> %s", vim_snprintf((char *)buf, sizeof(buf), "<buffer> %s",
((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].from); ((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].from);
(void)do_map(1, buf, LANGMAP, FALSE); (void)do_map(1, buf, LANGMAP, FALSE);
} }

View File

@ -2218,8 +2218,8 @@ ins_compl_dictionaries(dict, pat, dir, flags, thesaurus)
fp = mch_fopen((char *)files[i], "r"); /* open dictionary file */ fp = mch_fopen((char *)files[i], "r"); /* open dictionary file */
if (flags != DICT_EXACT) if (flags != DICT_EXACT)
{ {
sprintf((char*)IObuff, _("Scanning dictionary: %s"), vim_snprintf((char *)IObuff, IOSIZE,
(char *)files[i]); _("Scanning dictionary: %s"), (char *)files[i]);
msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
} }
@ -2827,7 +2827,7 @@ ins_compl_get_exp(ini, dir)
dict = ins_buf->b_fname; dict = ins_buf->b_fname;
dict_f = DICT_EXACT; dict_f = DICT_EXACT;
} }
sprintf((char *)IObuff, _("Scanning: %s"), vim_snprintf((char *)IObuff, IOSIZE, _("Scanning: %s"),
ins_buf->b_fname == NULL ins_buf->b_fname == NULL
? buf_spname(ins_buf) ? buf_spname(ins_buf)
: ins_buf->b_sfname == NULL : ins_buf->b_sfname == NULL

View File

@ -11414,7 +11414,7 @@ remote_common(argvars, rettv, expr)
if (argvars[2].v_type != VAR_UNKNOWN) if (argvars[2].v_type != VAR_UNKNOWN)
{ {
dictitem_T v; dictitem_T v;
char_u str[30]; char_u str[30];
sprintf((char *)str, "0x%x", (unsigned int)w); sprintf((char *)str, "0x%x", (unsigned int)w);
v.di_tv.v_type = VAR_STRING; v.di_tv.v_type = VAR_STRING;
@ -16867,7 +16867,7 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
{ {
++no_wait_return; ++no_wait_return;
msg_scroll = TRUE; /* always scroll up, don't overwrite */ msg_scroll = TRUE; /* always scroll up, don't overwrite */
msg_str((char_u *)_("calling %s"), sourcing_name); smsg((char_u *)_("calling %s"), sourcing_name);
if (p_verbose >= 14) if (p_verbose >= 14)
{ {
char_u buf[MSG_BUF_LEN]; char_u buf[MSG_BUF_LEN];
@ -16950,30 +16950,26 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
/* when being verbose, mention the return value */ /* when being verbose, mention the return value */
if (p_verbose >= 12) if (p_verbose >= 12)
{ {
char_u *sn;
++no_wait_return; ++no_wait_return;
msg_scroll = TRUE; /* always scroll up, don't overwrite */ msg_scroll = TRUE; /* always scroll up, don't overwrite */
/* Make sure the output fits in IObuff. */
sn = sourcing_name;
if (STRLEN(sourcing_name) > IOSIZE / 2 - 50)
sn = sourcing_name + STRLEN(sourcing_name) - (IOSIZE / 2 - 50);
if (aborting()) if (aborting())
smsg((char_u *)_("%s aborted"), sn); smsg((char_u *)_("%s aborted"), sourcing_name);
else if (fc.rettv->v_type == VAR_NUMBER) else if (fc.rettv->v_type == VAR_NUMBER)
smsg((char_u *)_("%s returning #%ld"), sn, smsg((char_u *)_("%s returning #%ld"), sourcing_name,
(long)fc.rettv->vval.v_number); (long)fc.rettv->vval.v_number);
else else
{ {
char_u buf[MSG_BUF_LEN]; char_u buf[MSG_BUF_LEN];
char_u numbuf[NUMBUFLEN]; char_u numbuf[NUMBUFLEN];
char_u *tofree; char_u *tofree;
/* The value may be very long. Skip the middle part, so that we
* have some idea how it starts and ends. smsg() would always
* truncate it at the end. */
trunc_string(tv2string(fc.rettv, &tofree, numbuf), trunc_string(tv2string(fc.rettv, &tofree, numbuf),
buf, MSG_BUF_CLEN); buf, MSG_BUF_CLEN);
smsg((char_u *)_("%s returning %s"), sn, buf); smsg((char_u *)_("%s returning %s"), sourcing_name, buf);
vim_free(tofree); vim_free(tofree);
} }
msg_puts((char_u *)"\n"); /* don't overwrite this either */ msg_puts((char_u *)"\n"); /* don't overwrite this either */
@ -16994,7 +16990,7 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
{ {
++no_wait_return; ++no_wait_return;
msg_scroll = TRUE; /* always scroll up, don't overwrite */ msg_scroll = TRUE; /* always scroll up, don't overwrite */
msg_str((char_u *)_("continuing in %s"), sourcing_name); smsg((char_u *)_("continuing in %s"), sourcing_name);
msg_puts((char_u *)"\n"); /* don't overwrite this either */ msg_puts((char_u *)"\n"); /* don't overwrite this either */
cmdline_row = msg_row; cmdline_row = msg_row;
--no_wait_return; --no_wait_return;

View File

@ -89,8 +89,9 @@ do_ascii(eap)
else else
#endif #endif
buf2[0] = NUL; buf2[0] = NUL;
sprintf((char *)IObuff, _("<%s>%s%s %d, Hex %02x, Octal %03o"), vim_snprintf((char *)IObuff, IOSIZE,
transchar(c), buf1, buf2, c, c, c); _("<%s>%s%s %d, Hex %02x, Octal %03o"),
transchar(c), buf1, buf2, c, c, c);
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
c = c1; c = c1;
c1 = c2; c1 = c2;
@ -113,8 +114,8 @@ do_ascii(eap)
#endif #endif
) )
IObuff[len++] = ' '; /* draw composing char on top of a space */ IObuff[len++] = ' '; /* draw composing char on top of a space */
IObuff[len + (*mb_char2bytes)(c, IObuff + len)] = NUL; len += (*mb_char2bytes)(c, IObuff + len);
sprintf((char *)IObuff + STRLEN(IObuff), vim_snprintf((char *)IObuff + len, IOSIZE - len,
c < 0x10000 ? _("> %d, Hex %04x, Octal %o") c < 0x10000 ? _("> %d, Hex %04x, Octal %o")
: _("> %d, Hex %08x, Octal %o"), c, c, c); : _("> %d, Hex %08x, Octal %o"), c, c, c);
c = c1; c = c1;
@ -974,8 +975,8 @@ do_filter(line1, line2, eap, cmd, do_in, do_out)
{ {
if (do_in) if (do_in)
{ {
sprintf((char *)msg_buf, _("%ld lines filtered"), vim_snprintf((char *)msg_buf, sizeof(msg_buf),
(long)linecount); _("%ld lines filtered"), (long)linecount);
if (msg(msg_buf) && !msg_scroll) if (msg(msg_buf) && !msg_scroll)
{ {
/* save message to display it after redraw */ /* save message to display it after redraw */
@ -1337,7 +1338,8 @@ viminfo_error(errnum, message, line)
char *message; char *message;
char_u *line; char_u *line;
{ {
sprintf((char *)IObuff, _("%sviminfo: %s in line: "), errnum, message); vim_snprintf((char *)IObuff, IOSIZE, _("%sviminfo: %s in line: "),
errnum, message);
STRNCAT(IObuff, line, IOSIZE - STRLEN(IObuff)); STRNCAT(IObuff, line, IOSIZE - STRLEN(IObuff));
if (IObuff[STRLEN(IObuff) - 1] == '\n') if (IObuff[STRLEN(IObuff) - 1] == '\n')
IObuff[STRLEN(IObuff) - 1] = NUL; IObuff[STRLEN(IObuff) - 1] = NUL;
@ -1373,17 +1375,11 @@ read_viminfo(file, want_info, want_marks, forceit)
fp = mch_fopen((char *)fname, READBIN); fp = mch_fopen((char *)fname, READBIN);
if (p_verbose > 0) if (p_verbose > 0)
{ smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"),
char_u *s; fname,
want_info ? _(" info") : "",
s = fname; want_marks ? _(" marks") : "",
if (STRLEN(fname) > IOSIZE - 100) fp == NULL ? _(" FAILED") : "");
s = fname + STRLEN(fname) - (IOSIZE - 100);
smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"), s,
want_info ? _(" info") : "",
want_marks ? _(" marks") : "",
fp == NULL ? _(" FAILED") : "");
}
vim_free(fname); vim_free(fname);
if (fp == NULL) if (fp == NULL)
@ -1607,7 +1603,7 @@ write_viminfo(file, forceit)
} }
if (p_verbose > 0) if (p_verbose > 0)
msg_str((char_u *)_("Writing viminfo file \"%s\""), fname); smsg((char_u *)_("Writing viminfo file \"%s\""), fname);
viminfo_errcnt = 0; viminfo_errcnt = 0;
do_viminfo(fp_in, fp_out, !forceit, !forceit, FALSE); do_viminfo(fp_in, fp_out, !forceit, !forceit, FALSE);
@ -4529,6 +4525,8 @@ outofmem:
do_sub_msg(count_only) do_sub_msg(count_only)
int count_only; /* used 'n' flag for ":s" */ int count_only; /* used 'n' flag for ":s" */
{ {
int len = 0;
/* /*
* Only report substitutions when: * Only report substitutions when:
* - more than 'report' substitutions * - more than 'report' substitutions
@ -4540,20 +4538,24 @@ do_sub_msg(count_only)
&& messaging()) && messaging())
{ {
if (got_int) if (got_int)
{
STRCPY(msg_buf, _("(Interrupted) ")); STRCPY(msg_buf, _("(Interrupted) "));
else len = STRLEN(msg_buf);
msg_buf[0] = NUL; }
if (sub_nsubs == 1) if (sub_nsubs == 1)
STRCAT(msg_buf, count_only ? _("1 match") : _("1 substitution")); vim_snprintf((char *)msg_buf + len, sizeof(msg_buf) - len,
"%s", count_only ? _("1 match") : _("1 substitution"));
else else
sprintf((char *)msg_buf + STRLEN(msg_buf), vim_snprintf((char *)msg_buf + len, sizeof(msg_buf) - len,
count_only ? _("%ld matches") : _("%ld substitutions"), count_only ? _("%ld matches") : _("%ld substitutions"),
sub_nsubs); sub_nsubs);
len = STRLEN(msg_buf);
if (sub_nlines == 1) if (sub_nlines == 1)
STRCAT(msg_buf, _(" on 1 line")); vim_snprintf((char *)msg_buf + len, sizeof(msg_buf) - len,
"%s", _(" on 1 line"));
else else
sprintf((char *)msg_buf + STRLEN(msg_buf), _(" on %ld lines"), vim_snprintf((char *)msg_buf + len, sizeof(msg_buf) - len,
(long)sub_nlines); _(" on %ld lines"), (long)sub_nlines);
if (msg(msg_buf)) if (msg(msg_buf))
{ {
/* save message to display it after redraw */ /* save message to display it after redraw */
@ -4686,9 +4688,9 @@ ex_global(eap)
else if (ndone == 0) else if (ndone == 0)
{ {
if (type == 'v') if (type == 'v')
msg_str((char_u *)_("Pattern found in every line: %s"), pat); smsg((char_u *)_("Pattern found in every line: %s"), pat);
else else
msg_str((char_u *)_(e_patnotf2), pat); smsg((char_u *)_(e_patnotf2), pat);
} }
else else
global_exe(cmd); global_exe(cmd);
@ -4955,8 +4957,7 @@ ex_help(eap)
*/ */
if ((helpfd = mch_fopen((char *)p_hf, READBIN)) == NULL) if ((helpfd = mch_fopen((char *)p_hf, READBIN)) == NULL)
{ {
msg_str((char_u *)_("Sorry, help file \"%s\" not found"), smsg((char_u *)_("Sorry, help file \"%s\" not found"), p_hf);
p_hf);
goto erret; goto erret;
} }
fclose(helpfd); fclose(helpfd);
@ -5660,7 +5661,7 @@ helptags_one(dir, ext, tagfname)
got_int = TRUE; got_int = TRUE;
else else
{ {
s = alloc(30); s = alloc(18 + STRLEN(tagfname));
if (s == NULL) if (s == NULL)
got_int = TRUE; got_int = TRUE;
else else
@ -5793,7 +5794,7 @@ helptags_one(dir, ext, tagfname)
if (*p2 == '\t') if (*p2 == '\t')
{ {
*p2 = NUL; *p2 = NUL;
sprintf((char *)NameBuff, vim_snprintf((char *)NameBuff, MAXPATHL,
_("E154: Duplicate tag \"%s\" in file %s/%s"), _("E154: Duplicate tag \"%s\" in file %s/%s"),
((char_u **)ga.ga_data)[i], dir, p2 + 1); ((char_u **)ga.ga_data)[i], dir, p2 + 1);
EMSG(NameBuff); EMSG(NameBuff);
@ -6307,7 +6308,7 @@ sign_list_defined(sp)
{ {
char_u *p; char_u *p;
msg_str((char_u *)"sign %s", sp->sn_name); smsg((char_u *)"sign %s", sp->sn_name);
if (sp->sn_icon != NULL) if (sp->sn_icon != NULL)
{ {
MSG_PUTS(" icon="); MSG_PUTS(" icon=");

View File

@ -532,7 +532,7 @@ EX(CMD_mkview, "mkview", ex_mkrc,
EX(CMD_mode, "mode", ex_mode, EX(CMD_mode, "mode", ex_mode,
WORD1|TRLBAR|CMDWIN), WORD1|TRLBAR|CMDWIN),
EX(CMD_mzscheme, "mzscheme", ex_mzscheme, EX(CMD_mzscheme, "mzscheme", ex_mzscheme,
RANGE|EXTRA|DFLALL|NEEDARG|CMDWIN), RANGE|EXTRA|DFLALL|NEEDARG|CMDWIN|SBOXOK),
EX(CMD_mzfile, "mzfile", ex_mzfile, EX(CMD_mzfile, "mzfile", ex_mzfile,
RANGE|FILE1|NEEDARG|CMDWIN), RANGE|FILE1|NEEDARG|CMDWIN),
EX(CMD_next, "next", ex_next, EX(CMD_next, "next", ex_next,

View File

@ -141,16 +141,9 @@ do_debug(cmd)
if (sourcing_name != NULL) if (sourcing_name != NULL)
msg(sourcing_name); msg(sourcing_name);
if (sourcing_lnum != 0) if (sourcing_lnum != 0)
{ smsg((char_u *)_("line %ld: %s"), (long)sourcing_lnum, cmd);
char_u buf[IOSIZE];
/* Truncate the command, the whole must fit in IObuff. */
STRNCPY(buf, cmd, IOSIZE - 50);
buf[IOSIZE - 50] = NUL;
smsg((char_u *)_("line %ld: %s"), (long)sourcing_lnum, buf);
}
else else
msg_str((char_u *)_("cmd: %s"), cmd); smsg((char_u *)_("cmd: %s"), cmd);
/* /*
* Repeat getting a command and executing it. * Repeat getting a command and executing it.
@ -342,7 +335,8 @@ dbg_check_breakpoint(eap)
p = (char_u *)"<SNR>"; p = (char_u *)"<SNR>";
else else
p = (char_u *)""; p = (char_u *)"";
smsg((char_u *)_("Breakpoint in \"%s%s\" line %ld"), p, smsg((char_u *)_("Breakpoint in \"%s%s\" line %ld"),
p,
debug_breakpoint_name + (*p == NUL ? 0 : 3), debug_breakpoint_name + (*p == NUL ? 0 : 3),
(long)debug_breakpoint_lnum); (long)debug_breakpoint_lnum);
debug_breakpoint_name = NULL; debug_breakpoint_name = NULL;
@ -2473,13 +2467,8 @@ do_in_runtimepath(name, all, callback, cookie)
if (buf != NULL && rtp_copy != NULL) if (buf != NULL && rtp_copy != NULL)
{ {
if (p_verbose > 1) if (p_verbose > 1)
{ smsg((char_u *)_("Searching for \"%s\" in \"%s\""),
if (STRLEN(name) + STRLEN(p_rtp) > IOSIZE - 100)
MSG(_("Searching for a long name in 'runtimepath'"));
else
smsg((char_u *)_("Searching for \"%s\" in \"%s\""),
(char *)name, (char *)p_rtp); (char *)name, (char *)p_rtp);
}
/* Loop over all entries in 'runtimepath'. */ /* Loop over all entries in 'runtimepath'. */
rtp = rtp_copy; rtp = rtp_copy;
@ -2501,7 +2490,7 @@ do_in_runtimepath(name, all, callback, cookie)
"\t "); "\t ");
if (p_verbose > 2) if (p_verbose > 2)
msg_str((char_u *)_("Searching for \"%s\""), buf); smsg((char_u *)_("Searching for \"%s\""), buf);
/* Expand wildcards, invoke the callback for each match. */ /* Expand wildcards, invoke the callback for each match. */
if (gen_expand_wildcards(1, &buf, &num_files, &files, if (gen_expand_wildcards(1, &buf, &num_files, &files,
@ -2523,7 +2512,7 @@ do_in_runtimepath(name, all, callback, cookie)
vim_free(buf); vim_free(buf);
vim_free(rtp_copy); vim_free(rtp_copy);
if (p_verbose > 0 && !did_one) if (p_verbose > 0 && !did_one)
msg_str((char_u *)_("not found in 'runtimepath': \"%s\""), name); smsg((char_u *)_("not found in 'runtimepath': \"%s\""), name);
#ifdef AMIGA #ifdef AMIGA
proc->pr_WindowPtr = save_winptr; proc->pr_WindowPtr = save_winptr;
@ -2733,7 +2722,7 @@ do_source(fname, check_other, is_vimrc)
#endif #endif
if (mch_isdir(fname_exp)) if (mch_isdir(fname_exp))
{ {
msg_str((char_u *)_("Cannot source a directory: \"%s\""), fname); smsg((char_u *)_("Cannot source a directory: \"%s\""), fname);
goto theend; goto theend;
} }
@ -2771,10 +2760,10 @@ do_source(fname, check_other, is_vimrc)
if (p_verbose > 0) if (p_verbose > 0)
{ {
if (sourcing_name == NULL) if (sourcing_name == NULL)
msg_str((char_u *)_("could not source \"%s\""), fname); smsg((char_u *)_("could not source \"%s\""), fname);
else else
smsg((char_u *)_("line %ld: could not source \"%s\""), smsg((char_u *)_("line %ld: could not source \"%s\""),
sourcing_lnum, fname); sourcing_lnum, fname);
} }
goto theend; goto theend;
} }
@ -2787,10 +2776,10 @@ do_source(fname, check_other, is_vimrc)
if (p_verbose > 1) if (p_verbose > 1)
{ {
if (sourcing_name == NULL) if (sourcing_name == NULL)
msg_str((char_u *)_("sourcing \"%s\""), fname); smsg((char_u *)_("sourcing \"%s\""), fname);
else else
smsg((char_u *)_("line %ld: sourcing \"%s\""), smsg((char_u *)_("line %ld: sourcing \"%s\""),
sourcing_lnum, fname); sourcing_lnum, fname);
} }
if (is_vimrc) if (is_vimrc)
vimrc_found(); vimrc_found();
@ -2972,16 +2961,12 @@ do_source(fname, check_other, is_vimrc)
sourcing_lnum = save_sourcing_lnum; sourcing_lnum = save_sourcing_lnum;
if (p_verbose > 1) if (p_verbose > 1)
{ {
msg_str((char_u *)_("finished sourcing %s"), fname); smsg((char_u *)_("finished sourcing %s"), fname);
if (sourcing_name != NULL) if (sourcing_name != NULL)
msg_str((char_u *)_("continuing in %s"), sourcing_name); smsg((char_u *)_("continuing in %s"), sourcing_name);
} }
#ifdef STARTUPTIME #ifdef STARTUPTIME
# ifdef HAVE_SNPRINTF vim_snprintf(IObuff, IOSIZE, "sourcing %s", fname);
snprintf(IObuff, IOSIZE, "sourcing %s", fname);
# else
sprintf(IObuff, "sourcing %s", fname);
# endif
time_msg(IObuff, &tv_start); time_msg(IObuff, &tv_start);
time_pop(&tv_rel); time_pop(&tv_rel);
#endif #endif
@ -4263,14 +4248,15 @@ ex_hardcopy(eap)
page_prtpos = prtpos; page_prtpos = prtpos;
} }
sprintf((char *)IObuff, _("Printed: %s"), settings.jobname); vim_snprintf((char *)IObuff, IOSIZE, _("Printed: %s"),
settings.jobname);
prt_message(IObuff); prt_message(IObuff);
} }
print_fail: print_fail:
if (got_int || settings.user_abort) if (got_int || settings.user_abort)
{ {
sprintf((char *)IObuff, _("Printing aborted")); sprintf((char *)IObuff, "%s", _("Printing aborted"));
prt_message(IObuff); prt_message(IObuff);
} }
mch_print_end(&settings); mch_print_end(&settings);
@ -4954,7 +4940,7 @@ prt_write_file_len(buffer, bytes)
prt_write_string(s) prt_write_string(s)
char *s; char *s;
{ {
sprintf((char *)prt_line_buffer, "%s", s); vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer), "%s", s);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
} }
@ -4990,8 +4976,8 @@ prt_def_font(new_name, encoding, height, font)
int height; int height;
char *font; char *font;
{ {
sprintf((char *)prt_line_buffer, "/_%s /VIM-%s /%s ref\n", vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
new_name, encoding, font); "/_%s /VIM-%s /%s ref\n", new_name, encoding, font);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
if (prt_out_mbyte) if (prt_out_mbyte)
@ -4999,8 +4985,8 @@ prt_def_font(new_name, encoding, height, font)
new_name, height, 500./prt_ps_courier_font.wx, new_name); new_name, height, 500./prt_ps_courier_font.wx, new_name);
else else
#endif #endif
sprintf((char *)prt_line_buffer, "/%s %d /_%s ffs\n", vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
new_name, height, new_name); "/%s %d /_%s ffs\n", new_name, height, new_name);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
} }
@ -5014,11 +5000,11 @@ prt_def_cidfont(new_name, height, cidfont)
int height; int height;
char *cidfont; char *cidfont;
{ {
sprintf((char *)prt_line_buffer, "/_%s /%s[/%s] vim_composefont\n", vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
new_name, prt_cmap, cidfont); "/_%s /%s[/%s] vim_composefont\n", new_name, prt_cmap, cidfont);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
sprintf((char *)prt_line_buffer, "/%s %d /_%s ffs\n", new_name, height, vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
new_name); "/%s %d /_%s ffs\n", new_name, height, new_name);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
} }
@ -5030,7 +5016,8 @@ prt_dup_cidfont(original_name, new_name)
char *original_name; char *original_name;
char *new_name; char *new_name;
{ {
sprintf((char *)prt_line_buffer, "/%s %s d\n", new_name, original_name); vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
"/%s %s d\n", new_name, original_name);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
} }
#endif #endif
@ -5105,7 +5092,8 @@ prt_def_var(name, value, prec)
double value; double value;
int prec; int prec;
{ {
sprintf((char *)prt_line_buffer, "/%s ", name); vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
"/%s ", name);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
prt_write_real(value, prec); prt_write_real(value, prec);
sprintf((char *)prt_line_buffer, "d\n"); sprintf((char *)prt_line_buffer, "d\n");
@ -5532,7 +5520,8 @@ prt_dsc_start()
prt_dsc_noarg(comment) prt_dsc_noarg(comment)
char *comment; char *comment;
{ {
sprintf((char *)prt_line_buffer, "%%%%%s\n", comment); vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
"%%%%%s\n", comment);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
} }
@ -5541,7 +5530,8 @@ prt_dsc_textline(comment, text)
char *comment; char *comment;
char *text; char *text;
{ {
sprintf((char *)prt_line_buffer, "%%%%%s: %s\n", comment, text); vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
"%%%%%s: %s\n", comment, text);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
} }
@ -5551,7 +5541,8 @@ prt_dsc_text(comment, text)
char *text; char *text;
{ {
/* TODO - should scan 'text' for any chars needing escaping! */ /* TODO - should scan 'text' for any chars needing escaping! */
sprintf((char *)prt_line_buffer, "%%%%%s: (%s)\n", comment, text); vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
"%%%%%s: (%s)\n", comment, text);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
} }
@ -5565,7 +5556,8 @@ prt_dsc_ints(comment, count, ints)
{ {
int i; int i;
sprintf((char *)prt_line_buffer, "%%%%%s:", comment); vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
"%%%%%s:", comment);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
for (i = 0; i < count; i++) for (i = 0; i < count; i++)
@ -5584,12 +5576,15 @@ prt_dsc_resources(comment, type, string)
char *string; char *string;
{ {
if (comment != NULL) if (comment != NULL)
sprintf((char *)prt_line_buffer, "%%%%%s: %s", comment, type); vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
"%%%%%s: %s", comment, type);
else else
sprintf((char *)prt_line_buffer, "%%%%+ %s", type); vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
"%%%%+ %s", type);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
sprintf((char *)prt_line_buffer, " %s\n", string); vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
" %s\n", string);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
} }
@ -5654,7 +5649,8 @@ prt_dsc_docmedia(paper_name, width, height, weight, colour, type)
char *colour; char *colour;
char *type; char *type;
{ {
sprintf((char *)prt_line_buffer, "%%%%DocumentMedia: %s ", paper_name); vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
"%%%%DocumentMedia: %s ", paper_name);
prt_write_file(prt_line_buffer); prt_write_file(prt_line_buffer);
prt_write_real(width, 2); prt_write_real(width, 2);
prt_write_real(height, 2); prt_write_real(height, 2);

View File

@ -93,6 +93,11 @@ typedef struct
* Utility functions for the vim/mzscheme interface * Utility functions for the vim/mzscheme interface
*======================================================================== *========================================================================
*/ */
#ifdef HAVE_SANDBOX
static Scheme_Object *sandbox_file_guard(int, Scheme_Object **);
static Scheme_Object *sandbox_network_guard(int, Scheme_Object **);
static void sandbox_check();
#endif
/* Buffer-related commands */ /* Buffer-related commands */
static Scheme_Object *buffer_new(buf_T *buf); static Scheme_Object *buffer_new(buf_T *buf);
static Scheme_Object *get_buffer_by_name(void *, int, Scheme_Object **); static Scheme_Object *get_buffer_by_name(void *, int, Scheme_Object **);
@ -205,11 +210,15 @@ static void (*dll_scheme_add_global_symbol)(Scheme_Object *name,
static Scheme_Object *(*dll_scheme_apply)(Scheme_Object *rator, int num_rands, static Scheme_Object *(*dll_scheme_apply)(Scheme_Object *rator, int num_rands,
Scheme_Object **rands); Scheme_Object **rands);
static Scheme_Object *(*dll_scheme_builtin_value)(const char *name); static Scheme_Object *(*dll_scheme_builtin_value)(const char *name);
# if MZSCHEME_VERSION_MAJOR >= 299
static Scheme_Object *(*dll_scheme_byte_string_to_char_string)(Scheme_Object *s);
# endif
static void (*dll_scheme_close_input_port)(Scheme_Object *port); static void (*dll_scheme_close_input_port)(Scheme_Object *port);
static void (*dll_scheme_count_lines)(Scheme_Object *port); static void (*dll_scheme_count_lines)(Scheme_Object *port);
static Scheme_Object *(*dll_scheme_current_continuation_marks)(void); static Scheme_Object *(*dll_scheme_current_continuation_marks)(void);
static void (*dll_scheme_display)(Scheme_Object *obj, Scheme_Object *port); static void (*dll_scheme_display)(Scheme_Object *obj, Scheme_Object *port);
static char *(*dll_scheme_display_to_string)(Scheme_Object *obj, long *len); static char *(*dll_scheme_display_to_string)(Scheme_Object *obj, long *len);
static int (*dll_scheme_eq)(Scheme_Object *obj1, Scheme_Object *obj2);
static Scheme_Object *(*dll_scheme_do_eval)(Scheme_Object *obj, static Scheme_Object *(*dll_scheme_do_eval)(Scheme_Object *obj,
int _num_rands, Scheme_Object **rands, int val); int _num_rands, Scheme_Object **rands, int val);
static void (*dll_scheme_dont_gc_ptr)(void *p); static void (*dll_scheme_dont_gc_ptr)(void *p);
@ -225,6 +234,7 @@ static char *(*dll_scheme_format)(char *format, int flen, int argc,
# else # else
static char *(*dll_scheme_format_utf8)(char *format, int flen, int argc, static char *(*dll_scheme_format_utf8)(char *format, int flen, int argc,
Scheme_Object **argv, long *rlen); Scheme_Object **argv, long *rlen);
static Scheme_Object *(*dll_scheme_get_param)(Scheme_Config *c, int pos);
# endif # endif
static void (*dll_scheme_gc_ptr_ok)(void *p); static void (*dll_scheme_gc_ptr_ok)(void *p);
# if MZSCHEME_VERSION_MAJOR < 299 # if MZSCHEME_VERSION_MAJOR < 299
@ -245,6 +255,8 @@ static Scheme_Object *(*dll_scheme_make_namespace)(int argc,
Scheme_Object *argv[]); Scheme_Object *argv[]);
static Scheme_Object *(*dll_scheme_make_pair)(Scheme_Object *car, static Scheme_Object *(*dll_scheme_make_pair)(Scheme_Object *car,
Scheme_Object *cdr); Scheme_Object *cdr);
static Scheme_Object *(*dll_scheme_make_prim_w_arity)(Scheme_Prim *prim,
const char *name, mzshort mina, mzshort maxa);
# if MZSCHEME_VERSION_MAJOR < 299 # if MZSCHEME_VERSION_MAJOR < 299
static Scheme_Object *(*dll_scheme_make_string)(const char *chars); static Scheme_Object *(*dll_scheme_make_string)(const char *chars);
static Scheme_Object *(*dll_scheme_make_string_output_port)(); static Scheme_Object *(*dll_scheme_make_string_output_port)();
@ -311,6 +323,9 @@ static Scheme_Object *(*dll_scheme_char_string_to_byte_string)
# define scheme_apply dll_scheme_apply # define scheme_apply dll_scheme_apply
# define scheme_basic_env dll_scheme_basic_env # define scheme_basic_env dll_scheme_basic_env
# define scheme_builtin_value dll_scheme_builtin_value # define scheme_builtin_value dll_scheme_builtin_value
# if MZSCHEME_VERSION_MAJOR >= 299
# define scheme_byte_string_to_char_string dll_scheme_byte_string_to_char_string
# endif
# define scheme_check_threads dll_scheme_check_threads # define scheme_check_threads dll_scheme_check_threads
# define scheme_close_input_port dll_scheme_close_input_port # define scheme_close_input_port dll_scheme_close_input_port
# define scheme_count_lines dll_scheme_count_lines # define scheme_count_lines dll_scheme_count_lines
@ -320,6 +335,7 @@ static Scheme_Object *(*dll_scheme_char_string_to_byte_string)
# define scheme_display_to_string dll_scheme_display_to_string # define scheme_display_to_string dll_scheme_display_to_string
# define scheme_do_eval dll_scheme_do_eval # define scheme_do_eval dll_scheme_do_eval
# define scheme_dont_gc_ptr dll_scheme_dont_gc_ptr # define scheme_dont_gc_ptr dll_scheme_dont_gc_ptr
# define scheme_eq dll_scheme_eq
# define scheme_eval dll_scheme_eval # define scheme_eval dll_scheme_eval
# define scheme_eval_string dll_scheme_eval_string # define scheme_eval_string dll_scheme_eval_string
# define scheme_eval_string_all dll_scheme_eval_string_all # define scheme_eval_string_all dll_scheme_eval_string_all
@ -335,6 +351,7 @@ static Scheme_Object *(*dll_scheme_char_string_to_byte_string)
# else # else
# define scheme_get_sized_byte_string_output \ # define scheme_get_sized_byte_string_output \
dll_scheme_get_sized_byte_string_output dll_scheme_get_sized_byte_string_output
# define scheme_get_param dll_scheme_get_param
# endif # endif
# define scheme_intern_symbol dll_scheme_intern_symbol # define scheme_intern_symbol dll_scheme_intern_symbol
# define scheme_lookup_global dll_scheme_lookup_global # define scheme_lookup_global dll_scheme_lookup_global
@ -342,6 +359,7 @@ static Scheme_Object *(*dll_scheme_char_string_to_byte_string)
# define scheme_make_integer_value dll_scheme_make_integer_value # define scheme_make_integer_value dll_scheme_make_integer_value
# define scheme_make_namespace dll_scheme_make_namespace # define scheme_make_namespace dll_scheme_make_namespace
# define scheme_make_pair dll_scheme_make_pair # define scheme_make_pair dll_scheme_make_pair
# define scheme_make_prim_w_arity dll_scheme_make_prim_w_arity
# if MZSCHEME_VERSION_MAJOR < 299 # if MZSCHEME_VERSION_MAJOR < 299
# define scheme_make_string dll_scheme_make_string # define scheme_make_string dll_scheme_make_string
# define scheme_make_string_output_port dll_scheme_make_string_output_port # define scheme_make_string_output_port dll_scheme_make_string_output_port
@ -399,6 +417,9 @@ static Thunk_Info mzsch_imports[] = {
{"scheme_add_global_symbol", (void **)&dll_scheme_add_global_symbol}, {"scheme_add_global_symbol", (void **)&dll_scheme_add_global_symbol},
{"scheme_apply", (void **)&dll_scheme_apply}, {"scheme_apply", (void **)&dll_scheme_apply},
{"scheme_basic_env", (void **)&dll_scheme_basic_env}, {"scheme_basic_env", (void **)&dll_scheme_basic_env},
# if MZSCHEME_VERSION_MAJOR >= 299
{"scheme_byte_string_to_char_string", (void **)&dll_scheme_byte_string_to_char_string},
# endif
{"scheme_builtin_value", (void **)&dll_scheme_builtin_value}, {"scheme_builtin_value", (void **)&dll_scheme_builtin_value},
{"scheme_check_threads", (void **)&dll_scheme_check_threads}, {"scheme_check_threads", (void **)&dll_scheme_check_threads},
{"scheme_close_input_port", (void **)&dll_scheme_close_input_port}, {"scheme_close_input_port", (void **)&dll_scheme_close_input_port},
@ -409,6 +430,7 @@ static Thunk_Info mzsch_imports[] = {
{"scheme_display_to_string", (void **)&dll_scheme_display_to_string}, {"scheme_display_to_string", (void **)&dll_scheme_display_to_string},
{"scheme_do_eval", (void **)&dll_scheme_do_eval}, {"scheme_do_eval", (void **)&dll_scheme_do_eval},
{"scheme_dont_gc_ptr", (void **)&dll_scheme_dont_gc_ptr}, {"scheme_dont_gc_ptr", (void **)&dll_scheme_dont_gc_ptr},
{"scheme_eq", (void **)&dll_scheme_eq},
{"scheme_eval", (void **)&dll_scheme_eval}, {"scheme_eval", (void **)&dll_scheme_eval},
{"scheme_eval_string", (void **)&dll_scheme_eval_string}, {"scheme_eval_string", (void **)&dll_scheme_eval_string},
{"scheme_eval_string_all", (void **)&dll_scheme_eval_string_all}, {"scheme_eval_string_all", (void **)&dll_scheme_eval_string_all},
@ -418,6 +440,7 @@ static Thunk_Info mzsch_imports[] = {
{"scheme_format", (void **)&dll_scheme_format}, {"scheme_format", (void **)&dll_scheme_format},
# else # else
{"scheme_format_utf8", (void **)&dll_scheme_format_utf8}, {"scheme_format_utf8", (void **)&dll_scheme_format_utf8},
{"scheme_get_param", (void **)&dll_scheme_get_param},
#endif #endif
{"scheme_gc_ptr_ok", (void **)&dll_scheme_gc_ptr_ok}, {"scheme_gc_ptr_ok", (void **)&dll_scheme_gc_ptr_ok},
# if MZSCHEME_VERSION_MAJOR < 299 # if MZSCHEME_VERSION_MAJOR < 299
@ -434,6 +457,7 @@ static Thunk_Info mzsch_imports[] = {
{"scheme_make_integer_value", (void **)&dll_scheme_make_integer_value}, {"scheme_make_integer_value", (void **)&dll_scheme_make_integer_value},
{"scheme_make_namespace", (void **)&dll_scheme_make_namespace}, {"scheme_make_namespace", (void **)&dll_scheme_make_namespace},
{"scheme_make_pair", (void **)&dll_scheme_make_pair}, {"scheme_make_pair", (void **)&dll_scheme_make_pair},
{"scheme_make_prim_w_arity", (void **)&dll_scheme_make_prim_w_arity},
# if MZSCHEME_VERSION_MAJOR < 299 # if MZSCHEME_VERSION_MAJOR < 299
{"scheme_make_string", (void **)&dll_scheme_make_string}, {"scheme_make_string", (void **)&dll_scheme_make_string},
{"scheme_make_string_output_port", {"scheme_make_string_output_port",
@ -727,6 +751,8 @@ mzscheme_end(void)
static void static void
startup_mzscheme(void) startup_mzscheme(void)
{ {
Scheme_Object *proc_make_security_guard;
scheme_set_stack_base(NULL, 1); scheme_set_stack_base(NULL, 1);
MZ_REGISTER_STATIC(environment); MZ_REGISTER_STATIC(environment);
@ -751,7 +777,24 @@ startup_mzscheme(void)
scheme_make_pair(scheme_make_string(MZSCHEME_COLLECTS), scheme_make_pair(scheme_make_string(MZSCHEME_COLLECTS),
scheme_null)); scheme_null));
#endif #endif
#ifdef HAVE_SANDBOX
/* setup sandbox guards */
proc_make_security_guard = scheme_lookup_global(
scheme_intern_symbol("make-security-guard"),
environment);
if (proc_make_security_guard != NULL)
{
Scheme_Object *args[3];
Scheme_Object *guard;
args[0] = scheme_get_param(scheme_config, MZCONFIG_SECURITY_GUARD);
args[1] = scheme_make_prim_w_arity(sandbox_file_guard,
"sandbox-file-guard", 3, 3);
args[2] = scheme_make_prim_w_arity(sandbox_network_guard,
"sandbox-network-guard", 4, 4);
guard = scheme_apply(proc_make_security_guard, 3, args);
scheme_set_param(scheme_config, MZCONFIG_SECURITY_GUARD, guard);
}
#endif
/* Create buffer and window types for use in Scheme code */ /* Create buffer and window types for use in Scheme code */
mz_buffer_type = scheme_make_type("<vim-buffer>"); mz_buffer_type = scheme_make_type("<vim-buffer>");
mz_window_type = scheme_make_type("<vim-window>"); mz_window_type = scheme_make_type("<vim-window>");
@ -1579,6 +1622,9 @@ set_cursor(void *data, int argc, Scheme_Object **argv)
long lnum = 0; long lnum = 0;
long col = 0; long col = 0;
#ifdef HAVE_SANDBOX
sandbox_check();
#endif
win = get_window_arg(prim->name, 1, argc, argv); win = get_window_arg(prim->name, 1, argc, argv);
GUARANTEE_PAIR(prim->name, 0); GUARANTEE_PAIR(prim->name, 0);
@ -1615,6 +1661,9 @@ mzscheme_open_buffer(void *data, int argc, Scheme_Object **argv)
int num = 0; int num = 0;
Scheme_Object *onum; Scheme_Object *onum;
#ifdef HAVE_SANDBOX
sandbox_check();
#endif
fname = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); fname = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
/* TODO make open existing file */ /* TODO make open existing file */
num = buflist_add(fname, BLN_LISTED | BLN_CURBUF); num = buflist_add(fname, BLN_LISTED | BLN_CURBUF);
@ -1869,6 +1918,9 @@ set_buffer_line(void *data, int argc, Scheme_Object **argv)
buf_T *savebuf; buf_T *savebuf;
int n; int n;
#ifdef HAVE_SANDBOX
sandbox_check();
#endif
n = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0)); n = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0));
if (!SCHEME_STRINGP(argv[1]) && !SCHEME_FALSEP(argv[1])) if (!SCHEME_STRINGP(argv[1]) && !SCHEME_FALSEP(argv[1]))
scheme_wrong_type(prim->name, "string or #f", 1, argc, argv); scheme_wrong_type(prim->name, "string or #f", 1, argc, argv);
@ -1958,6 +2010,9 @@ set_buffer_line_list(void *data, int argc, Scheme_Object **argv)
int i, old_len, new_len, hi, lo; int i, old_len, new_len, hi, lo;
long extra; long extra;
#ifdef HAVE_SANDBOX
sandbox_check();
#endif
lo = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0)); lo = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0));
hi = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 1)); hi = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 1));
if (!SCHEME_PAIRP(argv[2]) if (!SCHEME_PAIRP(argv[2])
@ -2121,6 +2176,9 @@ insert_buffer_line_list(void *data, int argc, Scheme_Object **argv)
buf_T *savebuf; buf_T *savebuf;
int i, n, size; int i, n, size;
#ifdef HAVE_SANDBOX
sandbox_check();
#endif
/* /*
* First of all, we check the type of the supplied MzScheme object. * First of all, we check the type of the supplied MzScheme object.
* It must be a string or a list, or the call is in error. * It must be a string or a list, or the call is in error.
@ -2380,8 +2438,9 @@ raise_vim_exn(const char *add_info)
if (add_info != NULL) if (add_info != NULL)
{ {
Scheme_Object *info = scheme_make_string(add_info); Scheme_Object *info = scheme_make_string(add_info);
argv[0] = scheme_make_string( argv[0] = scheme_byte_string_to_char_string(scheme_make_string(
scheme_format(fmt, strlen(fmt), 1, &info, NULL)); scheme_format(fmt, strlen(fmt), 1, &info, NULL)));
SCHEME_SET_IMMUTABLE(argv[0]);
} }
else else
argv[0] = scheme_make_string(_("Vim error")); argv[0] = scheme_make_string(_("Vim error"));
@ -2596,3 +2655,66 @@ make_modules(Scheme_Env *env)
scheme_add_global("global-namespace", (Scheme_Object *)environment, mod); scheme_add_global("global-namespace", (Scheme_Object *)environment, mod);
scheme_finish_primitive_module(mod); scheme_finish_primitive_module(mod);
} }
#ifdef HAVE_SANDBOX
static Scheme_Object *M_write = NULL;
static Scheme_Object *M_read = NULL;
static Scheme_Object *M_execute = NULL;
static Scheme_Object *M_delete = NULL;
static void
sandbox_check()
{
if (sandbox)
raise_vim_exn(_("not allowed in the Vim sandbox"));
}
/* security guards to force Vim's sandbox restrictions on MzScheme level */
static Scheme_Object *
sandbox_file_guard(int argc, Scheme_Object **argv)
{
if (sandbox)
{
Scheme_Object *requested_access = argv[2];
if (M_write == NULL)
{
MZ_REGISTER_STATIC(M_write);
M_write = scheme_intern_symbol("write");
}
if (M_read == NULL)
{
MZ_REGISTER_STATIC(M_read);
M_read = scheme_intern_symbol("read");
}
if (M_execute == NULL)
{
MZ_REGISTER_STATIC(M_execute);
M_execute = scheme_intern_symbol("execute");
}
if (M_delete == NULL)
{
MZ_REGISTER_STATIC(M_delete);
M_delete = scheme_intern_symbol("delete");
}
while (!SCHEME_NULLP(requested_access))
{
Scheme_Object *item = SCHEME_CAR(requested_access);
if (scheme_eq(item, M_write) || scheme_eq(item, M_read)
|| scheme_eq(item, M_execute) || scheme_eq(item, M_delete))
{
raise_vim_exn(_("not allowed in the Vim sandbox"));
}
requested_access = SCHEME_CDR(requested_access);
}
}
return scheme_void;
}
static Scheme_Object *
sandbox_network_guard(int argc, Scheme_Object **argv)
{
return scheme_void;
}
#endif

View File

@ -34,12 +34,13 @@
# endif # endif
# define scheme_format scheme_format_utf8 # define scheme_format scheme_format_utf8
# define GET_BYTE_STRING(obj) (SCHEME_BYTE_STRINGP(obj) ? obj : \ # define SCHEME_GET_BYTE_STRING(obj) (SCHEME_BYTE_STRINGP(obj) ? obj : \
scheme_char_string_to_byte_string(obj)) scheme_char_string_to_byte_string(obj))
#else #else
# define GET_BYTE_STRING(obj) (obj) # define SCHEME_GET_BYTE_STRING(obj) (obj)
# define SCHEME_BYTE_STRLEN_VAL SCHEME_STRLEN_VAL # define SCHEME_BYTE_STRLEN_VAL SCHEME_STRLEN_VAL
# define SCHEME_BYTE_STR_VAL SCHEME_STR_VAL # define SCHEME_BYTE_STR_VAL SCHEME_STR_VAL
# define scheme_byte_string_to_char_string(obj) (obj)
#endif #endif
#endif /* _IF_MZSCH_H_ */ #endif /* _IF_MZSCH_H_ */

View File

@ -1369,12 +1369,13 @@ BufferGetattr(PyObject *self, char *name)
static PyObject * static PyObject *
BufferRepr(PyObject *self) BufferRepr(PyObject *self)
{ {
static char repr[50]; static char repr[100];
BufferObject *this = (BufferObject *)(self); BufferObject *this = (BufferObject *)(self);
if (this->buf == INVALID_BUFFER_VALUE) if (this->buf == INVALID_BUFFER_VALUE)
{ {
sprintf(repr, _("<buffer object (deleted) at %8lX>"), (long)(self)); vim_snprintf(repr, 100, _("<buffer object (deleted) at %8lX>"),
(long)(self));
return PyString_FromString(repr); return PyString_FromString(repr);
} }
else else
@ -1389,7 +1390,7 @@ BufferRepr(PyObject *self)
if (len > 35) if (len > 35)
name = name + (35 - len); name = name + (35 - len);
sprintf(repr, "<buffer %s%s>", len > 35 ? "..." : "", name); vim_snprintf(repr, 100, "<buffer %s%s>", len > 35 ? "..." : "", name);
return PyString_FromString(repr); return PyString_FromString(repr);
} }
@ -1588,12 +1589,12 @@ RangeGetattr(PyObject *self, char *name)
static PyObject * static PyObject *
RangeRepr(PyObject *self) RangeRepr(PyObject *self)
{ {
static char repr[75]; static char repr[100];
RangeObject *this = (RangeObject *)(self); RangeObject *this = (RangeObject *)(self);
if (this->buf->buf == INVALID_BUFFER_VALUE) if (this->buf->buf == INVALID_BUFFER_VALUE)
{ {
sprintf(repr, "<range object (for deleted buffer) at %8lX>", vim_snprintf(repr, 100, "<range object (for deleted buffer) at %8lX>",
(long)(self)); (long)(self));
return PyString_FromString(repr); return PyString_FromString(repr);
} }
@ -1609,7 +1610,7 @@ RangeRepr(PyObject *self)
if (len > 45) if (len > 45)
name = name + (45 - len); name = name + (45 - len);
sprintf(repr, "<range %s%s (%d:%d)>", vim_snprintf(repr, 100, "<range %s%s (%d:%d)>",
len > 45 ? "..." : "", name, len > 45 ? "..." : "", name,
this->start, this->end); this->start, this->end);
@ -1963,12 +1964,13 @@ WindowSetattr(PyObject *self, char *name, PyObject *val)
static PyObject * static PyObject *
WindowRepr(PyObject *self) WindowRepr(PyObject *self)
{ {
static char repr[50]; static char repr[100];
WindowObject *this = (WindowObject *)(self); WindowObject *this = (WindowObject *)(self);
if (this->win == INVALID_WINDOW_VALUE) if (this->win == INVALID_WINDOW_VALUE)
{ {
sprintf(repr, _("<window object (deleted) at %.8lX>"), (long)(self)); vim_snprintf(repr, 100, _("<window object (deleted) at %.8lX>"),
(long)(self));
return PyString_FromString(repr); return PyString_FromString(repr);
} }
else else
@ -1980,9 +1982,10 @@ WindowRepr(PyObject *self)
++i; ++i;
if (w == NULL) if (w == NULL)
sprintf(repr, _("<window object (unknown) at %.8lX>"), (long)(self)); vim_snprintf(repr, 100, _("<window object (unknown) at %.8lX>"),
(long)(self));
else else
sprintf(repr, _("<window %d>"), i); vim_snprintf(repr, 100, _("<window %d>"), i);
return PyString_FromString(repr); return PyString_FromString(repr);
} }

View File

@ -852,7 +852,9 @@ bufselfcmd(ref, interp, objc, objv)
else else
{ {
char rbuf[64]; char rbuf[64];
sprintf(rbuf, _("row %d column %d"), (int)row2tcl(pos->lnum), (int)col2tcl(pos->col));
sprintf(rbuf, _("row %d column %d"),
(int)row2tcl(pos->lnum), (int)col2tcl(pos->col));
Tcl_SetResult(interp, rbuf, TCL_VOLATILE); Tcl_SetResult(interp, rbuf, TCL_VOLATILE);
} }
break; break;
@ -874,7 +876,8 @@ bufselfcmd(ref, interp, objc, objv)
--val1; --val1;
if (u_save((linenr_T)val1, (linenr_T)(val1+1)) != OK) if (u_save((linenr_T)val1, (linenr_T)(val1+1)) != OK)
{ {
Tcl_SetResult(interp, _("cannot save undo information"), TCL_STATIC); Tcl_SetResult(interp, _("cannot save undo information"),
TCL_STATIC);
err = TCL_ERROR; err = TCL_ERROR;
break; break;
} }
@ -882,7 +885,8 @@ bufselfcmd(ref, interp, objc, objv)
line = Tcl_GetStringFromObj(objv[3], NULL); line = Tcl_GetStringFromObj(objv[3], NULL);
if (ml_append((linenr_T)val1, (char_u *)line, 0, FALSE) != OK) if (ml_append((linenr_T)val1, (char_u *)line, 0, FALSE) != OK)
{ {
Tcl_SetResult(interp, _("cannot insert/append line"), TCL_STATIC); Tcl_SetResult(interp, _("cannot insert/append line"),
TCL_STATIC);
err = TCL_ERROR; err = TCL_ERROR;
break; break;
} }
@ -1067,6 +1071,7 @@ winselfcmd(ref, interp, objc, objv)
if (objc == 2) if (objc == 2)
{ {
char buf[64]; char buf[64];
sprintf(buf, _("row %d column %d"), (int)row2tcl(win->w_cursor.lnum), (int)col2tcl(win->w_cursor.col)); sprintf(buf, _("row %d column %d"), (int)row2tcl(win->w_cursor.lnum), (int)col2tcl(win->w_cursor.col));
Tcl_SetResult(interp, buf, TCL_VOLATILE); Tcl_SetResult(interp, buf, TCL_VOLATILE);
break; break;
@ -1486,7 +1491,8 @@ tclgetref(interp, refstartP, prefix, vimobj, proc)
} }
if (ref) if (ref)
sprintf(name, "::vim::%s", Tcl_GetCommandName(interp, ref->cmd)); vim_snprintf(name, sizeof(name), "::vim::%s",
Tcl_GetCommandName(interp, ref->cmd));
else else
{ {
if (unused) if (unused)
@ -1507,7 +1513,8 @@ tclgetref(interp, refstartP, prefix, vimobj, proc)
} }
/* This might break on some exotic systems... */ /* This might break on some exotic systems... */
sprintf(name, "::vim::%s_%lx", prefix, (unsigned long)vimobj); vim_snprintf(name, sizeof(name), "::vim::%s_%lx",
prefix, (unsigned long)vimobj);
cmd = Tcl_CreateObjCommand(interp, name, proc, cmd = Tcl_CreateObjCommand(interp, name, proc,
(ClientData)ref, (Tcl_CmdDeleteProc *)delref); (ClientData)ref, (Tcl_CmdDeleteProc *)delref);
if (!cmd) if (!cmd)
@ -1881,7 +1888,7 @@ tclexit(error)
if (error == TCL_EXIT ) if (error == TCL_EXIT )
{ {
int retval; int retval;
char buf[32]; char buf[50];
Tcl_Obj *robj; Tcl_Obj *robj;
robj = Tcl_GetObjResult(tclinfo.interp); robj = Tcl_GetObjResult(tclinfo.interp);
@ -1892,7 +1899,7 @@ tclexit(error)
} }
else else
{ {
sprintf(buf, "E572: exit code %d", retval); sprintf(buf, _("E572: exit code %d"), retval);
tclerrmsg(buf); tclerrmsg(buf);
if (retval == 0 ) if (retval == 0 )
{ {

View File

@ -1015,13 +1015,13 @@ ml_recover()
} }
home_replace(NULL, mfp->mf_fname, NameBuff, MAXPATHL, TRUE); home_replace(NULL, mfp->mf_fname, NameBuff, MAXPATHL, TRUE);
msg_str((char_u *)_("Using swap file \"%s\""), NameBuff); smsg((char_u *)_("Using swap file \"%s\""), NameBuff);
if (buf_spname(curbuf) != NULL) if (buf_spname(curbuf) != NULL)
STRCPY(NameBuff, buf_spname(curbuf)); STRCPY(NameBuff, buf_spname(curbuf));
else else
home_replace(NULL, curbuf->b_ffname, NameBuff, MAXPATHL, TRUE); home_replace(NULL, curbuf->b_ffname, NameBuff, MAXPATHL, TRUE);
msg_str((char_u *)_("Original file \"%s\""), NameBuff); smsg((char_u *)_("Original file \"%s\""), NameBuff);
msg_putchar('\n'); msg_putchar('\n');
/* /*

View File

@ -3295,7 +3295,7 @@ init_homedir()
if (exp != NULL && *exp != NUL if (exp != NULL && *exp != NUL
&& STRLEN(exp) + STRLEN(p) < MAXPATHL) && STRLEN(exp) + STRLEN(p) < MAXPATHL)
{ {
sprintf((char *)NameBuff, "%s%s", exp, p + 1); vim_snprintf((char *)NameBuff, MAXPATHL, "%s%s", exp, p + 1);
var = NameBuff; var = NameBuff;
/* Also set $HOME, it's needed for _viminfo. */ /* Also set $HOME, it's needed for _viminfo. */
vim_setenv((char_u *)"HOME", NameBuff); vim_setenv((char_u *)"HOME", NameBuff);

View File

@ -5226,7 +5226,7 @@ write_viminfo_registers(fp)
#endif #endif
default: default:
sprintf((char *)IObuff, _("E574: Unknown register type %d"), sprintf((char *)IObuff, _("E574: Unknown register type %d"),
y_regs[i].y_type); y_regs[i].y_type);
emsg(IObuff); emsg(IObuff);
type = (char_u *)"LINE"; type = (char_u *)"LINE";
break; break;
@ -5943,8 +5943,8 @@ line_count_info(line, wc, cc, limit, eol_size)
cursor_pos_info() cursor_pos_info()
{ {
char_u *p; char_u *p;
char_u buf1[20]; char_u buf1[50];
char_u buf2[20]; char_u buf2[40];
linenr_T lnum; linenr_T lnum;
long byte_count = 0; long byte_count = 0;
long byte_count_cursor = 0; long byte_count_cursor = 0;
@ -6106,7 +6106,7 @@ cursor_pos_info()
buf1[0] = NUL; buf1[0] = NUL;
if (char_count_cursor == byte_count_cursor if (char_count_cursor == byte_count_cursor
&& char_count == byte_count) && char_count == byte_count)
sprintf((char *)IObuff, _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"), sprintf((char *)IObuff, _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"),
buf1, line_count_selected, buf1, line_count_selected,
(long)curbuf->b_ml.ml_line_count, (long)curbuf->b_ml.ml_line_count,

View File

@ -2571,7 +2571,7 @@ static char_u *set_chars_option __ARGS((char_u **varp));
static char_u *check_clipboard_option __ARGS((void)); static char_u *check_clipboard_option __ARGS((void));
#endif #endif
static char_u *set_bool_option __ARGS((int opt_idx, char_u *varp, int value, int opt_flags)); static char_u *set_bool_option __ARGS((int opt_idx, char_u *varp, int value, int opt_flags));
static char_u *set_num_option __ARGS((int opt_idx, char_u *varp, long value, char_u *errbuf, int opt_flags)); static char_u *set_num_option __ARGS((int opt_idx, char_u *varp, long value, char_u *errbuf, size_t errbuflen, int opt_flags));
static void check_redraw __ARGS((long_u flags)); static void check_redraw __ARGS((long_u flags));
static int findoption __ARGS((char_u *)); static int findoption __ARGS((char_u *));
static int find_key_option __ARGS((char_u *)); static int find_key_option __ARGS((char_u *));
@ -3881,7 +3881,7 @@ do_set(arg, opt_flags)
if (removing) if (removing)
value = *(long *)varp - value; value = *(long *)varp - value;
errmsg = set_num_option(opt_idx, varp, value, errmsg = set_num_option(opt_idx, varp, value,
errbuf, opt_flags); errbuf, sizeof(errbuf), opt_flags);
} }
else if (opt_idx >= 0) /* string */ else if (opt_idx >= 0) /* string */
{ {
@ -4287,7 +4287,7 @@ illegal_char(errbuf, c)
if (errbuf == NULL) if (errbuf == NULL)
return (char_u *)""; return (char_u *)"";
sprintf((char *)errbuf, _("E539: Illegal character <%s>"), sprintf((char *)errbuf, _("E539: Illegal character <%s>"),
(char *)transchar(c)); (char *)transchar(c));
return errbuf; return errbuf;
} }
@ -6822,11 +6822,12 @@ set_bool_option(opt_idx, varp, value, opt_flags)
* Returns NULL for success, or an error message for an error. * Returns NULL for success, or an error message for an error.
*/ */
static char_u * static char_u *
set_num_option(opt_idx, varp, value, errbuf, opt_flags) set_num_option(opt_idx, varp, value, errbuf, errbuflen, opt_flags)
int opt_idx; /* index in options[] table */ int opt_idx; /* index in options[] table */
char_u *varp; /* pointer to the option variable */ char_u *varp; /* pointer to the option variable */
long value; /* new value */ long value; /* new value */
char_u *errbuf; /* buffer for error messages */ char_u *errbuf; /* buffer for error messages */
size_t errbuflen; /* length of "errbuf" */
int opt_flags; /* OPT_LOCAL, OPT_GLOBAL and int opt_flags; /* OPT_LOCAL, OPT_GLOBAL and
OPT_MODELINE */ OPT_MODELINE */
{ {
@ -7116,8 +7117,8 @@ set_num_option(opt_idx, varp, value, errbuf, opt_flags)
{ {
if (errbuf != NULL) if (errbuf != NULL)
{ {
sprintf((char *)errbuf, _("E593: Need at least %d lines"), vim_snprintf((char *)errbuf, errbuflen,
min_rows()); _("E593: Need at least %d lines"), min_rows());
errmsg = errbuf; errmsg = errbuf;
} }
Rows = min_rows(); Rows = min_rows();
@ -7126,8 +7127,8 @@ set_num_option(opt_idx, varp, value, errbuf, opt_flags)
{ {
if (errbuf != NULL) if (errbuf != NULL)
{ {
sprintf((char *)errbuf, _("E594: Need at least %d columns"), vim_snprintf((char *)errbuf, errbuflen,
MIN_COLUMNS); _("E594: Need at least %d columns"), MIN_COLUMNS);
errmsg = errbuf; errmsg = errbuf;
} }
Columns = MIN_COLUMNS; Columns = MIN_COLUMNS;
@ -7453,7 +7454,8 @@ set_option_value(name, number, string, opt_flags)
if (varp != NULL) /* hidden option is not changed */ if (varp != NULL) /* hidden option is not changed */
{ {
if (flags & P_NUM) if (flags & P_NUM)
(void)set_num_option(opt_idx, varp, number, NULL, opt_flags); (void)set_num_option(opt_idx, varp, number,
NULL, 0, opt_flags);
else else
(void)set_bool_option(opt_idx, varp, (int)number, opt_flags); (void)set_bool_option(opt_idx, varp, (int)number, opt_flags);
} }

View File

@ -1309,7 +1309,7 @@ msgid "1 substitution"
msgstr "1 sostituzione" msgstr "1 sostituzione"
#: ex_cmds.c:4550 #: ex_cmds.c:4550
#, fuzzy, c-format #, c-format
msgid "%ld matches" msgid "%ld matches"
msgstr "%ld corrisp." msgstr "%ld corrisp."
@ -1608,7 +1608,6 @@ msgid "Append File"
msgstr "In aggiunta al File" msgstr "In aggiunta al File"
#: ex_docmd.c:7225 #: ex_docmd.c:7225
#, fuzzy
msgid "E747: Cannot change directory, buffer is modifed (add ! to override)" msgid "E747: Cannot change directory, buffer is modifed (add ! to override)"
msgstr "" msgstr ""
"E747: Non posso cambiare directory, buffer modificato (aggiungi ! per " "E747: Non posso cambiare directory, buffer modificato (aggiungi ! per "
@ -2271,7 +2270,6 @@ msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
msgstr "W16: Attenzione: Modo File \"%s\" modificato dopo l'apertura" msgstr "W16: Attenzione: Modo File \"%s\" modificato dopo l'apertura"
#: fileio.c:6066 #: fileio.c:6066
#, fuzzy
msgid "See \":help W16\" for more info." msgid "See \":help W16\" for more info."
msgstr "Vedere \":help W16\" per ulteriori informazioni." msgstr "Vedere \":help W16\" per ulteriori informazioni."
@ -5600,7 +5598,6 @@ msgid "E382: Cannot write, 'buftype' option is set"
msgstr "E382: Non posso scrivere, l'opzione 'buftype' è impostata" msgstr "E382: Non posso scrivere, l'opzione 'buftype' è impostata"
#: quickfix.c:2379 #: quickfix.c:2379
#, fuzzy
msgid "E682: Invalid search pattern or delimiter" msgid "E682: Invalid search pattern or delimiter"
msgstr "E682: Espressione o delimitatore di ricerca non validi" msgstr "E682: Espressione o delimitatore di ricerca non validi"
@ -6688,7 +6685,6 @@ msgid "with (classic) GUI."
msgstr "con GUI (classica)." msgstr "con GUI (classica)."
#: version.c:876 #: version.c:876
#, fuzzy
msgid "with KDE GUI." msgid "with KDE GUI."
msgstr "con GUI KDE." msgstr "con GUI KDE."
@ -7002,7 +6998,6 @@ msgid "E588: :endwhile without :while"
msgstr "E588: :endwhile senza :while" msgstr "E588: :endwhile senza :while"
#: globals.h:1276 #: globals.h:1276
#, fuzzy
msgid "E588: :endfor without :for" msgid "E588: :endfor without :for"
msgstr "E588: :endfor senza :for" msgstr "E588: :endfor senza :for"

View File

@ -92,5 +92,4 @@ int get_user_name __ARGS((char_u *buf, int len));
void sort_strings __ARGS((char_u **files, int count)); void sort_strings __ARGS((char_u **files, int count));
int pathcmp __ARGS((const char *p, const char *q, int maxlen)); int pathcmp __ARGS((const char *p, const char *q, int maxlen));
char_u *parse_list_options __ARGS((char_u *option_str, option_table_T *table, int table_size)); char_u *parse_list_options __ARGS((char_u *option_str, option_table_T *table, int table_size));
void msg_str __ARGS((char_u *s, char_u *arg));
/* vim: set ft=c : */ /* vim: set ft=c : */

View File

@ -4278,8 +4278,9 @@ find_pattern_in_path(ptr, dir, len, whole, skip_comments,
#ifdef FEAT_INS_EXPAND #ifdef FEAT_INS_EXPAND
if (action == ACTION_EXPAND) if (action == ACTION_EXPAND)
{ {
sprintf((char*)IObuff, _("Scanning included file: %s"), vim_snprintf((char*)IObuff, IOSIZE,
(char *)new_fname); _("Scanning included file: %s"),
(char *)new_fname);
msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
} }
#endif #endif

View File

@ -3433,7 +3433,7 @@ syn_cmd_onoff(eap, name)
if (!eap->skip) if (!eap->skip)
{ {
STRCPY(buf, "so "); STRCPY(buf, "so ");
sprintf((char *)buf + 3, SYNTAX_FNAME, name); vim_snprintf((char *)buf + 3, sizeof(buf) - 3, SYNTAX_FNAME, name);
do_cmdline_cmd(buf); do_cmdline_cmd(buf);
} }
} }

View File

@ -2140,7 +2140,7 @@ clip_x11_request_selection(myShell, dpy, cbd)
clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd); clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd);
XFree((void *)buffer); XFree((void *)buffer);
if (p_verbose > 0) if (p_verbose > 0)
smsg((char_u *)_("Used CUT_BUFFER0 instead of empty selection") ); MSG(_("Used CUT_BUFFER0 instead of empty selection"));
} }
} }