annotate src/message_test.c @ 33862:242b964d6269 v9.0.2140

patch 9.0.2140: [security]: use-after-free in win-enter Commit: https://github.com/vim/vim/commit/eec0c2b3a4cfab93dd8d4adaa60638d47a2bbc8a Author: Christian Brabandt <cb@256bit.org> Date: Tue Nov 28 22:03:48 2023 +0100 patch 9.0.2140: [security]: use-after-free in win-enter Problem: [security]: use-after-free in win-enter Solution: validate window pointer before calling win_enter() win_goto() may stop visual mode, if it is active. However, this may in turn trigger the ModeChanged autocommand, which could potentially free the wp pointer which was valid before now became stale and points to now freed memory. So before calling win_enter(), let's verify one more time, that the wp pointer still points to a valid window structure. Reported by @henices, thanks! Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Sun, 10 Dec 2023 15:16:01 +0100
parents 05c320c640de
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
2 *
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
4 *
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
8 */
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
9
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
10 /*
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
11 * message_test.c: Unittests for message.c
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
12 */
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
13
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
14 #undef NDEBUG
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
15 #include <assert.h>
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
16
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 11309
diff changeset
17 // Must include main.c because it contains much more than just main()
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
18 #define NO_VIM_MAIN
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
19 #include "main.c"
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
20
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 11309
diff changeset
21 // This file has to be included because some of the tested functions are
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 11309
diff changeset
22 // static.
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
23 #include "message.c"
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
24
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
25 #ifndef MIN
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
26 # define MIN(x,y) ((x) < (y) ? (x) : (y))
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
27 #endif
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
28
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
29 // These formats are not standard in C printf() function.
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
30 // Use a global variable rather than a literal format to disable
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
31 // -Wformat compiler warnings:
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
32 //
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
33 // - warning: '0' flag used with ‘%p’ gnu_printf format
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
34 // - warning: format ‘%S’ expects argument of type ‘wchar_t *’, but argument 4 has type ‘char *’
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
35 // - warning: unknown conversion type character ‘b’ in format
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
36 //
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
37 // These formats are in practise only used from vim script printf()
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
38 // function and never as literals in C code.
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
39 char *fmt_012p = "%012p";
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
40 char *fmt_5S = "%5S";
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
41 char *fmt_06b = "%06b";
32775
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
42 char *fmt_06pb = "%1$0.*2$b";
33148
7bc10151ce81 patch 9.0.1856: issues with formatting positional arguments
Christian Brabandt <cb@256bit.org>
parents: 32798
diff changeset
43 char *fmt_06pb2 = "%2$0*1$b";
32775
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
44 char *fmt_212s = "%2$s %1$s %2$s";
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
45 char *fmt_21s = "%2$s %1$s";
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
46
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
47 /*
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
48 * Test trunc_string().
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
49 */
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
50 static void
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
51 test_trunc_string(void)
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
52 {
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
53 char_u *buf; /*allocated every time to find uninit errors */
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
54 char_u *s;
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
55
23946
0b1f5717dc4d patch 8.2.2515: memory access error when truncating an empty message
Bram Moolenaar <Bram@vim.org>
parents: 20105
diff changeset
56 // Should not write anything to destination if buflen is 0.
0b1f5717dc4d patch 8.2.2515: memory access error when truncating an empty message
Bram Moolenaar <Bram@vim.org>
parents: 20105
diff changeset
57 trunc_string((char_u *)"", NULL, 1, 0);
0b1f5717dc4d patch 8.2.2515: memory access error when truncating an empty message
Bram Moolenaar <Bram@vim.org>
parents: 20105
diff changeset
58
0b1f5717dc4d patch 8.2.2515: memory access error when truncating an empty message
Bram Moolenaar <Bram@vim.org>
parents: 20105
diff changeset
59 // Truncating an empty string does nothing.
0b1f5717dc4d patch 8.2.2515: memory access error when truncating an empty message
Bram Moolenaar <Bram@vim.org>
parents: 20105
diff changeset
60 buf = alloc(1);
0b1f5717dc4d patch 8.2.2515: memory access error when truncating an empty message
Bram Moolenaar <Bram@vim.org>
parents: 20105
diff changeset
61 trunc_string((char_u *)"", buf, 1, 1);
0b1f5717dc4d patch 8.2.2515: memory access error when truncating an empty message
Bram Moolenaar <Bram@vim.org>
parents: 20105
diff changeset
62 assert(buf[0] == NUL);
0b1f5717dc4d patch 8.2.2515: memory access error when truncating an empty message
Bram Moolenaar <Bram@vim.org>
parents: 20105
diff changeset
63 vim_free(buf);
0b1f5717dc4d patch 8.2.2515: memory access error when truncating an empty message
Bram Moolenaar <Bram@vim.org>
parents: 20105
diff changeset
64
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 11309
diff changeset
65 // in place
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
66 buf = alloc(40);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
67 STRCPY(buf, "text");
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
68 trunc_string(buf, buf, 20, 40);
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
69 assert(STRCMP(buf, "text") == 0);
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
70 vim_free(buf);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
71
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
72 buf = alloc(40);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
73 STRCPY(buf, "a short text");
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
74 trunc_string(buf, buf, 20, 40);
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
75 assert(STRCMP(buf, "a short text") == 0);
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
76 vim_free(buf);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
77
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
78 buf = alloc(40);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
79 STRCPY(buf, "a text tha just fits");
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
80 trunc_string(buf, buf, 20, 40);
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
81 assert(STRCMP(buf, "a text tha just fits") == 0);
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
82 vim_free(buf);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
83
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
84 buf = alloc(40);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
85 STRCPY(buf, "a text that nott fits");
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
86 trunc_string(buf, buf, 20, 40);
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
87 assert(STRCMP(buf, "a text t...nott fits") == 0);
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
88 vim_free(buf);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
89
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 11309
diff changeset
90 // copy from string to buf
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
91 buf = alloc(40);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
92 s = vim_strsave((char_u *)"text");
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
93 trunc_string(s, buf, 20, 40);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
94 assert(STRCMP(buf, "text") == 0);
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
95 vim_free(buf);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
96 vim_free(s);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
97
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
98 buf = alloc(40);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
99 s = vim_strsave((char_u *)"a text that fits");
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
100 trunc_string(s, buf, 34, 40);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
101 assert(STRCMP(buf, "a text that fits") == 0);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
102 vim_free(buf);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
103 vim_free(s);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
104
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
105 buf = alloc(40);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
106 s = vim_strsave((char_u *)"a short text");
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
107 trunc_string(s, buf, 20, 40);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
108 assert(STRCMP(buf, "a short text") == 0);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
109 vim_free(buf);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
110 vim_free(s);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
111
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
112 buf = alloc(40);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
113 s = vim_strsave((char_u *)"a text tha just fits");
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
114 trunc_string(s, buf, 20, 40);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
115 assert(STRCMP(buf, "a text tha just fits") == 0);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
116 vim_free(buf);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
117 vim_free(s);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
118
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
119 buf = alloc(40);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
120 s = vim_strsave((char_u *)"a text that nott fits");
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
121 trunc_string(s, buf, 20, 40);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
122 assert(STRCMP(buf, "a text t...nott fits") == 0);
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
123 vim_free(buf);
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
124 vim_free(s);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
125 }
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
126
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
127 /*
24709
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
128 * Test trunc_string() with mbyte chars.
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
129 */
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
130 static void
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
131 test_trunc_string_mbyte(void)
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
132 {
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
133 char_u *buf; // allocated every time to find uninit errors
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
134 char_u *s;
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
135
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
136 buf = alloc(40);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
137 s = vim_strsave((char_u *)"Ä text tha just fits");
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
138 trunc_string(s, buf, 20, 40);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
139 assert(STRCMP(buf, "Ä text tha just fits") == 0);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
140 vim_free(buf);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
141 vim_free(s);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
142
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
143 buf = alloc(40);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
144 s = vim_strsave((char_u *)"a text ÄÖÜä nott fits");
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
145 trunc_string(s, buf, 20, 40);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
146 assert(STRCMP(buf, "a text Ä...nott fits") == 0);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
147 vim_free(buf);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
148 vim_free(s);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
149
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
150 buf = alloc(40);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
151 s = vim_strsave((char_u *)"a text that not fitsÄ");
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
152 trunc_string(s, buf, 20, 40);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
153 assert(STRCMP(buf, "a text t...not fitsÄ") == 0);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
154 vim_free(buf);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
155 vim_free(s);
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
156 }
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
157
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
158 /*
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
159 * Test vim_snprintf() with a focus on checking that truncation is
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
160 * correct when buffer is small, since it cannot be tested from
30986
360f286b5869 patch 9.0.0828: various typos
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
161 * vim script tests. Check that:
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
162 * - no buffer overflows happens (with valgrind or asan)
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
163 * - output string is always NUL terminated.
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
164 *
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
165 * Not all formats of vim_snprintf() are checked here. They are
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
166 * checked more exhaustively in Test_printf*() vim script tests.
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
167 */
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
168 static void
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
169 test_vim_snprintf(void)
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
170 {
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
171 int n;
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
172 size_t bsize;
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
173 int bsize_int;
20105
785e2f0095a9 patch 8.2.0608: warning from clang when building message test
Bram Moolenaar <Bram@vim.org>
parents: 20007
diff changeset
174 void *ptr = (void *)0x87654321;
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
175
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
176 // Loop on various buffer sizes to make sure that truncation of
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
177 // vim_snprintf() is correct.
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
178 for (bsize = 0; bsize < 15; ++bsize)
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
179 {
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
180 bsize_int = (int)bsize - 1;
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
181
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
182 // buf is the heap rather than in the stack
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
183 // so valgrind can detect buffer overflows if any.
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
184 // Use malloc() rather than alloc() as test checks with 0-size
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
185 // buffer and its content should then never be used.
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
186 char *buf = malloc(bsize);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
187
32775
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
188 n = vim_snprintf(buf, bsize, "%.8g", 10000000.1);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
189 assert(n == 12);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
190 assert(bsize == 0 || STRNCMP(buf, "1.00000001e7", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
191 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
192
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
193 n = vim_snprintf(buf, bsize, "%d", 1234567);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
194 assert(n == 7);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
195 assert(bsize == 0 || STRNCMP(buf, "1234567", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
196 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
197
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
198 n = vim_snprintf(buf, bsize, "%ld", 1234567L);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
199 assert(n == 7);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
200 assert(bsize == 0 || STRNCMP(buf, "1234567", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
201 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
202
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
203 n = vim_snprintf(buf, bsize, "%9ld", 1234567L);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
204 assert(n == 9);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
205 assert(bsize == 0 || STRNCMP(buf, " 1234567", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
206 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
207
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
208 n = vim_snprintf(buf, bsize, "%-9ld", 1234567L);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
209 assert(n == 9);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
210 assert(bsize == 0 || STRNCMP(buf, "1234567 ", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
211 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
212
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
213 n = vim_snprintf(buf, bsize, "%x", 0xdeadbeef);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
214 assert(n == 8);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
215 assert(bsize == 0 || STRNCMP(buf, "deadbeef", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
216 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
217
19119
7816aa44c145 patch 8.2.0119: message test fails on some platforms
Bram Moolenaar <Bram@vim.org>
parents: 19011
diff changeset
218 n = vim_snprintf(buf, bsize, fmt_06b, (uvarnumber_T)12);
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
219 assert(n == 6);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
220 assert(bsize == 0 || STRNCMP(buf, "001100", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
221 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
222
32775
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
223 n = vim_snprintf(buf, bsize, "%s %s", "one", "two");
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
224 assert(n == 7);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
225 assert(bsize == 0 || STRNCMP(buf, "one two", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
226 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
227
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
228 n = vim_snprintf(buf, bsize, "%f", 1.234);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
229 assert(n == 8);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
230 assert(bsize == 0 || STRNCMP(buf, "1.234000", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
231 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
232
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
233 n = vim_snprintf(buf, bsize, "%e", 1.234);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
234 assert(n == 12);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
235 assert(bsize == 0 || STRNCMP(buf, "1.234000e+00", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
236 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
237
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
238 n = vim_snprintf(buf, bsize, "%f", 0.0/0.0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
239 assert(n == 3);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
240 assert(bsize == 0 || STRNCMP(buf, "nan", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
241 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
242
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
243 n = vim_snprintf(buf, bsize, "%f", 1.0/0.0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
244 assert(n == 3);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
245 assert(bsize == 0 || STRNCMP(buf, "inf", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
246 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
247
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
248 n = vim_snprintf(buf, bsize, "%f", -1.0/0.0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
249 assert(n == 4);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
250 assert(bsize == 0 || STRNCMP(buf, "-inf", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
251 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
252
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
253 n = vim_snprintf(buf, bsize, "%f", -0.0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
254 assert(n == 9);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
255 assert(bsize == 0 || STRNCMP(buf, "-0.000000", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
256 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
257
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
258 n = vim_snprintf(buf, bsize, "%s", "漢語");
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
259 assert(n == 6);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
260 assert(bsize == 0 || STRNCMP(buf, "漢語", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
261 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
262
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
263 n = vim_snprintf(buf, bsize, "%8s", "漢語");
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
264 assert(n == 8);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
265 assert(bsize == 0 || STRNCMP(buf, " 漢語", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
266 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
267
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
268 n = vim_snprintf(buf, bsize, "%-8s", "漢語");
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
269 assert(n == 8);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
270 assert(bsize == 0 || STRNCMP(buf, "漢語 ", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
271 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
272
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
273 n = vim_snprintf(buf, bsize, "%.3s", "漢語");
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
274 assert(n == 3);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
275 assert(bsize == 0 || STRNCMP(buf, "漢", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
276 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
277
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
278 n = vim_snprintf(buf, bsize, fmt_5S, "foo");
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
279 assert(n == 5);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
280 assert(bsize == 0 || STRNCMP(buf, " foo", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
281 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
282
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
283 n = vim_snprintf(buf, bsize, "%%%%%%");
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
284 assert(n == 3);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
285 assert(bsize == 0 || STRNCMP(buf, "%%%", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
286 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
287
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
288 n = vim_snprintf(buf, bsize, "%c%c", 1, 2);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
289 assert(n == 2);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
290 assert(bsize == 0 || STRNCMP(buf, "\x01\x02", bsize_int) == 0);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
291 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
292
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
293 // %p format is not tested in vim script tests Test_printf*()
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
294 // as it only makes sense in C code.
19352
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
295 // NOTE: SunOS libc doesn't use the prefix "0x" on %p.
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
296 #ifdef SUN_SYSTEM
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
297 # define PREFIX_LEN 0
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
298 # define PREFIX_STR1 ""
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
299 # define PREFIX_STR2 "00"
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
300 #else
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
301 # define PREFIX_LEN 2
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
302 # define PREFIX_STR1 "0x"
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
303 # define PREFIX_STR2 "0x"
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
304 #endif
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
305 n = vim_snprintf(buf, bsize, "%p", ptr);
19352
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
306 assert(n == 8 + PREFIX_LEN);
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
307 assert(bsize == 0
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
308 || STRNCMP(buf, PREFIX_STR1 "87654321", bsize_int) == 0);
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
309 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
310
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
311 n = vim_snprintf(buf, bsize, fmt_012p, ptr);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
312 assert(n == 12);
19352
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
313 assert(bsize == 0
c617ba6413bb patch 8.2.0234: message test fails on SunOS
Bram Moolenaar <Bram@vim.org>
parents: 19119
diff changeset
314 || STRNCMP(buf, PREFIX_STR2 "0087654321", bsize_int) == 0);
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
315 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
316
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
317 free(buf);
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
318 }
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
319 }
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
320
32775
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
321 /*
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
322 * Test vim_snprintf() with a focus on checking that positional
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
323 * arguments are correctly applied and skipped
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
324 */
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
325 static void
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
326 test_vim_snprintf_positional(void)
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
327 {
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
328 int n;
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
329 size_t bsize;
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
330 int bsize_int;
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
331
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
332 // Loop on various buffer sizes to make sure that truncation of
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
333 // vim_snprintf() is correct.
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
334 for (bsize = 0; bsize < 25; ++bsize)
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
335 {
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
336 bsize_int = (int)bsize - 1;
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
337
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
338 // buf is the heap rather than in the stack
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
339 // so valgrind can detect buffer overflows if any.
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
340 // Use malloc() rather than alloc() as test checks with 0-size
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
341 // buffer and its content should then never be used.
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
342 char *buf = malloc(bsize);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
343
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
344 n = vim_snprintf(buf, bsize, "%1$*2$ld", 1234567L, -9);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
345 assert(n == 9);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
346 assert(bsize == 0 || STRNCMP(buf, "1234567 ", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
347 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
348
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
349 n = vim_snprintf(buf, bsize, "%1$*2$.*3$ld", 1234567L, -9, 5);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
350 assert(n == 9);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
351 assert(bsize == 0 || STRNCMP(buf, "1234567 ", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
352 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
353
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
354 n = vim_snprintf(buf, bsize, "%1$*3$.*2$ld", 1234567L, 5, -9);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
355 assert(n == 9);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
356 assert(bsize == 0 || STRNCMP(buf, "1234567 ", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
357 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
358
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
359 n = vim_snprintf(buf, bsize, "%3$*1$.*2$ld", -9, 5, 1234567L);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
360 assert(n == 9);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
361 assert(bsize == 0 || STRNCMP(buf, "1234567 ", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
362 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
363
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
364 n = vim_snprintf(buf, bsize, "%1$ld", 1234567L);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
365 assert(n == 7);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
366 assert(bsize == 0 || STRNCMP(buf, "1234567", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
367 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
368
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
369 n = vim_snprintf(buf, bsize, "%1$*2$ld", 1234567L, 9);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
370 assert(n == 9);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
371 assert(bsize == 0 || STRNCMP(buf, " 1234567", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
372 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
373
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
374 n = vim_snprintf(buf, bsize, "%2$ld %1$d %3$lu", 12345, 9L, 7654321UL);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
375 assert(n == 15);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
376 assert(bsize == 0 || STRNCMP(buf, "9 12345 7654321", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
377 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
378
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
379 n = vim_snprintf(buf, bsize, "%2$d %1$ld %3$lu", 1234567L, 9, 7654321UL);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
380 assert(n == 17);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
381 assert(bsize == 0 || STRNCMP(buf, "9 1234567 7654321", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
382 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
383
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
384 n = vim_snprintf(buf, bsize, "%2$d %1$lld %3$lu", 1234567LL, 9, 7654321UL);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
385 assert(n == 17);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
386 assert(bsize == 0 || STRNCMP(buf, "9 1234567 7654321", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
387 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
388
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
389 n = vim_snprintf(buf, bsize, "%2$ld %1$u %3$lu", 12345U, 9L, 7654321UL);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
390 assert(n == 15);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
391 assert(bsize == 0 || STRNCMP(buf, "9 12345 7654321", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
392 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
393
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
394 n = vim_snprintf(buf, bsize, "%2$d %1$lu %3$lu", 1234567UL, 9, 7654321UL);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
395 assert(n == 17);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
396 assert(bsize == 0 || STRNCMP(buf, "9 1234567 7654321", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
397 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
398
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
399 n = vim_snprintf(buf, bsize, "%2$d %1$llu %3$lu", 1234567LLU, 9, 7654321UL);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
400 assert(n == 17);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
401 assert(bsize == 0 || STRNCMP(buf, "9 1234567 7654321", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
402 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
403
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
404 n = vim_snprintf(buf, bsize, "%2$d %1$x %3$lu", 0xdeadbeef, 9, 7654321UL);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
405 assert(n == 18);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
406 assert(bsize == 0 || STRNCMP(buf, "9 deadbeef 7654321", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
407 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
408
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
409 n = vim_snprintf(buf, bsize, "%2$ld %1$c %3$lu", 'c', 9L, 7654321UL);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
410 assert(n == 11);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
411 assert(bsize == 0 || STRNCMP(buf, "9 c 7654321", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
412 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
413
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
414 n = vim_snprintf(buf, bsize, "%2$ld %1$s %3$lu", "hi", 9L, 7654321UL);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
415 assert(n == 12);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
416 assert(bsize == 0 || STRNCMP(buf, "9 hi 7654321", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
417 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
418
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
419 n = vim_snprintf(buf, bsize, "%2$ld %1$e %3$lu", 0.0, 9L, 7654321UL);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
420 assert(n == 22);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
421 assert(bsize == 0 || STRNCMP(buf, "9 0.000000e+00 7654321", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
422 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
423
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
424 n = vim_snprintf(buf, bsize, fmt_212s, "one", "two", "three");
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
425 assert(n == 11);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
426 assert(bsize == 0 || STRNCMP(buf, "two one two", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
427 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
428
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
429 n = vim_snprintf(buf, bsize, "%3$s %1$s %2$s", "one", "two", "three");
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
430 assert(n == 13);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
431 assert(bsize == 0 || STRNCMP(buf, "three one two", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
432 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
433
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
434 n = vim_snprintf(buf, bsize, "%1$d", 1234567);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
435 assert(n == 7);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
436 assert(bsize == 0 || STRNCMP(buf, "1234567", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
437 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
438
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
439 n = vim_snprintf(buf, bsize, "%1$x", 0xdeadbeef);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
440 assert(n == 8);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
441 assert(bsize == 0 || STRNCMP(buf, "deadbeef", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
442 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
443
33148
7bc10151ce81 patch 9.0.1856: issues with formatting positional arguments
Christian Brabandt <cb@256bit.org>
parents: 32798
diff changeset
444 n = vim_snprintf(buf, bsize, fmt_06pb2, 6, (uvarnumber_T)12);
7bc10151ce81 patch 9.0.1856: issues with formatting positional arguments
Christian Brabandt <cb@256bit.org>
parents: 32798
diff changeset
445 assert(n == 6);
7bc10151ce81 patch 9.0.1856: issues with formatting positional arguments
Christian Brabandt <cb@256bit.org>
parents: 32798
diff changeset
446 assert(bsize == 0 || STRNCMP(buf, "001100", bsize_int) == 0);
7bc10151ce81 patch 9.0.1856: issues with formatting positional arguments
Christian Brabandt <cb@256bit.org>
parents: 32798
diff changeset
447 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
7bc10151ce81 patch 9.0.1856: issues with formatting positional arguments
Christian Brabandt <cb@256bit.org>
parents: 32798
diff changeset
448
32775
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
449 n = vim_snprintf(buf, bsize, fmt_06pb, (uvarnumber_T)12, 6);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
450 assert(n == 6);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
451 assert(bsize == 0 || STRNCMP(buf, "001100", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
452 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
453
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
454 n = vim_snprintf(buf, bsize, "%1$s %2$s", "one", "two");
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
455 assert(n == 7);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
456 assert(bsize == 0 || STRNCMP(buf, "one two", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
457 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
458
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
459 n = vim_snprintf(buf, bsize, fmt_06b, (uvarnumber_T)12);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
460 assert(n == 6);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
461 assert(bsize == 0 || STRNCMP(buf, "001100", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
462 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
463
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
464 n = vim_snprintf(buf, bsize, fmt_21s, "one", "two", "three");
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
465 assert(n == 7);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
466 assert(bsize == 0 || STRNCMP(buf, "two one", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
467 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
468
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
469 #ifdef FEAT_FLOAT
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
470 n = vim_snprintf(buf, bsize, "%1$f", 1.234);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
471 assert(n == 8);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
472 assert(bsize == 0 || STRNCMP(buf, "1.234000", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
473 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
474
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
475 n = vim_snprintf(buf, bsize, "%1$e", 1.234);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
476 assert(n == 12);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
477 assert(bsize == 0 || STRNCMP(buf, "1.234000e+00", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
478 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
479
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
480 n = vim_snprintf(buf, bsize, "%1$f", 0.0/0.0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
481 assert(n == 3);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
482 assert(bsize == 0 || STRNCMP(buf, "nan", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
483 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
484
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
485 n = vim_snprintf(buf, bsize, "%1$f", 1.0/0.0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
486 assert(n == 3);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
487 assert(bsize == 0 || STRNCMP(buf, "inf", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
488 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
489
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
490 n = vim_snprintf(buf, bsize, "%1$f", -1.0/0.0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
491 assert(n == 4);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
492 assert(bsize == 0 || STRNCMP(buf, "-inf", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
493 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
494
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
495 n = vim_snprintf(buf, bsize, "%1$f", -0.0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
496 assert(n == 9);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
497 assert(bsize == 0 || STRNCMP(buf, "-0.000000", bsize_int) == 0);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
498 assert(bsize == 0 || buf[MIN(n, bsize_int)] == '\0');
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
499 #endif
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
500
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
501 free(buf);
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
502 }
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
503 }
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
504
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
505 int
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
506 main(int argc, char **argv)
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
507 {
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19352
diff changeset
508 CLEAR_FIELD(params);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
509 params.argc = argc;
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
510 params.argv = argv;
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
511 common_init(&params);
18999
6fb11e7fb9cd patch 8.2.0060: message test only runs with one encoding
Bram Moolenaar <Bram@vim.org>
parents: 18931
diff changeset
512
28457
4dcccb2673fe patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents: 24709
diff changeset
513 set_option_value_give_err((char_u *)"encoding", 0, (char_u *)"utf-8", 0);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
514 init_chartab();
18999
6fb11e7fb9cd patch 8.2.0060: message test only runs with one encoding
Bram Moolenaar <Bram@vim.org>
parents: 18931
diff changeset
515 test_trunc_string();
24709
9d304d363ab6 patch 8.2.2893: multi-byte text in popup title shows up wrong
Bram Moolenaar <Bram@vim.org>
parents: 23946
diff changeset
516 test_trunc_string_mbyte();
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
517 test_vim_snprintf();
32775
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
518 test_vim_snprintf_positional();
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
519
28457
4dcccb2673fe patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents: 24709
diff changeset
520 set_option_value_give_err((char_u *)"encoding", 0, (char_u *)"latin1", 0);
18999
6fb11e7fb9cd patch 8.2.0060: message test only runs with one encoding
Bram Moolenaar <Bram@vim.org>
parents: 18931
diff changeset
521 init_chartab();
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
522 test_trunc_string();
19011
61d94accf16f patch 8.2.0066: some corners of vim_snprintf() are not tested
Bram Moolenaar <Bram@vim.org>
parents: 18999
diff changeset
523 test_vim_snprintf();
32775
2d5e8c46508b patch 9.0.1704: Cannot use positional arguments for printf()
Christian Brabandt <cb@256bit.org>
parents: 30986
diff changeset
524 test_vim_snprintf_positional();
18999
6fb11e7fb9cd patch 8.2.0060: message test only runs with one encoding
Bram Moolenaar <Bram@vim.org>
parents: 18931
diff changeset
525
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
526 return 0;
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
527 }