|
1 /* |
|
2 Copyright (c) 2013-2014, Santeri Piippo |
|
3 All rights reserved. |
|
4 |
|
5 Redistribution and use in source and binary forms, with or without |
|
6 modification, are permitted provided that the following conditions are met: |
|
7 |
|
8 * Redistributions of source code must retain the above copyright |
|
9 notice, this list of conditions and the following disclaimer. |
|
10 |
|
11 * Redistributions in binary form must reproduce the above copyright |
|
12 notice, this list of conditions and the following disclaimer in the |
|
13 documentation and/or other materials provided with the distribution. |
|
14 |
|
15 * Neither the name of the <organization> nor the |
|
16 names of its contributors may be used to endorse or promote products |
|
17 derived from this software without specific prior written permission. |
|
18 |
|
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
|
20 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
21 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
|
22 DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY |
|
23 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
|
24 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
|
25 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
26 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
27 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
|
28 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
29 */ |
|
30 |
1 #include <cstdio> |
31 #include <cstdio> |
2 #include "main.h" |
32 #include "main.h" |
3 #include "format.h" |
33 #include "format.h" |
4 |
34 |
5 static void draw_pos (const string& fmt, int pos) |
35 static void draw_pos (const string& fmt, int pos) |
39 |
69 |
40 int ofs = 1; |
70 int ofs = 1; |
41 char mod = '\0'; |
71 char mod = '\0'; |
42 |
72 |
43 // handle modifiers |
73 // handle modifiers |
44 if (fmt[ pos + ofs ] == 's' || fmt[ pos + ofs ] == 'x') |
74 if (fmt[pos + ofs] == 's' || fmt[pos + ofs] == 'x') |
45 { |
75 { |
46 mod = fmt[ pos + ofs ]; |
76 mod = fmt[ pos + ofs ]; |
47 ofs++; |
77 ofs++; |
48 } |
78 } |
49 |
79 |
50 if (!isdigit (fmt[ pos + ofs ])) |
80 if (!isdigit (fmt[pos + ofs])) |
51 { |
81 { |
52 fprintf (stderr, "bad format string, expected digit with optional " |
82 fprintf (stderr, "bad format string, expected digit with optional " |
53 "modifier after '%%':\n"); |
83 "modifier after '%%':\n"); |
54 draw_pos (fmt, pos); |
84 draw_pos (fmt, pos); |
55 return fmt; |
85 return fmt; |
56 } |
86 } |
57 |
87 |
58 int i = fmt[ pos + ofs ] - '0'; |
88 int i = fmt[pos + ofs] - '0'; |
59 |
89 |
60 if (i >= args.size()) |
90 if (i >= args.size()) |
61 { |
91 { |
62 fprintf (stderr, "format arg #%d used but not defined: %s\n", i, fmtstr.chars()); |
92 fprintf (stderr, "format arg #%d used but not defined: %s\n", i, fmtstr.chars()); |
63 return fmt; |
93 return fmt; |