Mercurial > vim
diff src/userfunc.c @ 33988:7c30841c60a0 v9.0.2180
patch 9.0.2180: POSIX function name in exarg causes issues
Commit: https://github.com/vim/vim/commit/6fdb6280821a822768df5689a5d727e37d38306c
Author: Zoltan Arpadffy <zoltan.arpadffy@gmail.com>
Date: Tue Dec 19 20:53:07 2023 +0100
patch 9.0.2180: POSIX function name in exarg causes issues
Problem: POSIX function name in exarg struct causes issues
on OpenVMS
Solution: Rename getline member in exarg struct to ea_getline,
remove isinf() workaround for VMS
There are compilers that do not treat well POSIX functions - like
getline - usage in the structs.
Older VMS compilers could digest this... but the newer OpenVMS compilers
( like VSI C x86-64 X7.4-843 (GEM 50XB9) ) cannot deal with these
structs. This could be limited to getline() that is defined via
getdelim() and might not affect all POSIX functions in general - but
avoiding POSIX function names usage in the structs is a "safe side"
practice without compromising the functionality or the code readability.
The previous OpenVMS X86 port used a workaround limiting the compiler
capabilities using __CRTL_VER_OVERRIDE=80400000
In order to make the OpenVMS port future proof, this pull request
proposes a possible solution.
closes: #13704
Signed-off-by: Zoltan Arpadffy <zoltan.arpadffy@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 19 Dec 2023 21:00:04 +0100 |
parents | bdd408288d95 |
children | 1489ba07ecb4 |
line wrap: on
line diff
--- a/src/userfunc.c +++ b/src/userfunc.c @@ -198,10 +198,10 @@ get_function_line( { char_u *theline; - if (eap->getline == NULL) + if (eap->ea_getline == NULL) theline = getcmdline(':', 0L, indent, 0); else - theline = eap->getline(':', eap->cookie, indent, getline_options); + theline = eap->ea_getline(':', eap->cookie, indent, getline_options); if (theline != NULL) { if (lines_to_free->ga_len > 0 @@ -264,7 +264,7 @@ get_function_args( p = arg; while (*p != endchar) { - while (eap != NULL && eap->getline != NULL + while (eap != NULL && eap->ea_getline != NULL && (*p == NUL || (VIM_ISWHITE(*whitep) && *p == '#'))) { // End of the line, get the next one. @@ -889,7 +889,7 @@ get_function_body( // Detect having skipped over comment lines to find the return // type. Add NULL lines to keep the line count correct. - sourcing_lnum_off = get_sourced_lnum(eap->getline, eap->cookie); + sourcing_lnum_off = get_sourced_lnum(eap->ea_getline, eap->cookie); if (SOURCING_LNUM < sourcing_lnum_off) { sourcing_lnum_off -= SOURCING_LNUM; @@ -952,7 +952,7 @@ get_function_body( } // Detect line continuation: SOURCING_LNUM increased more than one. - sourcing_lnum_off = get_sourced_lnum(eap->getline, eap->cookie); + sourcing_lnum_off = get_sourced_lnum(eap->ea_getline, eap->cookie); if (SOURCING_LNUM < sourcing_lnum_off) sourcing_lnum_off -= SOURCING_LNUM; else @@ -1349,7 +1349,7 @@ lambda_function_body( fill_exarg_from_cctx(&eap, evalarg->eval_cctx); else { - eap.getline = evalarg->eval_getline; + eap.ea_getline = evalarg->eval_getline; eap.cookie = evalarg->eval_cookie; }