summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fluid/ExternalCodeEditor_UNIX.cxx12
-rw-r--r--src/Fl_x.cxx34
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] = {