diff options
author | Bram Moolenaar <Bram@vim.org> | 2009-05-13 10:51:08 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2009-05-13 10:51:08 +0000 |
commit | 0ab2a8870cc335acd99f7f4d806f802818d97014 (patch) | |
tree | 604a7a94f20947c47cb08fb013fb84c62b6e9ca9 | |
parent | 3c65e314b432707440593d9ecf8d016b99e8ed8c (diff) | |
download | vim-git-0ab2a8870cc335acd99f7f4d806f802818d97014.tar.gz |
updated for version 7.2-168
-rw-r--r-- | Filelist | 3 | ||||
-rw-r--r-- | runtime/spell/fixdup | 27 | ||||
-rw-r--r-- | src/Makefile | 24 | ||||
-rw-r--r-- | src/buffer.c | 91 | ||||
-rw-r--r-- | src/charset.c | 30 | ||||
-rw-r--r-- | src/cleanlint.vim | 27 | ||||
-rw-r--r-- | src/digraph.c | 27 | ||||
-rw-r--r-- | src/edit.c | 54 | ||||
-rw-r--r-- | src/ex_cmds.c | 6 | ||||
-rw-r--r-- | src/globals.h | 6 | ||||
-rw-r--r-- | src/ops.c | 18 | ||||
-rw-r--r-- | src/os_unix.c | 8 | ||||
-rw-r--r-- | src/os_unix.h | 4 | ||||
-rw-r--r-- | src/proto/buffer.pro | 9 | ||||
-rw-r--r-- | src/proto/edit.pro | 2 | ||||
-rw-r--r-- | src/screen.c | 13 | ||||
-rw-r--r-- | src/structs.h | 10 | ||||
-rw-r--r-- | src/version.c | 2 |
18 files changed, 205 insertions, 156 deletions
@@ -139,6 +139,7 @@ SRC_UNIX = \ src/INSTALL \ src/INSTALLx.txt \ src/Makefile \ + src/cleanlint.vim \ src/auto/configure \ src/config.aap.in \ src/config.h.in \ @@ -683,9 +684,7 @@ LANG_GEN = \ runtime/spell/??/main.aap \ runtime/spell/yi/README.txt \ runtime/spell/main.aap \ - runtime/spell/cleanadd.vim \ runtime/spell/*.vim \ - runtime/spell/fixdup \ # generic language files, binary LANG_GEN_BIN = \ diff --git a/runtime/spell/fixdup b/runtime/spell/fixdup deleted file mode 100644 index 0dd532d5e..000000000 --- a/runtime/spell/fixdup +++ /dev/null @@ -1,27 +0,0 @@ -" Vim script to fix duplicate words in a .dic file vim: set ft=vim: -" -" Usage: Edit the .dic file and source this script. - -let deleted = 0 - -" Start below the word count. -let lnum = 2 -while lnum <= line('$') - let word = getline(lnum) - if word !~ '/' - if search('^' . word . '/', 'w') != 0 - let deleted += 1 - exe lnum . "d" - continue " don't increment lnum, it's already at the next word - endif - endif - let lnum += 1 -endwhile - -if deleted == 0 - echomsg "No duplicate words found" -elseif deleted == 1 - echomsg "Deleted 1 duplicate word" -else - echomsg printf("Deleted %d duplicate words", deleted) -endif diff --git a/src/Makefile b/src/Makefile index e27a6ce0b..c790662a1 100644 --- a/src/Makefile +++ b/src/Makefile @@ -551,7 +551,12 @@ CClink = $(CC) # }}} # LINT - for running lint -LINT_OPTIONS = -beprxzF +# For standard lint +#LINT = lint +#LINT_OPTIONS = -beprxzF +# For splint (see cleanlint.vim for filtering the output) +LINT = splint +LINT_OPTIONS = +unixlib -weak -macrovarprefixexclude -showfunc -linelen 9999 # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof. # Might not work with GUI or Perl. @@ -1259,16 +1264,16 @@ CPP_DEPEND = $(CC) -I$(srcdir) -M$(CPP_MM) \ # This is for cproto 3 patchlevel 8 or below # __inline, __attribute__ and __extension__ are not recognized by cproto # G_IMPLEMENT_INLINES is to avoid functions defined in glib/gutils.h. -NO_ATTR = -D__inline= -D__inline__= -DG_IMPLEMENT_INLINES \ - -D"__attribute__\\(x\\)=" -D"__asm__\\(x\\)=" \ - -D__extension__= -D__restrict="" \ - -D__gnuc_va_list=char -D__builtin_va_list=char +#NO_ATTR = -D__inline= -D__inline__= -DG_IMPLEMENT_INLINES \ +# -D"__attribute__\\(x\\)=" -D"__asm__\\(x\\)=" \ +# -D__extension__= -D__restrict="" \ +# -D__gnuc_va_list=char -D__builtin_va_list=char # -# This is for cproto 3 patchlevel 9 or above (currently 4.6) +# This is for cproto 3 patchlevel 9 or above (currently 4.6, 4.7g) # __inline and __attribute__ are now recognized by cproto # -D"foo()=" is not supported by all compilers so do not use it -# NO_ATTR= +NO_ATTR= # # maybe the "/usr/bin/cc -E" has to be adjusted for some systems # This is for cproto 3.5 patchlevel 3: @@ -1432,6 +1437,7 @@ LINT_SRC = $(BASIC_SRC) $(GUI_SRC) $(HANGULIN_SRC) $(PYTHON_SRC) $(TCL_SRC) \ $(SNIFF_SRC) $(WORKSHOP_SRC) $(WSDEBUG_SRC) $(NETBEANS_SRC) #LINT_SRC = $(SRC) #LINT_SRC = $(ALL_SRC) +#LINT_SRC = $(BASIC_SRC) OBJ = \ objects/buffer.o \ @@ -2272,12 +2278,12 @@ depend: # Run lint. Clean up the *.ln files that are sometimes left behind. lint: - lint $(LINT_OPTIONS) $(LINT_CFLAGS) $(LINT_EXTRA) $(LINT_SRC) + $(LINT) $(LINT_OPTIONS) $(LINT_CFLAGS) $(LINT_EXTRA) $(LINT_SRC) -rm -f *.ln # Check dosinst.c with lint. lintinstall: - lint $(LINT_OPTIONS) -DWIN32 -DUNIX_LINT dosinst.c + $(LINT) $(LINT_OPTIONS) -DWIN32 -DUNIX_LINT dosinst.c -rm -f dosinst.ln ########################################################################### diff --git a/src/buffer.c b/src/buffer.c index a052e12c6..e9243d456 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -44,6 +44,7 @@ static int otherfile_buf __ARGS((buf_T *buf, char_u *ffname)); #ifdef FEAT_TITLE static int ti_change __ARGS((char_u *str, char_u **last)); #endif +static int append_arg_number __ARGS((win_T *wp, char_u *buf, int buflen, int add_file)); static void free_buffer __ARGS((buf_T *)); static void free_buffer_stuff __ARGS((buf_T *buf, int free_options)); static void clear_wininfo __ARGS((buf_T *buf)); @@ -1453,13 +1454,13 @@ enter_buffer(buf) #ifdef FEAT_KEYMAP if (curbuf->b_kmap_state & KEYMAP_INIT) - keymap_init(); + (void)keymap_init(); #endif #ifdef FEAT_SPELL /* May need to set the spell language. Can only do this after the buffer * has been properly setup. */ if (!curbuf->b_help && curwin->w_p_spell && *curbuf->b_p_spl != NUL) - did_set_spelllang(curbuf); + (void)did_set_spelllang(curbuf); #endif redraw_later(NOT_VALID); @@ -2516,7 +2517,7 @@ buflist_findfpos(buf) buf_T *buf; { wininfo_T *wip; - static pos_T no_position = {1, 0}; + static pos_T no_position = INIT_POS_T(1, 0, 0); wip = find_wininfo(buf, FALSE); if (wip != NULL) @@ -2577,8 +2578,8 @@ buflist_list(eap) { IObuff[len++] = ' '; } while (--i > 0 && len < IOSIZE - 18); - vim_snprintf((char *)IObuff + len, IOSIZE - len, _("line %ld"), - buf == curbuf ? curwin->w_cursor.lnum + vim_snprintf((char *)IObuff + len, (size_t)(IOSIZE - len), + _("line %ld"), buf == curbuf ? curwin->w_cursor.lnum : (long)buflist_findlnum(buf)); msg_outtrans(IObuff); out_flush(); /* output one line at a time */ @@ -2967,7 +2968,7 @@ fileinfo(fullname, shorthelp, dont_truncate) if (fullname > 1) /* 2 CTRL-G: include buffer number */ { - sprintf((char *)buffer, "buf %d: ", curbuf->b_fnum); + vim_snprintf((char *)buffer, IOSIZE, "buf %d: ", curbuf->b_fnum); p = buffer + STRLEN(buffer); } else @@ -3041,11 +3042,12 @@ fileinfo(fullname, shorthelp, dont_truncate) (long)curbuf->b_ml.ml_line_count, n); validate_virtcol(); - col_print(buffer + STRLEN(buffer), + len = STRLEN(buffer); + col_print(buffer + len, IOSIZE - len, (int)curwin->w_cursor.col + 1, (int)curwin->w_virtcol + 1); } - (void)append_arg_number(curwin, buffer, !shortmess(SHM_FILE), IOSIZE); + (void)append_arg_number(curwin, buffer, IOSIZE, !shortmess(SHM_FILE)); if (dont_truncate) { @@ -3073,15 +3075,16 @@ fileinfo(fullname, shorthelp, dont_truncate) } void -col_print(buf, col, vcol) +col_print(buf, buflen, col, vcol) char_u *buf; + size_t buflen; int col; int vcol; { if (col == vcol) - sprintf((char *)buf, "%d", col); + vim_snprintf((char *)buf, buflen, "%d", col); else - sprintf((char *)buf, "%d-%d", col, vcol); + vim_snprintf((char *)buf, buflen, "%d-%d", col, vcol); } #if defined(FEAT_TITLE) || defined(PROTO) @@ -3194,18 +3197,18 @@ maketitle() if (p == buf + off) /* must be a help buffer */ vim_strncpy(buf + off, (char_u *)_("help"), - IOSIZE - off - 1); + (size_t)(IOSIZE - off - 1)); else *p = NUL; /* translate unprintable chars */ p = transstr(buf + off); - vim_strncpy(buf + off, p, IOSIZE - off - 1); + vim_strncpy(buf + off, p, (size_t)(IOSIZE - off - 1)); vim_free(p); STRCAT(buf, ")"); } - append_arg_number(curwin, buf, FALSE, IOSIZE); + append_arg_number(curwin, buf, IOSIZE, FALSE); #if defined(FEAT_CLIENTSERVER) if (serverName != NULL) @@ -3520,7 +3523,7 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t n = (long)(p - t) - item[groupitem[groupdepth]].maxwid + 1; *t = '<'; - mch_memmove(t + 1, t + n, p - (t + n)); + mch_memmove(t + 1, t + n, (size_t)(p - (t + n))); p = p - n + 1; #ifdef FEAT_MBYTE /* Fill up space left over by half a double-wide char. */ @@ -3550,7 +3553,7 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t else { /* fill by inserting characters */ - mch_memmove(t + n - l, t, p - t); + mch_memmove(t + n - l, t, (size_t)(p - t)); l = n - l; if (p + l >= out + outlen) l = (long)((out + outlen) - p - 1); @@ -3686,7 +3689,7 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t p = t; #ifdef FEAT_EVAL - sprintf((char *)tmp, "%d", curbuf->b_fnum); + vim_snprintf((char *)tmp, sizeof(tmp), "%d", curbuf->b_fnum); set_internal_string_var((char_u *)"actual_curbuf", tmp); o_curbuf = curbuf; @@ -3753,13 +3756,13 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t case STL_ALTPERCENT: str = tmp; - get_rel_pos(wp, str); + get_rel_pos(wp, str, TMPLEN); break; case STL_ARGLISTSTAT: fillable = FALSE; tmp[0] = 0; - if (append_arg_number(wp, tmp, FALSE, (int)sizeof(tmp))) + if (append_arg_number(wp, tmp, (int)sizeof(tmp), FALSE)) str = tmp; break; @@ -3794,7 +3797,7 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t case STL_BYTEVAL_X: base = 'X'; case STL_BYTEVAL: - if (wp->w_cursor.col > STRLEN(linecont)) + if (wp->w_cursor.col > (colnr_T)STRLEN(linecont)) num = 0; else { @@ -3967,7 +3970,7 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t if (zeropad) *t++ = '0'; *t++ = '*'; - *t++ = nbase == 16 ? base : (nbase == 8 ? 'o' : 'd'); + *t++ = nbase == 16 ? base : (char_u)(nbase == 8 ? 'o' : 'd'); *t = 0; for (n = num, l = 1; n >= nbase; n /= nbase) @@ -4160,13 +4163,14 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t #if defined(FEAT_STL_OPT) || defined(FEAT_CMDL_INFO) \ || defined(FEAT_GUI_TABLINE) || defined(PROTO) /* - * Get relative cursor position in window into "str[]", in the form 99%, using - * "Top", "Bot" or "All" when appropriate. + * Get relative cursor position in window into "buf[buflen]", in the form 99%, + * using "Top", "Bot" or "All" when appropriate. */ void -get_rel_pos(wp, str) +get_rel_pos(wp, buf, buflen) win_T *wp; - char_u *str; + char_u *buf; + int buflen; { long above; /* number of lines above window */ long below; /* number of lines below window */ @@ -4177,34 +4181,35 @@ get_rel_pos(wp, str) #endif below = wp->w_buffer->b_ml.ml_line_count - wp->w_botline + 1; if (below <= 0) - STRCPY(str, above == 0 ? _("All") : _("Bot")); + vim_strncpy(buf, (char_u *)(above == 0 ? _("All") : _("Bot")), + (size_t)(buflen - 1)); else if (above <= 0) - STRCPY(str, _("Top")); + vim_strncpy(buf, (char_u *)_("Top"), (size_t)(buflen - 1)); else - sprintf((char *)str, "%2d%%", above > 1000000L + vim_snprintf((char *)buf, (size_t)buflen, "%2d%%", above > 1000000L ? (int)(above / ((above + below) / 100L)) : (int)(above * 100L / (above + below))); } #endif /* - * Append (file 2 of 8) to 'buf', if editing more than one file. + * Append (file 2 of 8) to "buf[buflen]", if editing more than one file. * Return TRUE if it was appended. */ - int -append_arg_number(wp, buf, add_file, maxlen) + static int +append_arg_number(wp, buf, buflen, add_file) win_T *wp; char_u *buf; + int buflen; int add_file; /* Add "file" before the arg number */ - int maxlen; /* maximum nr of chars in buf or zero*/ { char_u *p; if (ARGCOUNT <= 1) /* nothing to do */ return FALSE; - p = buf + STRLEN(buf); /* go to the end of the buffer */ - if (maxlen && p - buf + 35 >= maxlen) /* getting too long */ + p = buf + STRLEN(buf); /* go to the end of the buffer */ + if (p - buf + 35 >= buflen) /* getting too long */ return FALSE; *p++ = ' '; *p++ = '('; @@ -4213,7 +4218,8 @@ append_arg_number(wp, buf, add_file, maxlen) STRCPY(p, "file "); p += 5; } - sprintf((char *)p, wp->w_arg_idx_invalid ? "(%d) of %d)" + vim_snprintf((char *)p, (size_t)(buflen - (p - buf)), + wp->w_arg_idx_invalid ? "(%d) of %d)" : "%d of %d)", wp->w_arg_idx + 1, ARGCOUNT); return TRUE; } @@ -4996,7 +5002,7 @@ read_viminfo_bufferlist(virp, writing) if (tab != NULL) { *tab++ = '\0'; - col = atoi((char *)tab); + col = (colnr_T)atoi((char *)tab); tab = vim_strrchr(xline, '\t'); if (tab != NULL) { @@ -5034,6 +5040,7 @@ write_viminfo_bufferlist(fp) #endif char_u *line; int max_buffers; + size_t len; if (find_viminfo_parameter('%') == NULL) return; @@ -5042,7 +5049,8 @@ write_viminfo_bufferlist(fp) max_buffers = get_viminfo_parameter('%'); /* Allocate room for the file name, lnum and col. */ - line = alloc(MAXPATHL + 40); +#define LINE_BUF_LEN (MAXPATHL + 40) + line = alloc(LINE_BUF_LEN); if (line == NULL) return; @@ -5068,7 +5076,8 @@ write_viminfo_bufferlist(fp) break; putc('%', fp); home_replace(NULL, buf->b_ffname, line, MAXPATHL, TRUE); - sprintf((char *)line + STRLEN(line), "\t%ld\t%d", + len = STRLEN(line); + vim_snprintf((char *)line + len, len - LINE_BUF_LEN, "\t%ld\t%d", (long)buf->b_last_cursor.lnum, buf->b_last_cursor.col); viminfo_writestring(fp, line); @@ -5226,7 +5235,7 @@ buf_addsign(buf, id, lnum, typenr) return; } - int + linenr_T buf_change_sign_type(buf, markId, typenr) buf_T *buf; /* buffer to store sign in */ int markId; /* sign ID */ @@ -5243,10 +5252,10 @@ buf_change_sign_type(buf, markId, typenr) } } - return 0; + return (linenr_T)0; } - int_u + int buf_getsigntype(buf, lnum, type) buf_T *buf; linenr_T lnum; diff --git a/src/charset.c b/src/charset.c index 0f4b0b992..9bf74a872 100644 --- a/src/charset.c +++ b/src/charset.c @@ -17,7 +17,7 @@ static int win_chartabsize __ARGS((win_T *wp, char_u *p, colnr_T col)); static int win_nolbr_chartabsize __ARGS((win_T *wp, char_u *s, colnr_T col, int *headp)); #endif -static int nr2hex __ARGS((int c)); +static unsigned nr2hex __ARGS((unsigned c)); static int chartab_initialized = FALSE; @@ -664,7 +664,7 @@ transchar_hex(buf, c) } #endif buf[++i] = nr2hex((unsigned)c >> 4); - buf[++i] = nr2hex(c); + buf[++i] = nr2hex((unsigned)c); buf[++i] = '>'; buf[++i] = NUL; } @@ -674,9 +674,9 @@ transchar_hex(buf, c) * Lower case letters are used to avoid the confusion of <F1> being 0xf1 or * function key 1. */ - static int + static unsigned nr2hex(c) - int c; + unsigned c; { if ((c & 0xf) <= 9) return (c & 0xf) + '0'; @@ -884,7 +884,7 @@ vim_iswordc(c) if (c >= 0x100) { if (enc_dbcs != 0) - return dbcs_class((unsigned)c >> 8, c & 0xff) >= 2; + return dbcs_class((unsigned)c >> 8, (unsigned)(c & 0xff)) >= 2; if (enc_utf8) return utf_class(c) >= 2; } @@ -1090,7 +1090,7 @@ win_lbr_chartabsize(wp, s, col, headp) */ numberextra = win_col_off(wp); col2 = col; - colmax = W_WIDTH(wp) - numberextra; + colmax = (colnr_T)(W_WIDTH(wp) - numberextra); if (col >= colmax) { n = colmax + win_col_off2(wp); @@ -1201,17 +1201,17 @@ in_win_border(wp, vcol) win_T *wp; colnr_T vcol; { - colnr_T width1; /* width of first line (after line number) */ - colnr_T width2; /* width of further lines */ + int width1; /* width of first line (after line number) */ + int width2; /* width of further lines */ #ifdef FEAT_VERTSPLIT if (wp->w_width == 0) /* there is no border */ return FALSE; #endif width1 = W_WIDTH(wp) - win_col_off(wp); - if (vcol < width1 - 1) + if ((int)vcol < width1 - 1) return FALSE; - if (vcol == width1 - 1) + if ((int)vcol == width1 - 1) return TRUE; width2 = width1 + win_col_off2(wp); return ((vcol - width1) % width2 == width2 - 1); @@ -1396,13 +1396,13 @@ getvvcol(wp, pos, start, cursor, end) # ifdef FEAT_MBYTE /* Cannot put the cursor on part of a wide character. */ ptr = ml_get_buf(wp->w_buffer, pos->lnum, FALSE); - if (pos->col < STRLEN(ptr)) + if (pos->col < (colnr_T)STRLEN(ptr)) { int c = (*mb_ptr2char)(ptr + pos->col); if (c != TAB && vim_isprintc(c)) { - endadd = char2cells(c) - 1; + endadd = (colnr_T)(char2cells(c) - 1); if (coladd > endadd) /* past end of line */ endadd = 0; else @@ -1573,10 +1573,16 @@ vim_isxdigit(c) #define LATIN1LOWER 'l' #define LATIN1UPPER 'U' +#ifdef S_SPLINT_S /* splint can't handle some 8 bit chars */ +static char_u latin1flags[] = (char_u *)" "; +static char_u latin1upper[] = (char_u *)" "; +static char_u latin1lower[] = (char_u *)" "; +#else /* !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]%_'abcdefghijklmnopqrstuvwxyz{|}~ */ static char_u latin1flags[257] = " UUUUUUUUUUUUUUUUUUUUUUUUUU llllllllllllllllllllllllll UUUUUUUUUUUUUUUUUUUUUUU UUUUUUUllllllllllllllllllllllll llllllll"; static char_u latin1upper[257] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~"; static char_u latin1lower[257] = " !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; +#endif int vim_islower(c) diff --git a/src/cleanlint.vim b/src/cleanlint.vim new file mode 100644 index 000000000..116a9e15d --- /dev/null +++ b/src/cleanlint.vim @@ -0,0 +1,27 @@ +" Vim tool: Filter output of splint +" +" Maintainer: Bram Moolenaar <Bram@vim.org> +" Last Change: 2009 May 05 + +" Usage: redirect output of "make lint" to a file, edit that file with Vim and +" :call CleanLint() +" This deletes irrelevant messages. What remains might be valid warnings. + +fun! CleanLint() + g/^ Types are incompatible/lockmarks d + g/Assignment of dev_t to __dev_t:/lockmarks d + g/Assignment of __dev_t to dev_t:/lockmarks d + g/Operands of == have incompatible types (__dev_t, dev_t): /lockmarks d + g/Operands of == have incompatible types (unsigned int, int): /lockmarks d + g/Assignment of char to char_u: /lockmarks d + g/Assignment of unsigned int to int: /lockmarks d + g/Assignment of colnr_T to int: /lockmarks d + g/Assignment of int to char_u: /lockmarks d + g/Function .* expects arg . to be wint_t gets int: /lockmarks d + g/^digraph.c.*digraphdefault.*is type char, expects char_u:/lockmarks d + g/^digraph.c.*Additional initialization errors for digraphdefault not reported/lockmarks d + g/Function strncasecmp expects arg 3 to be int gets size_t: /lockmarks d + g/ To ignore signs in type comparisons use +ignoresigns/lockmarks d + g/ To allow arbitrary integral types to match any integral type, use +matchanyintegral./lockmarks d + g/ To allow arbitrary integral types to match long unsigned, use +longintegral./lockmarks d +endfun diff --git a/src/digraph.c b/src/digraph.c index b867598a6..74b7fb219 100644 --- a/src/digraph.c +++ b/src/digraph.c @@ -32,7 +32,7 @@ static int getexactdigraph __ARGS((int, int, int)); static void printdigraph __ARGS((digr_T *)); /* digraphs added by the user */ -static garray_T user_digraphs = {0, 0, sizeof(digr_T), 10, NULL}; +static garray_T user_digraphs = {0, 0, (int)sizeof(digr_T), 10, NULL}; /* * Note: Characters marked with XX are not included literally, because some @@ -481,7 +481,7 @@ static digr_T digraphdefault[] = {'\'', ' ', 213}, /* ' */ {'-', ':', 214}, /* */ {'D', 'I', 215}, /* */ - {'y', ':', 216}, /* */ + {'y', ':', 216}, /* <8e> */ {'Y', ':', 217}, /* */ {'/', '/', 218}, /* */ {'E', '=', 219}, /* Euro System >=8.5 */ @@ -2371,10 +2371,10 @@ printdigraph(dp) } else #endif - *p++ = dp->result; + *p++ = (char_u)dp->result; if (char2cells(dp->result) == 1) *p++ = ' '; - sprintf((char *)p, " %3d", dp->result); + vim_snprintf((char *)p, sizeof(buf) - (p - buf), " %3d", dp->result); msg_outtrans(buf); } } @@ -2395,7 +2395,10 @@ typedef struct static void keymap_unload __ARGS((void)); /* - * Set up key mapping tables for the 'keymap' option + * Set up key mapping tables for the 'keymap' option. + * Returns NULL if OK, an error message for failure. This only needs to be + * used when setting the option, not later when the value has already been + * checked. */ char_u * keymap_init() @@ -2412,25 +2415,29 @@ keymap_init() else { char_u *buf; + size_t buflen; /* Source the keymap file. It will contain a ":loadkeymap" command * which will call ex_loadkeymap() below. */ - buf = alloc((unsigned)(STRLEN(curbuf->b_p_keymap) + buflen = STRLEN(curbuf->b_p_keymap) # ifdef FEAT_MBYTE - + STRLEN(p_enc) + + STRLEN(p_enc) # endif - + 14)); + + 14; + buf = alloc((unsigned)buflen); if (buf == NULL) return e_outofmem; # ifdef FEAT_MBYTE /* try finding "keymap/'keymap'_'encoding'.vim" in 'runtimepath' */ - sprintf((char *)buf, "keymap/%s_%s.vim", curbuf->b_p_keymap, p_enc); + vim_snprintf((char *)buf, buflen, "keymap/%s_%s.vim", + curbuf->b_p_keymap, p_enc); if (source_runtime(buf, FALSE) == FAIL) # endif { /* try finding "keymap/'keymap'.vim" in 'runtimepath' */ - sprintf((char *)buf, "keymap/%s.vim", curbuf->b_p_keymap); + vim_snprintf((char *)buf, buflen, "keymap/%s.vim", + curbuf->b_p_keymap); if (source_runtime(buf, FALSE) == FAIL) { vim_free(buf); diff --git a/src/edit.c b/src/edit.c index b998f8dfb..65a94a2b0 100644 --- a/src/edit.c +++ b/src/edit.c @@ -57,7 +57,7 @@ static char *ctrl_x_msgs[] = N_(" Keyword Local completion (^N^P)"), }; -static char_u e_hitend[] = N_("Hit end of paragraph"); +static char e_hitend[] = N_("Hit end of paragraph"); /* * Structure used to store one match for insert completion. @@ -69,7 +69,11 @@ struct compl_S compl_T *cp_prev; char_u *cp_str; /* matched text */ char cp_icase; /* TRUE or FALSE: ignore case */ +#ifdef S_SPLINT_S /* splint can't handle array of pointers */ + char_u **cp_text; /* text for the menu */ +#else char_u *(cp_text[CPT_COUNT]); /* text for the menu */ +#endif char_u *cp_fname; /* file containing the match, allocated when * cp_flags has FREE_FNAME */ int cp_flags; /* ORIGINAL_TEXT, CONT_S_IPOS or FREE_FNAME */ @@ -306,7 +310,7 @@ edit(cmdchar, startln, count) int c = 0; char_u *ptr; int lastc; - colnr_T mincol; + int mincol; static linenr_T o_lnum = 0; int i; int did_backspace = TRUE; /* previous char was backspace */ @@ -387,7 +391,7 @@ edit(cmdchar, startln, count) if (startln) Insstart.col = 0; } - Insstart_textlen = linetabsize(ml_get_curline()); + Insstart_textlen = (colnr_T)linetabsize(ml_get_curline()); Insstart_blank_vcol = MAXCOL; if (!did_ai) ai_col = 0; @@ -653,7 +657,7 @@ edit(cmdchar, startln, count) mincol = curwin->w_wcol; validate_cursor_col(); - if ((int)curwin->w_wcol < (int)mincol - curbuf->b_p_ts + if ((int)curwin->w_wcol < mincol - curbuf->b_p_ts && curwin->w_wrow == W_WINROW(curwin) + curwin->w_height - 1 - p_so && (curwin->w_cursor.lnum != curwin->w_topline @@ -1773,7 +1777,7 @@ change_indent(type, amount, round, replaced, call_changed_bytes) * Compute the screen column where the cursor should be. */ vcol = get_indent() - vcol; - curwin->w_virtcol = (vcol < 0) ? 0 : vcol; + curwin->w_virtcol = (colnr_T)((vcol < 0) ? 0 : vcol); /* * Advance the cursor until we reach the right screen column. @@ -1800,9 +1804,9 @@ change_indent(type, amount, round, replaced, call_changed_bytes) */ if (vcol != (int)curwin->w_virtcol) { - curwin->w_cursor.col = new_cursor_col; + curwin->w_cursor.col = (colnr_T)new_cursor_col; i = (int)curwin->w_virtcol - vcol; - ptr = alloc(i + 1); + ptr = alloc((unsigned)(i + 1)); if (ptr != NULL) { new_cursor_col += i; @@ -1826,7 +1830,7 @@ change_indent(type, amount, round, replaced, call_changed_bytes) if (new_cursor_col <= 0) curwin->w_cursor.col = 0; else - curwin->w_cursor.col = new_cursor_col; + curwin->w_cursor.col = (colnr_T)new_cursor_col; curwin->w_set_curswant = TRUE; changed_cline_bef_curs(); @@ -1966,7 +1970,7 @@ del_char_after_col(limit_col) #ifdef FEAT_MBYTE if (enc_utf8 && limit_col >= 0) { - int ecol = curwin->w_cursor.col + 1; + colnr_T ecol = curwin->w_cursor.col + 1; /* Make sure the cursor is at the start of a character, but * skip forward again when going too far back because of a @@ -1982,7 +1986,7 @@ del_char_after_col(limit_col) } if (*ml_get_cursor() == NUL || curwin->w_cursor.col == ecol) return FALSE; - del_bytes((long)(ecol - curwin->w_cursor.col), FALSE, TRUE); + del_bytes((long)((int)ecol - curwin->w_cursor.col), FALSE, TRUE); } else #endif @@ -2201,7 +2205,7 @@ ins_compl_add_infercase(str, len, icase, fname, dir, flags) actual_compl_length = compl_length; /* Allocate wide character array for the completion and fill it. */ - wca = (int *)alloc(actual_len * sizeof(int)); + wca = (int *)alloc((unsigned)(actual_len * sizeof(int))); if (wca != NULL) { p = str; @@ -2580,7 +2584,7 @@ ins_compl_make_cyclic() */ void set_completion(startcol, list) - int startcol; + colnr_T startcol; list_T *list; { /* If already doing completions stop it. */ @@ -2591,10 +2595,10 @@ set_completion(startcol, list) if (stop_arrow() == FAIL) return; - if (startcol > (int)curwin->w_cursor.col) + if (startcol > curwin->w_cursor.col) startcol = curwin->w_cursor.col; compl_col = startcol; - compl_length = curwin->w_cursor.col - startcol; + compl_length = (int)curwin->w_cursor.col - (int)startcol; /* compl_pattern doesn't need to be set */ compl_orig_text = vim_strnsave(ml_get_curline() + compl_col, compl_length); if (compl_orig_text == NULL || ins_compl_add(compl_orig_text, @@ -2860,7 +2864,6 @@ ins_compl_dictionaries(dict_start, pat, flags, thesaurus) regmatch_T regmatch; char_u **files; int count; - int i; int save_p_scs; int dir = compl_direction; @@ -2892,17 +2895,18 @@ ins_compl_dictionaries(dict_start, pat, flags, thesaurus) if (ctrl_x_mode == CTRL_X_WHOLE_LINE) { char_u *pat_esc = vim_strsave_escaped(pat, (char_u *)"\\"); + size_t len; if (pat_esc == NULL) goto theend; - i = (int)STRLEN(pat_esc) + 10; - ptr = alloc(i); + len = STRLEN(pat_esc) + 10; + ptr = alloc((unsigned)len); if (ptr == NULL) { vim_free(pat_esc); goto theend; } - vim_snprintf((char *)ptr, i, "^\\s*\\zs\\V%s", pat_esc); + vim_snprintf((char *)ptr, len, "^\\s*\\zs\\V%s", pat_esc); regmatch.regprog = vim_regcomp(ptr, RE_MAGIC); vim_free(pat_esc); vim_free(ptr); @@ -2993,7 +2997,7 @@ ins_compl_files(count, files, thesaurus, flags, regmatch, buf, dir) { vim_snprintf((char *)IObuff, IOSIZE, _("Scanning dictionary: %s"), (char *)files[i]); - msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); + (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); } if (fp != NULL) @@ -3311,7 +3315,7 @@ ins_compl_new_leader() static int ins_compl_len() { - int off = curwin->w_cursor.col - compl_col; + int off = (int)curwin->w_cursor.col - (int)compl_col; if (off < 0) return 0; @@ -3347,7 +3351,7 @@ ins_compl_addleader(c) vim_free(compl_leader); compl_leader = vim_strnsave(ml_get_curline() + compl_col, - curwin->w_cursor.col - compl_col); + (int)(curwin->w_cursor.col - compl_col)); if (compl_leader != NULL) ins_compl_new_leader(); } @@ -3395,7 +3399,7 @@ ins_compl_set_original_text(str) ins_compl_addfrommatch() { char_u *p; - int len = curwin->w_cursor.col - compl_col; + int len = (int)curwin->w_cursor.col - (int)compl_col; int c; compl_T *cp; @@ -3961,7 +3965,7 @@ ins_compl_get_exp(ini) : ins_buf->b_sfname == NULL ? (char *)ins_buf->b_fname : (char *)ins_buf->b_sfname); - msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); + (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); } else if (*e_cpt == NUL) break; @@ -3991,7 +3995,7 @@ ins_compl_get_exp(ini) { type = CTRL_X_TAGS; sprintf((char*)IObuff, _("Scanning tags.")); - msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); + (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); } else type = -1; @@ -6320,7 +6324,7 @@ stop_arrow() ins_need_undo = FALSE; } Insstart = curwin->w_cursor; /* new insertion starts here */ - Insstart_textlen = linetabsize(ml_get_curline()); + Insstart_textlen = (colnr_T)linetabsize(ml_get_curline()); ai_col = 0; #ifdef FEAT_VREPLACE if (State & VREPLACE_FLAG) diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 250050e91..e83c6d628 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -1789,7 +1789,7 @@ write_viminfo(file, forceit) * overwrite a user's viminfo file after a "su root", with a * viminfo file that the user can't read. */ - st_old.st_dev = 0; + st_old.st_dev = (dev_t)0; st_old.st_ino = 0; st_old.st_mode = 0600; if (mch_stat((char *)fname, &st_old) == 0 @@ -3715,7 +3715,7 @@ do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin) /* If the window options were changed may need to set the spell language. * Can only do this after the buffer has been properly setup. */ if (did_get_winopts && curwin->w_p_spell && *curbuf->b_p_spl != NUL) - did_set_spelllang(curbuf); + (void)did_set_spelllang(curbuf); #endif if (command == NULL) @@ -3788,7 +3788,7 @@ do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin) #ifdef FEAT_KEYMAP if (curbuf->b_kmap_state & KEYMAP_INIT) - keymap_init(); + (void)keymap_init(); #endif --RedrawingDisabled; diff --git a/src/globals.h b/src/globals.h index 548927afd..b870962d4 100644 --- a/src/globals.h +++ b/src/globals.h @@ -524,7 +524,7 @@ EXTERN win_T *lastwin; /* last window */ EXTERN win_T *prevwin INIT(= NULL); /* previous window */ # define W_NEXT(wp) ((wp)->w_next) # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next) -#define FOR_ALL_TAB_WINDOWS(tp, wp) \ +# define FOR_ALL_TAB_WINDOWS(tp, wp) \ for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \ for ((wp) = ((tp) == curtab) \ ? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next) @@ -718,7 +718,7 @@ EXTERN int can_si_back INIT(= FALSE); EXTERN pos_T saved_cursor /* w_cursor before formatting text. */ # ifdef DO_INIT - = INIT_POS_T + = INIT_POS_T(0, 0, 0) # endif ; @@ -1039,7 +1039,7 @@ EXTERN char_u *autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */ EXTERN int did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */ EXTERN pos_T last_cursormoved /* for CursorMoved event */ # ifdef DO_INIT - = INIT_POS_T + = INIT_POS_T(0, 0, 0) # endif ; #endif @@ -6400,7 +6400,7 @@ cursor_pos_info() { getvcols(curwin, &min_pos, &max_pos, &min_pos.col, &max_pos.col); - sprintf((char *)buf1, _("%ld Cols; "), + vim_snprintf((char *)buf1, sizeof(buf1), _("%ld Cols; "), (long)(oparg.end_vcol - oparg.start_vcol + 1)); } else @@ -6408,13 +6408,15 @@ cursor_pos_info() if (char_count_cursor == byte_count_cursor && char_count == byte_count) - sprintf((char *)IObuff, _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"), + vim_snprintf((char *)IObuff, IOSIZE, + _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"), buf1, line_count_selected, (long)curbuf->b_ml.ml_line_count, word_count_cursor, word_count, byte_count_cursor, byte_count); else - sprintf((char *)IObuff, _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld Bytes"), + vim_snprintf((char *)IObuff, IOSIZE, + _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld Bytes"), buf1, line_count_selected, (long)curbuf->b_ml.ml_line_count, word_count_cursor, word_count, @@ -6426,20 +6428,22 @@ cursor_pos_info() { p = ml_get_curline(); validate_virtcol(); - col_print(buf1, (int)curwin->w_cursor.col + 1, + col_print(buf1, sizeof(buf1), (int)curwin->w_cursor.col + 1, (int)curwin->w_virtcol + 1); - col_print(buf2, (int)STRLEN(p), linetabsize(p)); + col_print(buf2, sizeof(buf2), (int)STRLEN(p), linetabsize(p)); if (char_count_cursor == byte_count_cursor && char_count == byte_count) - sprintf((char *)IObuff, _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"), + vim_snprintf((char *)IObuff, IOSIZE, + _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"), (char *)buf1, (char *)buf2, (long)curwin->w_cursor.lnum, (long)curbuf->b_ml.ml_line_count, word_count_cursor, word_count, byte_count_cursor, byte_count); else - sprintf((char *)IObuff, _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of %ld"), + vim_snprintf((char *)IObuff, IOSIZE, + _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of %ld"), (char *)buf1, (char *)buf2, (long)curwin->w_cursor.lnum, (long)curbuf->b_ml.ml_line_count, diff --git a/src/os_unix.c b/src/os_unix.c index 703b93231..d5e681281 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -199,7 +199,9 @@ static int save_patterns __ARGS((int num_pat, char_u **pat, int *num_file, char_ #endif #ifndef SIG_ERR -# define SIG_ERR ((RETSIGTYPE (*)())-1) +# ifndef S_SPLINT_S +# define SIG_ERR ((RETSIGTYPE (*)())-1) +# endif #endif /* volatile because it is used in signal handler sig_winch(). */ @@ -441,7 +443,9 @@ mch_char_avail() #if defined(HAVE_TOTAL_MEM) || defined(PROTO) # ifdef HAVE_SYS_RESOURCE_H -# include <sys/resource.h> +# ifndef S_SPLINT_S /* splint crashes on bits/resource.h */ +# include <sys/resource.h> +# endif # endif # if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_SYSCTL) # include <sys/sysctl.h> diff --git a/src/os_unix.h b/src/os_unix.h index a337183c4..0a37763c1 100644 --- a/src/os_unix.h +++ b/src/os_unix.h @@ -53,7 +53,9 @@ #endif #ifdef HAVE_UNISTD_H -# include <unistd.h> +# ifndef S_SPLINT_S /* splint crashes on bits/confname.h */ +# include <unistd.h> +# endif #endif #ifdef HAVE_LIBC_H diff --git a/src/proto/buffer.pro b/src/proto/buffer.pro index e14ee8f4c..a5fe42ff8 100644 --- a/src/proto/buffer.pro +++ b/src/proto/buffer.pro @@ -37,13 +37,12 @@ void buflist_altfpos __ARGS((win_T *win)); int otherfile __ARGS((char_u *ffname)); void buf_setino __ARGS((buf_T *buf)); void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate)); -void col_print __ARGS((char_u *buf, int col, int vcol)); +void col_print __ARGS((char_u *buf, size_t buflen, int col, int vcol)); void maketitle __ARGS((void)); void resettitle __ARGS((void)); void free_titles __ARGS((void)); int build_stl_str_hl __ARGS((win_T *wp, char_u *out, size_t outlen, char_u *fmt, int use_sandbox, int fillchar, int maxwidth, struct stl_hlrec *hltab, struct stl_hlrec *tabtab)); -void get_rel_pos __ARGS((win_T *wp, char_u *str)); -int append_arg_number __ARGS((win_T *wp, char_u *buf, int add_file, int maxlen)); +void get_rel_pos __ARGS((win_T *wp, char_u *buf, int buflen)); char_u *fix_fname __ARGS((char_u *fname)); void fname_expand __ARGS((buf_T *buf, char_u **ffname, char_u **sfname)); char_u *alist_name __ARGS((aentry_T *aep)); @@ -54,8 +53,8 @@ int read_viminfo_bufferlist __ARGS((vir_T *virp, int writing)); void write_viminfo_bufferlist __ARGS((FILE *fp)); char *buf_spname __ARGS((buf_T *buf)); void buf_addsign __ARGS((buf_T *buf, int id, linenr_T lnum, int typenr)); -int buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr)); -int_u buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type)); +linenr_T buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr)); +int buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type)); linenr_T buf_delsign __ARGS((buf_T *buf, int id)); int buf_findsign __ARGS((buf_T *buf, int id)); int buf_findsign_id __ARGS((buf_T *buf, linenr_T lnum)); diff --git a/src/proto/edit.pro b/src/proto/edit.pro index 0fb787fad..e2398c452 100644 --- a/src/proto/edit.pro +++ b/src/proto/edit.pro @@ -8,7 +8,7 @@ void truncate_spaces __ARGS((char_u *line)); void backspace_until_column __ARGS((int col)); int vim_is_ctrl_x_key __ARGS((int c)); int ins_compl_add_infercase __ARGS((char_u *str, int len, int icase, char_u *fname, int dir, int flags)); -void set_completion __ARGS((int startcol, list_T *list)); +void set_completion __ARGS((colnr_T startcol, list_T *list)); void ins_compl_show_pum __ARGS((void)); char_u *find_word_start __ARGS((char_u *ptr)); char_u *find_word_end __ARGS((char_u *ptr)); diff --git a/src/screen.c b/src/screen.c index 6455f112d..c2d7c2029 100644 --- a/src/screen.c +++ b/src/screen.c @@ -9481,13 +9481,15 @@ win_redr_ruler(wp, always) win_T *wp; int always; { - char_u buffer[70]; +#define RULER_BUF_LEN 70 + char_u buffer[RULER_BUF_LEN]; int row; int fillchar; int attr; int empty_line = FALSE; colnr_T virtcol; int i; + size_t len; int o; #ifdef FEAT_VERTSPLIT int this_ru_col; @@ -9602,11 +9604,12 @@ win_redr_ruler(wp, always) * Some sprintfs return the length, some return a pointer. * To avoid portability problems we use strlen() here. */ - sprintf((char *)buffer, "%ld,", + vim_snprintf((char *)buffer, RULER_BUF_LEN, "%ld,", (wp->w_buffer->b_ml.ml_flags & ML_EMPTY) ? 0L : (long)(wp->w_cursor.lnum)); - col_print(buffer + STRLEN(buffer), + len = STRLEN(buffer); + col_print(buffer + len, RULER_BUF_LEN - len, empty_line ? 0 : (int)wp->w_cursor.col + 1, (int)virtcol + 1); @@ -9616,7 +9619,7 @@ win_redr_ruler(wp, always) * screen up on some terminals). */ i = (int)STRLEN(buffer); - get_rel_pos(wp, buffer + i + 1); + get_rel_pos(wp, buffer + i + 1, RULER_BUF_LEN - i - 1); o = i + vim_strsize(buffer + i + 1); #ifdef FEAT_WINDOWS if (wp->w_status_height == 0) /* can't use last char of screen */ @@ -9643,7 +9646,7 @@ win_redr_ruler(wp, always) buffer[i++] = fillchar; ++o; } - get_rel_pos(wp, buffer + i); + get_rel_pos(wp, buffer + i, RULER_BUF_LEN - i); } /* Truncate at window boundary. */ #ifdef FEAT_MBYTE diff --git a/src/structs.h b/src/structs.h index 329676e59..f4f1a877f 100644 --- a/src/structs.h +++ b/src/structs.h @@ -33,9 +33,9 @@ typedef struct } pos_T; #ifdef FEAT_VIRTUALEDIT -# define INIT_POS_T {0, 0, 0} +# define INIT_POS_T(l, c, ca) {l, c, ca} #else -# define INIT_POS_T {0, 0} +# define INIT_POS_T(l, c, ca) {l, c} #endif /* @@ -1166,7 +1166,7 @@ struct file_buffer char_u *b_fname; /* current file name */ #ifdef UNIX - int b_dev; /* device number (-1 if not set) */ + dev_t b_dev; /* device number (-1 if not set) */ ino_t b_ino; /* inode number */ #endif #ifdef FEAT_CW_EDITOR @@ -1645,7 +1645,11 @@ struct tabpage_S #endif #ifdef FEAT_DIFF diff_T *tp_first_diff; +# ifdef S_SPLINT_S /* splint doesn't understand the array of pointers */ + buf_T **tp_diffbuf; +# else buf_T *(tp_diffbuf[DB_COUNT]); +# endif int tp_diff_invalid; /* list of diffs is outdated */ #endif frame_T *tp_snapshot; /* window layout snapshot */ diff --git a/src/version.c b/src/version.c index 8aa0729de..028a49ea5 100644 --- a/src/version.c +++ b/src/version.c @@ -677,6 +677,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 167, +/**/ 166, /**/ 165, |