[neovim] 02/05: Use int as the standard type for boolean options.
James McCoy
jamessan at debian.org
Thu Nov 3 00:37:29 UTC 2016
This is an automated email from the git hooks/post-receive script.
jamessan pushed a commit to branch debian/sid
in repository neovim.
commit 10f924746b5ab829f645a70056c3bbf14dfe905c
Author: James McCoy <jamessan at jamessan.com>
Date: Sun Oct 30 23:18:29 2016 -0400
Use int as the standard type for boolean options.
All options are accessed by passing char_u pointers around, casting the
pointer to the right pointer type for the specific option, and then
dereferencing that pointer.
This dance works fine on little-endian systems when some bool options
are int types (as in Vim) and some are bool types (as would make more
sense), but on big-endian systems *(int *)varp when varp is pointing to
a bool will read random memory.
Therefore, all boolean options must remain a consistent type and int is
currently the easiest to choose.
---
src/nvim/buffer_defs.h | 4 ++--
src/nvim/option.c | 14 +++++++-------
src/nvim/option_defs.h | 16 +++++++---------
3 files changed, 16 insertions(+), 18 deletions(-)
diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h
index ab59876..483e301 100644
--- a/src/nvim/buffer_defs.h
+++ b/src/nvim/buffer_defs.h
@@ -488,7 +488,7 @@ struct file_buffer {
bool file_id_valid;
FileID file_id;
- bool b_changed; /* 'modified': Set to true if something in the
+ int b_changed; /* 'modified': Set to true if something in the
file has been changed and not written out. */
int b_changedtick; /* incremented for each change, also for undo */
@@ -655,7 +655,7 @@ struct file_buffer {
long b_p_sts; ///< 'softtabstop'
long b_p_sts_nopaste; ///< b_p_sts saved for paste mode
char_u *b_p_sua; ///< 'suffixesadd'
- bool b_p_swf; ///< 'swapfile'
+ int b_p_swf; ///< 'swapfile'
long b_p_smc; ///< 'synmaxcol'
char_u *b_p_syn; ///< 'syntax'
long b_p_ts; ///< 'tabstop'
diff --git a/src/nvim/option.c b/src/nvim/option.c
index 81919c0..5f338ea 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -2527,7 +2527,7 @@ did_set_string_option (
else if (varp == &p_sbo) {
if (check_opt_strings(p_sbo, p_scbopt_values, TRUE) != OK)
errmsg = e_invarg;
- } else if (varp == &p_ambw || (bool *)varp == &p_emoji) {
+ } else if (varp == &p_ambw || (int *)varp == &p_emoji) {
// 'ambiwidth'
if (check_opt_strings(p_ambw, p_ambw_values, false) != OK) {
errmsg = e_invarg;
@@ -3720,7 +3720,7 @@ set_bool_option (
did_set_title(FALSE);
} else if ((int *)varp == &p_icon) {
did_set_title(TRUE);
- } else if ((bool *)varp == &curbuf->b_changed) {
+ } else if ((int *)varp == &curbuf->b_changed) {
if (!value)
save_file_ff(curbuf); /* Buffer is unchanged */
redraw_titles();
@@ -3750,10 +3750,10 @@ set_bool_option (
else if ((int *)varp == &curwin->w_p_wrap) {
if (curwin->w_p_wrap)
curwin->w_leftcol = 0;
- } else if ((bool *)varp == &p_ea) {
+ } else if ((int *)varp == &p_ea) {
if (p_ea && !old_value)
win_equal(curwin, false, 0);
- } else if ((bool *)varp == &p_acd) {
+ } else if ((int *)varp == &p_acd) {
/* Change directories when the 'acd' option is set now. */
do_autochdir();
}
@@ -4513,7 +4513,7 @@ get_option_value (
else {
/* Special case: 'modified' is b_changed, but we also want to consider
* it set when 'ff' or 'fenc' changed. */
- if ((bool *)varp == &curbuf->b_changed)
+ if ((int *)varp == &curbuf->b_changed)
*numval = curbufIsChanged();
else
*numval = *(int *)varp;
@@ -4885,8 +4885,8 @@ showoneopt (
varp = get_varp_scope(p, opt_flags);
/* for 'modified' we also need to check if 'ff' or 'fenc' changed. */
- if ((p->flags & P_BOOL) && ((bool *)varp == &curbuf->b_changed
- ? !curbufIsChanged() : !*(bool *)varp))
+ if ((p->flags & P_BOOL) && ((int *)varp == &curbuf->b_changed
+ ? !curbufIsChanged() : !*(int *)varp))
MSG_PUTS("no");
else if ((p->flags & P_BOOL) && *(int *)varp < 0)
MSG_PUTS("--");
diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h
index fdfcd1f..4374637 100644
--- a/src/nvim/option_defs.h
+++ b/src/nvim/option_defs.h
@@ -1,8 +1,6 @@
#ifndef NVIM_OPTION_DEFS_H
#define NVIM_OPTION_DEFS_H
-#include <stdbool.h>
-
#include "nvim/types.h"
#include "nvim/macros.h" // For EXTERN
@@ -297,7 +295,7 @@ enum {
*/
EXTERN long p_aleph; /* 'aleph' */
-EXTERN bool p_acd; /* 'autochdir' */
+EXTERN int p_acd; /* 'autochdir' */
EXTERN char_u *p_ambw; /* 'ambiwidth' */
EXTERN int p_ar; /* 'autoread' */
EXTERN int p_aw; /* 'autowrite' */
@@ -403,9 +401,9 @@ static char *(p_dy_values[]) = { "lastline", "truncate", "uhex", NULL };
#define DY_TRUNCATE 0x002
#define DY_UHEX 0x004
EXTERN int p_ed; // 'edcompatible'
-EXTERN bool p_emoji; // 'emoji'
+EXTERN int p_emoji; // 'emoji'
EXTERN char_u *p_ead; // 'eadirection'
-EXTERN bool p_ea; // 'equalalways'
+EXTERN int p_ea; // 'equalalways'
EXTERN char_u *p_ep; // 'equalprg'
EXTERN int p_eb; // 'errorbells'
EXTERN char_u *p_ef; // 'errorfile'
@@ -417,7 +415,7 @@ EXTERN int p_ek; // 'esckeys'
EXTERN int p_exrc; // 'exrc'
EXTERN char_u *p_fencs; // 'fileencodings'
EXTERN char_u *p_ffs; // 'fileformats'
-EXTERN bool p_fic; // 'fileignorecase'
+EXTERN int p_fic; // 'fileignorecase'
EXTERN char_u *p_fcl; // 'foldclose'
EXTERN long p_fdls; // 'foldlevelstart'
EXTERN char_u *p_fdo; // 'foldopen'
@@ -622,7 +620,7 @@ EXTERN long p_titlelen; ///< 'titlelen'
EXTERN char_u *p_titleold; ///< 'titleold'
EXTERN char_u *p_titlestring; ///< 'titlestring'
EXTERN char_u *p_tsr; ///< 'thesaurus'
-EXTERN bool p_tgc; ///< 'termguicolors'
+EXTERN int p_tgc; ///< 'termguicolors'
EXTERN int p_ttimeout; ///< 'ttimeout'
EXTERN long p_ttm; ///< 'ttimeoutlen'
EXTERN char_u *p_udir; ///< 'undodir'
@@ -659,14 +657,14 @@ EXTERN char_u *p_wig; /* 'wildignore' */
EXTERN char_u *p_ww; /* 'whichwrap' */
EXTERN long p_wc; /* 'wildchar' */
EXTERN long p_wcm; /* 'wildcharm' */
-EXTERN bool p_wic; ///< 'wildignorecase'
+EXTERN int p_wic; ///< 'wildignorecase'
EXTERN char_u *p_wim; /* 'wildmode' */
EXTERN int p_wmnu; /* 'wildmenu' */
EXTERN long p_wh; /* 'winheight' */
EXTERN long p_wmh; /* 'winminheight' */
EXTERN long p_wmw; /* 'winminwidth' */
EXTERN long p_wiw; /* 'winwidth' */
-EXTERN bool p_ws; /* 'wrapscan' */
+EXTERN int p_ws; /* 'wrapscan' */
EXTERN int p_write; /* 'write' */
EXTERN int p_wa; /* 'writeany' */
EXTERN int p_wb; /* 'writebackup' */
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-vim/neovim.git
More information about the pkg-vim-maintainers
mailing list