view src/osdef1.h.in @ 34094:0b25a862bf0c v9.1.0014

patch 9.1.0014: incorrect use of W_WINROW in edit.c Commit: https://github.com/vim/vim/commit/b1ed7ec9f7d1a0142d4f1c8c83bab9172bc92c7c Author: zeertzjq <zeertzjq@outlook.com> Date: Fri Jan 5 18:11:43 2024 +0100 patch 9.1.0014: incorrect use of W_WINROW in edit.c Problem: incorrect use of W_WINROW in edit.c Solution: compare against curwin->w_height instead Remove incorrect use of W_WINROW In structs.h it is mentioned that w_wrow is relative to w_winrow, so using W_WINROW doesn't make sense when comparing with window height. This change won't lead to any observable behavior change: The condition intends to check if there are 'scrolloff' lines between the current cursor when the bottom of the window. When W_WINROW(curwin) is added to curwin->w_height - 1 - get_scrolloff_value(), the condition is instead satisfied when the cursor is on some screen line below that position. However, - If 'scrolloff' is smaller than half the window height, this condition can only be satisfied when W_WINROW(curwin) == 0. And if it is not satisfied, update_topline() does the actual scrolling. - If 'scrolloff' is larger than half the window height, update_topline() will put the cursor at the center of the window soon afterwards anyway, because set_topline() now unsets VALID_TOPLINE flag starting from https://github.com/vim/vim-history/commit/7db7bb45b0f919ff0615d463ebd4fde881c69d1f. To put it in another way, https://github.com/vim/vim-history/commit/7db7bb45b0f919ff0615d463ebd4fde881c69d1f makes the update_topline() just below correct the mistakes made in this block, so this incorrect use of W_WINROW() no longer affects observable behavior. closes: #12331 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Fri, 05 Jan 2024 18:30:03 +0100
parents 9781c150eddd
children
line wrap: on
line source

/* autoconf cannot fiddle out declarations. Use our homebrewn tools. (jw) */
/*
 * Declarations that may cause conflicts belong here so that osdef.sh
 * can clean out the forest. Everything else belongs in os_unix.h
 *
 * How this works:
 * - This file contains all unix prototypes that Vim might need.
 * - The shell script osdef.sh is executed at compile time to remove all the
 *   prototypes that are in an include file. This results in osdef.h.
 * - osdef.h is included in vim.h.
 *
 * sed cannot always handle so many commands, this is file 1 of 2
 */

extern int	printf(char *, ...);
extern int	fprintf(FILE *, char *, ...);
extern int	sprintf(char *, char *, ...);
extern int	sscanf(char *, char *, ...);
#ifndef fopen	/* could be redefined to fopen64() */
extern FILE	*fopen(const char *, const char *);
#endif
extern int	fclose(FILE *);
extern int	fseek(FILE *, long, int);
#ifdef HAVE_FSEEKO
extern int	fseeko(FILE *, off_t, int);
#endif
extern long	ftell(FILE *);
#ifdef HAVE_FSEEKO
extern off_t	ftello(FILE *);
#endif
extern void	rewind(FILE *);
extern int	fread(char *, int, int, FILE *);
extern int	fwrite(char *, int, int, FILE *);
extern int	fputs(char *, FILE *);
#ifndef ferror	/* let me say it again: "macros should never have prototypes" */
extern int	ferror(FILE *);
#endif
extern int	fflush(FILE *);
#if defined(sun) || defined(_SEQUENT_)
/* used inside of stdio macros getc(), puts(), putchar()... */
extern int	_flsbuf(int, FILE *);
extern int	_filbuf(FILE *);
#endif

#if !defined(HAVE_SELECT)
struct pollfd;			/* for poll() */
extern int	poll(struct pollfd *, long, int);
#endif

#ifdef HAVE_MEMSET
extern void	*memset(void *, int, size_t);
#endif
extern int	memcmp(const void *, const void *, size_t);
#ifdef HAVE_STRPBRK
extern char	*strpbrk(const char *, const char *);
#endif
#ifdef USEBCOPY
extern void	bcopy(char *, char *, int);
#else
# ifdef USEMEMCPY
extern void	memcpy(char *, char *, int);
# else
#  ifdef USEMEMMOVE
extern void	memmove(char *, char *, int);
#  endif
# endif
#endif
#if !defined(__BIONIC__) && !defined(__HAIKU__)  // Android's libc #defines bzero to memset.
// used inside of FD_ZERO macro
extern void	bzero(void *, size_t);
#endif
#ifdef HAVE_SETSID
extern pid_t	setsid(void);
#endif
#ifdef HAVE_SETPGID
extern int	setpgid(pid_t, pid_t);
#endif
#ifdef HAVE_STRTOL
extern int	strtol(char *, char **, int);
#endif
#ifdef HAVE_STRFTIME
extern size_t	strftime(char *, size_t, char *, struct tm *);
#endif
#ifdef HAVE_STRCASECMP
extern int	strcasecmp(char *, char *);
#endif
#ifdef HAVE_STRNCASECMP
extern int	strncasecmp(char *, char *, size_t);
#endif
#ifndef strdup
extern char	*strdup(const char *);
#endif
extern int	atoi(char *);
extern int	atol(char *);

#ifndef USE_SYSTEM
extern int	fork(void);
# ifndef __TANDEM
extern int	execvp(const char *, const char **);
# endif
extern int	wait(int *); /* will this break things ...? */
extern int	waitpid(pid_t, int *, int);
#endif

extern int	toupper(int);
extern int	tolower(int);

extern void (*signal(int, void (*func) SIGPROTOARG)) SIGPROTOARG;
#ifdef HAVE_SIGSET
extern void (*sigset(int, void (*func) SIGPROTOARG)) SIGPROTOARG;
#endif

#if defined(HAVE_SETJMP_H)
# ifdef HAVE_SIGSETJMP
extern int	sigsetjmp(sigjmp_buf, int);
extern void	siglongjmp(sigjmp_buf, int);
# else
extern int	setjmp(jmp_buf);
extern void	longjmp(jmp_buf, int);
# endif
#endif

extern int	kill(int, int);

#ifndef __TANDEM
extern int	access(char *, int);
#endif
extern int	fsync(int);
extern int	fchown(int, int, int);
#if defined(HAVE_GETCWD) && !defined(sun) && !defined(__TANDEM)
extern char	*getcwd(char *, int);
#else
extern char	*getwd(char *);
#endif
#ifndef __alpha	/* suggested by Campbell */
extern int	ioctl(int, int, ...);
#endif
extern int	chmod(const char *, mode_t);