int flib_ipcbase_send_raw(flib_ipcbase *ipc, const void *data, size_t len) { if(log_badargs_if2(ipc==NULL, data==NULL && len>0) || log_w_if(!ipc->sock, "flib_ipcbase_send_raw: Not connected.")) { return -1; } if(flib_socket_send(ipc->sock, data, len) == len) { logSentMsg(data, len); return 0; } else { flib_log_w("Failed or incomplete IPC write: engine connection lost."); flib_socket_close(ipc->sock); ipc->sock = NULL; return -1; } }
int flib_ini_get_bool(flib_ini *ini, bool *outVar, const char *key) { char *tmpValue = NULL; int result = flib_ini_get_str(ini, &tmpValue, key); if(result==0) { bool trueval = strchr("1tTyY", tmpValue[0]); bool falseval = strchr("0fFnN", tmpValue[0]); if(!trueval && !falseval) { flib_log_w("ini setting %s/%s = \"%s\" is not a recognized truth value.", ini->currentSection, key, tmpValue); result = INI_ERROR_FORMAT; } else { *outVar = trueval; } } free(tmpValue); return result; }
int flib_ini_get_int(flib_ini *ini, int *outVar, const char *key) { char *tmpValue = NULL; int result = flib_ini_get_str(ini, &tmpValue, key); if(result==0) { errno = 0; long val = strtol(tmpValue, NULL, 10); if(errno!=0 || val<INT_MIN || val>INT_MAX) { flib_log_w("Cannot parse ini setting %s/%s = \"%s\" as integer.", ini->currentSection, key, tmpValue); result = INI_ERROR_FORMAT; } else { *outVar = val; } } free(tmpValue); return result; }
static void setField(char field[WEAPONS_COUNT+1], const char *line, int lineLen, bool no9) { if(lineLen>WEAPONS_COUNT) { lineLen = WEAPONS_COUNT; } char min = '0'; char max = no9 ? '8' : '9'; for(int i=0; i<lineLen; i++) { if(line[i] >= min && line[i] <= max) { field[i] = line[i]; } else { flib_log_w("Invalid character in weapon config string \"%.*s\", position %i", lineLen, line, i); field[i] = '0'; } } for(int i=lineLen; i<WEAPONS_COUNT; i++) { field[i] = '0'; } field[WEAPONS_COUNT] = 0; }
int flib_ipcbase_recv_message(flib_ipcbase *ipc, void *data) { if(log_badargs_if2(ipc==NULL, data==NULL)) { return -1; } if(!isMessageReady(ipc)) { receiveToBuffer(ipc); } if(isMessageReady(ipc)) { int msgsize = ipc->readBuffer[0]+1; popFromReadBuffer(ipc, data, msgsize); logRecvMsg(data); return msgsize; } else if(!ipc->sock && ipc->readBufferSize>0) { flib_log_w("Last message from engine data stream is incomplete (received %u of %u bytes)", (unsigned)ipc->readBufferSize, (unsigned)(ipc->readBuffer[0])+1); ipc->readBufferSize = 0; return -1; } else { return -1; } }