@@ -94,7 +94,7 @@ static void freeOpts(MQTTClient_connectOptions* conn_opts){
94
94
}
95
95
96
96
#ifdef _WIN32
97
- void setenv (const char * env ,const char * val ,int notused ){
97
+ static void setenv (const char * env ,const char * val ,int notused ){
98
98
int len = strlen (env );
99
99
char * setting = (char * )malloc (len + strlen (val )+ 2 );
100
100
strcpy (setting ,env );
@@ -104,17 +104,17 @@ void setenv(const char* env,const char* val,int notused){
104
104
_putenv (setting );
105
105
free (setting );
106
106
}
107
- void unsetenv (const char * env ){
107
+ static void unsetenv (const char * env ){
108
108
setenv (env ,"" ,1 );
109
109
}
110
110
#endif
111
- void setProxyEnv (const char * sys ,const char * sysval ,const char * mqtt ){
111
+ static void setProxyEnv (const char * sys ,const char * sysval ,const char * mqtt ){
112
112
if ((sysval && * sysval == 0 )|| (mqtt && * mqtt == 0 )) /* unset default env if blank env or blank override env */
113
113
unsetenv (sys );
114
114
if (mqtt && * mqtt )
115
115
setenv (sys ,mqtt ,1 ); /* use override env variables value */
116
116
}
117
- void restoreProxyEnv (const char * sys ,const char * sysval ){
117
+ static void restoreProxyEnv (const char * sys ,const char * sysval ){
118
118
if (sysval )
119
119
setenv (sys ,sysval ,1 );
120
120
}
@@ -430,21 +430,32 @@ static void pr0(K x){
430
430
}
431
431
432
432
// Callback function definitions
433
- void qmsgsent (MQTTClient_deliveryToken p ){
433
+ static void qmsgsent (MQTTClient_deliveryToken p ){
434
434
pr0 (k (0 , (char * )".mqtt.msgsent" , kj (p ), (K )0 ));
435
435
}
436
436
437
- void qmsgrcvd (char * p ,long sz ){
437
+ static void qmsgrcvd (char * p ,long sz ){
438
438
K topic = kp (p );
439
439
p += topic -> n + 1 ;
440
440
K msg = kpn (p , sz - (topic -> n + 1 ));
441
441
pr0 (k (0 , (char * )".mqtt.msgrcvd" , topic , msg , (K )0 ));
442
442
}
443
443
444
- void qdisconn (){
444
+ static void qdisconn (){
445
445
pr0 (k (0 , (char * )".mqtt.disconn" , ktn (0 ,0 ), (K )0 ));
446
446
}
447
447
448
+ static char * getSysError (char * buff ,int len ){
449
+ buff [0 ]= 0 ;
450
+ #ifdef _WIN32
451
+ FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS , 0 ,
452
+ WSAGetLastError (), MAKELANGID (LANG_NEUTRAL , SUBLANG_DEFAULT ), buff ,
453
+ len , 0 );
454
+ #else
455
+ strerror_r (errno ,buff ,len );
456
+ #endif
457
+ return buff ;
458
+ }
448
459
449
460
/* Socketpair initialization, callback definition and clean up functionality
450
461
* detach function initialized at exit, socketpair start issues handled
@@ -454,7 +465,8 @@ K mqttCallback(int fd){
454
465
CallbackData cb_data ;
455
466
long rc = recv (fd , (char * )& cb_data , sizeof (cb_data ), 0 );
456
467
if (rc < (long )sizeof (cb_data )){
457
- fprintf (stderr , "recv(1) error: %li\n" , rc );
468
+ char buff [256 ];
469
+ fprintf (stderr , "recv(%li) error: %s\n" , rc , getSysError (buff ,sizeof (buff )));
458
470
return (K )0 ;
459
471
}
460
472
switch (cb_data .header .msg_type ){
@@ -470,8 +482,10 @@ K mqttCallback(int fd){
470
482
for (rc = 0 , actual = 0 ;
471
483
actual < expected && rc >= 0 ;
472
484
actual += rc = recv (fd , body + actual , expected - actual , 0 ));
473
- if (rc < 0 )
474
- fprintf (stderr , "recv(2) error: %li, expected: %li, actual: %li\n" , rc , expected , actual );
485
+ if (rc < 0 ){
486
+ char buff [256 ];
487
+ fprintf (stderr , "recv(%li) error: %s, expected: %li, actual: %li\n" , rc , getSysError (buff ,sizeof (buff )), expected , actual );
488
+ }
475
489
else
476
490
qmsgrcvd (body , actual );
477
491
free (body );
@@ -503,7 +517,8 @@ EXP K init(K UNUSED(X)){
503
517
if (!(0 == validinit ))
504
518
return 0 ;
505
519
if (dumb_socketpair (spair ,1 ) == SOCKET_ERROR ){
506
- fprintf (stderr ,"Init failed. socketpair: %s\n" , strerror (errno ));
520
+ char buff [256 ];
521
+ fprintf (stderr ,"Init failed. socketpair: %s\n" , getSysError (buff ,sizeof (buff )));
507
522
return 0 ;
508
523
}
509
524
// Have to use (0 - fd) rather than simple negate, since SOCKET on Windows is unsigned ptr.
0 commit comments