Skip to content

Commit 6ebc272

Browse files
committed
COMMON: fix some clang-check warnings
1 parent 56e804e commit 6ebc272

File tree

8 files changed

+118
-90
lines changed

8 files changed

+118
-90
lines changed

Makefile.am

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,16 @@ covcheck-android:
3636

3737
clangcheck:
3838
(make clean -s && \
39+
scan-build ./configure && \
40+
scan-build -o scan make -s)
41+
42+
clangcheck-fltk:
43+
(make clean -s && \
44+
scan-build ./configure --enable-fltk && \
45+
scan-build -o scan make -s)
46+
47+
clangcheck-sdl:
48+
(make clean -s && \
3949
scan-build ./configure --enable-sdl && \
4050
scan-build -o scan make -s)
4151

src/common/blib.c

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,9 @@ uint8_t get_dimensions(int32_t **lbound, int32_t **ubound) {
175175
* DIM var([lower TO] uppper [, ...])
176176
*/
177177
void cmd_dim(int preserve) {
178-
int exitf = 0;
179-
180178
do {
181179
byte code = code_peek();
182180
if (code == kwTYPE_LINE || code == kwTYPE_EOC) {
183-
exitf = 1;
184181
break;
185182
}
186183
if (code_peek() == kwTYPE_SEP) {
@@ -227,7 +224,7 @@ void cmd_dim(int preserve) {
227224
}
228225
free(lbound);
229226
free(ubound);
230-
} while (!exitf && !prog_error);
227+
} while (!prog_error);
231228
}
232229

233230
/**
@@ -487,8 +484,6 @@ void cmd_erase() {
487484
if (prog_error) {
488485
break;
489486
}
490-
byte code = code_peek();
491-
492487
if (code_isvar()) {
493488
var_p = code_getvarptr();
494489
} else {
@@ -504,7 +499,7 @@ void cmd_erase() {
504499
}
505500

506501
// next
507-
code = code_peek();
502+
byte code = code_peek();
508503
if (code == kwTYPE_SEP) {
509504
par_getcomma();
510505
} else {
@@ -518,7 +513,6 @@ void cmd_erase() {
518513
*/
519514
void cmd_print(int output) {
520515
byte last_op = 0;
521-
byte exitf = 0;
522516
byte use_format = 0;
523517
intptr_t handle = 0;
524518
var_t var;
@@ -603,7 +597,7 @@ void cmd_print(int output) {
603597
}
604598

605599
// PRINT
606-
do {
600+
while (!prog_error) {
607601
code = code_peek();
608602
if (code == kwTYPE_SEP) {
609603
code_skipnext();
@@ -615,7 +609,6 @@ void cmd_print(int output) {
615609
}
616610
} else {
617611
if (kw_check_evexit(code) || code == kwTYPE_LEVEL_END) {
618-
exitf = 1;
619612
break;
620613
}
621614

@@ -643,11 +636,10 @@ void cmd_print(int output) {
643636
}
644637
v_free(&var);
645638
};
646-
647639
if (prog_error) {
648640
return;
649641
}
650-
} while (exitf == 0);
642+
};
651643

652644
if (last_op == 0) {
653645
pv_write("\n", output, handle);

src/common/proc.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -951,7 +951,7 @@ int par_getpartable(par_t **ptable_pp, const char *valid_sep) {
951951
if (!prog_error) {
952952
// push parameter
953953
ptable[pcount].var = par;
954-
ptable[pcount].flags |= PAR_BYVAL;
954+
ptable[pcount].flags = PAR_BYVAL;
955955
if (++pcount == MAX_PARAM) {
956956
par_freepartable(ptable_pp, pcount);
957957
err_parfmt(__FILE__);
@@ -1086,48 +1086,49 @@ int par_massget(const char *fmt, ...) {
10861086
case 's':
10871087
// optional string
10881088
if (!opt) {
1089-
s = va_arg(ap, char**);
1089+
// advance ap to next position
1090+
va_arg(ap, char **);
10901091
break;
10911092
}
10921093
case 'S':
10931094
// string
1094-
s = va_arg(ap, char**);
1095+
s = va_arg(ap, char **);
10951096
*s = strdup(v_getstr(ptable[curpar].var));
10961097
curpar++;
10971098
break;
10981099
case 'i':
10991100
// optional integer
11001101
if (!opt) {
1101-
i = va_arg(ap, var_int_t*);
1102+
va_arg(ap, var_int_t *);
11021103
break;
11031104
}
11041105
case 'I':
11051106
// integer
1106-
i = va_arg(ap, var_int_t*);
1107+
i = va_arg(ap, var_int_t *);
11071108
*i = v_getint(ptable[curpar].var);
11081109
curpar++;
11091110
break;
11101111
case 'f':
11111112
// optional real (var_num_t)
11121113
if (!opt) {
1113-
f = va_arg(ap, var_num_t*);
1114+
va_arg(ap, var_num_t *);
11141115
break;
11151116
}
11161117
case 'F':
11171118
// real (var_num_t)
1118-
f = va_arg(ap, var_num_t*);
1119+
f = va_arg(ap, var_num_t *);
11191120
*f = v_getreal(ptable[curpar].var);
11201121
curpar++;
11211122
break;
11221123
case 'p':
11231124
// optional variable
11241125
if (!opt) {
1125-
vt = va_arg(ap, var_t**);
1126+
va_arg(ap, var_t **);
11261127
break;
11271128
}
11281129
case 'P':
11291130
// variable
1130-
vt = va_arg(ap, var_t**);
1131+
vt = va_arg(ap, var_t **);
11311132
if (ptable[curpar].flags == 0)// byref
11321133
*vt = ptable[curpar].var;
11331134
else {

src/platform/fltk/HelpWidget.cxx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -671,11 +671,10 @@ void ImageNode::display(Display *out) {
671671
int x = out->x1 - 1;
672672
int y = fixed ? 0 : out->y1 - fl_height();
673673
int y1 = y;
674-
int x1 = x;
675674
int numHorz = out->tabW / w.value;
676675
int numVert = out->tabH / h.value;
677676
for (int iy = 0; iy <= numVert; iy++) {
678-
x1 = x;
677+
int x1 = x;
679678
for (int ix = 0; ix <= numHorz; ix++) {
680679
if (x1 + w.value > x + out->tabW) {
681680
iw = out->tabW - (x1 - x);
@@ -2048,7 +2047,6 @@ void HelpWidget::compile() {
20482047

20492048
const char *text = htmlStr.c_str();
20502049
const char *tagBegin = text;
2051-
const char *tagEnd = text;
20522050
const char *tag;
20532051
const char *tagPair = 0;
20542052

@@ -2064,7 +2062,7 @@ void HelpWidget::compile() {
20642062
while (*tagBegin != 0 && *tagBegin != '<') {
20652063
tagBegin++;
20662064
}
2067-
tagEnd = tagBegin;
2065+
const char *tagEnd = tagBegin;
20682066
while (*tagEnd != 0 && *tagEnd != '>') {
20692067
tagEnd++;
20702068
}
@@ -2522,7 +2520,6 @@ int HelpWidget::onMove(int event) {
25222520
scroll = -scrollHeight; // too far down
25232521
}
25242522
if (scroll != vscroll) {
2525-
vscroll = scroll;
25262523
damage(FL_DAMAGE_EXPOSE);
25272524
}
25282525
}
@@ -2825,7 +2822,7 @@ void HelpWidget::loadFile(const char *f, bool useDocHome) {
28252822
} else {
28262823
docHome.append("./");
28272824
}
2828-
if (docHome[docHome.length() - 1] != '/') {
2825+
if (docHome.length() > 0 && docHome[docHome.length() - 1] != '/') {
28292826
docHome.append("/");
28302827
}
28312828
}

src/platform/web/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
#include <stdio.h>
1616
#include <string.h>
1717

18+
#include "include/osd.h"
1819
#include "common/sbapp.h"
1920
#include "common/device.h"
20-
#include "common/osd.h"
2121
#include "platform/web/canvas.h"
2222

2323
Canvas g_canvas;

src/ui/audio.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include "config.h"
1313
#include <stdio.h>
14+
#include <unistd.h>
1415
#include "include/osd.h"
1516
#include "ui/strlib.h"
1617
#include "ui/audio.h"

src/ui/strlib.cpp

Lines changed: 49 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// This file is part of SmallBASIC
22
//
3-
// Copyright(C) 2001-2014 Chris Warren-Smith.
3+
// Copyright(C) 2001-2019 Chris Warren-Smith.
44
//
55
// This program is distributed under the terms of the GPL v2.0 or later
66
// Download the GNU Public License (GPL) from www.gnu.org
@@ -15,29 +15,29 @@ using namespace strlib;
1515

1616
//--String----------------------------------------------------------------------
1717

18-
String::String() : _buffer(NULL) {
18+
String::String() : _buffer(nullptr) {
1919
}
2020

2121
String::String(const char *s) {
22-
_buffer = (s == NULL ? NULL : strdup(s));
22+
_buffer = (s == nullptr ? nullptr : strdup(s));
2323
}
2424

2525
String::String(const String &s) {
26-
_buffer = s._buffer == NULL ? NULL : strdup(s._buffer);
26+
_buffer = s._buffer == nullptr ? nullptr : strdup(s._buffer);
2727
}
2828

29-
String::String(const char *s, int len) : _buffer(NULL) {
29+
String::String(const char *s, int len) : _buffer(nullptr) {
3030
append(s, len);
3131
}
3232

3333
String::~String() {
3434
free(_buffer);
35-
_buffer = NULL;
35+
_buffer = nullptr;
3636
}
3737

3838
const String &String::operator=(const String &s) {
3939
clear();
40-
if (_buffer != s._buffer && s._buffer != NULL) {
40+
if (_buffer != s._buffer && s._buffer != nullptr) {
4141
_buffer = strdup(s._buffer);
4242
}
4343
return *this;
@@ -85,7 +85,7 @@ String &String::append(char c) {
8585
}
8686

8787
String &String::append(const char *s) {
88-
if (s != NULL && s[0]) {
88+
if (s != nullptr && s[0]) {
8989
int len = length();
9090
_buffer = (char *)realloc(_buffer, len + strlen(s) + 1);
9191
strcpy(_buffer + len, s);
@@ -94,7 +94,7 @@ String &String::append(const char *s) {
9494
}
9595

9696
String &String::append(const char *s, int numCopy) {
97-
if (s != NULL && numCopy) {
97+
if (s != nullptr && numCopy) {
9898
int len = strlen(s);
9999
if (numCopy > len) {
100100
numCopy = len;
@@ -117,14 +117,14 @@ String &String::append(FILE *fp, long filelen) {
117117

118118
void String::clear() {
119119
free(_buffer);
120-
_buffer = NULL;
120+
_buffer = nullptr;
121121
}
122122

123123
bool String::equals(const String &s, bool ignoreCase) const {
124124
bool result;
125125
if (_buffer == s._buffer) {
126126
result = true;
127-
} else if (_buffer == NULL || s._buffer == NULL) {
127+
} else if (_buffer == nullptr || s._buffer == nullptr) {
128128
result = _buffer == s._buffer;
129129
} else if (ignoreCase) {
130130
result = strcasecmp(_buffer, s._buffer) == 0;
@@ -135,22 +135,24 @@ bool String::equals(const String &s, bool ignoreCase) const {
135135
}
136136

137137
bool String::equals(const char *s, bool ignoreCase) const {
138-
return (_buffer == 0 ? s == 0 : ignoreCase ?
138+
return (_buffer == nullptr ? s == nullptr :
139+
s == nullptr ? _buffer == nullptr : ignoreCase ?
139140
strcasecmp(_buffer, s) == 0 : strcmp(_buffer, s) == 0);
140141
}
141142

142143
int String::indexOf(const char *s, int fromIndex) const {
144+
int result;
143145
int len = length();
144-
if (fromIndex >= len) {
145-
return -1;
146-
}
147-
if (strlen(s) == 1) {
146+
if (fromIndex >= len || _buffer == nullptr) {
147+
result = -1;
148+
} else if (strlen(s) == 1) {
148149
char *c = strchr(_buffer + fromIndex, s[0]);
149-
return (c == NULL ? -1 : (c - _buffer));
150+
result = (c == nullptr ? -1 : (c - _buffer));
150151
} else {
151152
char *c = strstr(_buffer + fromIndex, s);
152-
return (c == NULL ? -1 : (c - _buffer));
153+
result = (c == nullptr ? -1 : (c - _buffer));
153154
}
155+
return result;
154156
}
155157

156158
int String::indexOf(char chr, int fromIndex) const {
@@ -159,7 +161,7 @@ int String::indexOf(char chr, int fromIndex) const {
159161
return -1;
160162
}
161163
char *c = strchr(_buffer + fromIndex, chr);
162-
return (c == NULL ? -1 : (c - _buffer));
164+
return (c == nullptr ? -1 : (c - _buffer));
163165
}
164166

165167
int String::lastIndexOf(char chr, int untilIndex) const {
@@ -168,7 +170,7 @@ int String::lastIndexOf(char chr, int untilIndex) const {
168170
return -1;
169171
}
170172
char *c = strrchr(_buffer + untilIndex, chr);
171-
return (c == NULL ? -1 : (c - _buffer));
173+
return (c == nullptr ? -1 : (c - _buffer));
172174
}
173175

174176
String String::leftOf(char ch) const {
@@ -350,15 +352,40 @@ template<> void Properties<String *>::put(const char *key, const char *value) {
350352
template<> void Properties<String *>::get(const char *key, List<String *> *arrayValues) {
351353
for (int i = 0; i < _count; i++) {
352354
String *nextKey = (String *)_head[i++];
353-
if (nextKey == NULL || i == _count) {
355+
if (nextKey == nullptr || i == _count) {
354356
break;
355357
}
356358
String *nextValue = (String *)_head[i];
357-
if (nextValue == NULL) {
359+
if (nextValue == nullptr) {
358360
break;
359361
}
360362
if (nextKey->equals(key)) {
361363
arrayValues->add(new String(*nextValue));
362364
}
363365
}
364366
}
367+
368+
// g++ -DUNIT_TESTS=1 -I. ui/strlib.cpp && ./a.out
369+
#if defined(UNIT_TESTS)
370+
#include <stdio.h>
371+
void assertEq(int a, int b) {
372+
if (a != b) {
373+
fprintf(stderr, "FAIL: %d != %d\n", a, b);
374+
}
375+
}
376+
int main() {
377+
String s1 = "test string is here x";
378+
String s2;
379+
String s3 = "cats";
380+
assertEq(0, s1.indexOf("t", 0));
381+
assertEq(20, s1.indexOf("x", 20));
382+
assertEq(5, s1.indexOf("string", 4));
383+
assertEq(-1, s1.indexOf("not", 10));
384+
assertEq(-1, s2.indexOf("not", 10));
385+
assertEq(0, s3.equals(nullptr, true));
386+
assertEq(1, s3.equals("CATS", true));
387+
assertEq(0, s3.equals("CATS", false));
388+
assertEq(1, s3.equals("cats", false));
389+
return 0;
390+
}
391+
#endif

0 commit comments

Comments
 (0)