From 1da349579dcdf0b616cb3ea00a5ee3a60a86bc25 Mon Sep 17 00:00:00 2001 From: Albrecht Schlosser Date: Wed, 24 Jun 2020 20:20:11 +0200 Subject: [PATCH] Fix static code analyzer warnings Note: there's more to do ... --- fluid/ExternalCodeEditor_UNIX.cxx | 12 ++++++++--- src/Fl_x.cxx | 34 ++++++++++++++++--------------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/fluid/ExternalCodeEditor_UNIX.cxx b/fluid/ExternalCodeEditor_UNIX.cxx index ccc265ff1..8e415e0b3 100644 --- a/fluid/ExternalCodeEditor_UNIX.cxx +++ b/fluid/ExternalCodeEditor_UNIX.cxx @@ -296,6 +296,9 @@ static int save_file(const char *filename, const char *code) { // o 's' will be modified (words will be NULL separated) // o argv[] will end up pointing to the words of 's' // o Caller must free argv with: free(argv); +// Returns: +// o -1 in case of memory allocation error +// o number of arguments in argv (same value as in argc) // static int make_args(char *s, // string containing words (gets trashed!) int *aargc, // pointer to argc @@ -334,10 +337,13 @@ int ExternalCodeEditor::start_editor(const char *editor_cmd, // NOTE: OSX wants minimal code between fork/exec, see Apple TN2083 int nargs; char **args = 0; - make_args(cmd, &nargs, &args); - execvp(args[0], args); // run command - doesn't return if succeeds - fl_alert("couldn't exec() '%s': %s", cmd, strerror(errno)); + if (make_args(cmd, &nargs, &args) > 0) { + execvp(args[0], args); // run command - doesn't return if succeeds + fl_alert("couldn't exec() '%s': %s", cmd, strerror(errno)); + exit(1); + } exit(1); + // break; } default: // parent if ( L_editors_open++ == 0 ) // first editor? start timers diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx index ed3abf682..282fc4cae 100644 --- a/src/Fl_x.cxx +++ b/src/Fl_x.cxx @@ -614,7 +614,10 @@ void Fl_X11_Screen_Driver::open_display_platform() { XSetErrorHandler(xerror_handler); Display *d = XOpenDisplay(0); - if (!d) Fl::fatal("Can't open display: %s",XDisplayName(0)); + if (!d) { + Fl::fatal("Can't open display: %s", XDisplayName(0)); // does not return + return; // silence static code analyzer + } open_display_i(d); // the unique GC used by all X windows @@ -953,20 +956,20 @@ void Fl_X11_System_Driver::copy(const char *stuff, int len, int clipboard, const XSetSelectionOwner(fl_display, property, fl_message_window, fl_event_time); } -static void write_short(unsigned char **cp,short i){ - unsigned char *c=*cp; - *c++=i&0xFF;i>>=8; - *c++=i&0xFF;i>>=8; - *cp=c; +static void write_short(unsigned char **cp, short i) { + unsigned char *c = *cp; + *c++ = i & 0xFF; i >>= 8; + *c++ = i & 0xFF; + *cp = c; } -static void write_int(unsigned char **cp,int i){ - unsigned char *c=*cp; - *c++=i&0xFF;i>>=8; - *c++=i&0xFF;i>>=8; - *c++=i&0xFF;i>>=8; - *c++=i&0xFF;i>>=8; - *cp=c; +static void write_int(unsigned char **cp, int i) { + unsigned char *c = *cp; + *c++ = i & 0xFF; i >>= 8; + *c++ = i & 0xFF; i >>= 8; + *c++ = i & 0xFF; i >>= 8; + *c++ = i & 0xFF; + *cp = c; } static unsigned char *create_bmp(const unsigned char *data, int W, int H, int *return_size){ @@ -1840,7 +1843,6 @@ int fl_handle(const XEvent& thisevent) fl_key_vector[keycode/8] |= (1 << (keycode%8)); static char *kp_buffer = NULL; static int kp_buffer_len = 0; - int len=0; KeySym keysym; if (kp_buffer_len == 0) { kp_buffer_len = 4096; @@ -1848,8 +1850,8 @@ int fl_handle(const XEvent& thisevent) } if (xevent.type == KeyPress) { event = FL_KEYDOWN; - len = 0; + int len; if (fl_xim_ic) { Status status; len = XUtf8LookupString(fl_xim_ic, (XKeyPressedEvent *)&xevent.xkey, @@ -2017,7 +2019,7 @@ int fl_handle(const XEvent& thisevent) // Store ASCII numeric keypad value... keysym = keysym1 | FL_KP; kp_buffer[0] = char(keysym1) & 0x7F; - len = 1; + // len = 1; } else { // Map keypad to special key... static const unsigned short table[15] = {