X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb/blobdiff_plain/f51714bea4af46dd81d3ed97acffea57201f108f..e9b66bd166d33ade31b5b89179fbafa84bcf0541:/hmland.c diff --git a/hmland.c b/hmland.c index 8e5d6da..fd17e85 100644 --- a/hmland.c +++ b/hmland.c @@ -1,6 +1,6 @@ /* HM-CFG-LAN emulation for HM-CFG-USB * - * Copyright (c) 2013-15 Michael Gernoth + * Copyright (c) 2013-16 Michael Gernoth * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -47,6 +47,7 @@ #define PID_FILE "/var/run/hmland.pid" +#define POLL_TIMEOUT_MS 250 /* Wake up device/bus at least once every 250ms */ #define DEFAULT_REBOOT_SECONDS 86400 #define LAN_READ_CHUNK_SIZE 2048 /* Don't allow remote clients to consume all of our memory */ @@ -99,7 +100,7 @@ static void print_timestamp(FILE *f) fprintf(f, "%s.%06ld: ", ts, tv.tv_usec); } -static void write_log(char *buf, int len, char *fmt, ...) +static void write_log(const char *buf, int len, const char *fmt, ...) { va_list ap; int i; @@ -115,12 +116,18 @@ static void write_log(char *buf, int len, char *fmt, ...) if (fmt) { if (logfile) { va_start(ap, fmt); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" vfprintf(logfile, fmt, ap); +#pragma GCC diagnostic pop va_end(ap); } if (verbose) { va_start(ap, fmt); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" vprintf(fmt, ap); +#pragma GCC diagnostic pop va_end(ap); } } @@ -141,12 +148,12 @@ static void write_log(char *buf, int len, char *fmt, ...) fflush(logfile); } -static int format_part_out(uint8_t **inpos, int inlen, uint8_t **outpos, int outlen, int len, int flags) +static int format_part_out(uint8_t **inpos, int inlen, uint8_t **outpos, int outlen, size_t len, int flags) { uint8_t *buf_out = *outpos; uint8_t *outend = *outpos + outlen; uint8_t *inend = *inpos + inlen; - int i; + size_t i; if (flags & FLAG_COMMA_BEFORE) { CHECK_SPACE(1); @@ -201,7 +208,7 @@ static int parse_part_in(uint8_t **inpos, int inlen, uint8_t **outpos, int outle uint8_t *inend = *inpos + inlen; if (flags & FLAG_LENGTH_BYTE) { - int len = 0; + size_t len = 0; uint8_t *ip; ip = *inpos; @@ -430,6 +437,7 @@ static int hmlan_parse_one(uint8_t *cmd, int last, void *data) parse_part_in(&inpos, (last-(inpos-cmd)), &outpos, (sizeof(out)-(outpos-out)), 0); parse_part_in(&inpos, (last-(inpos-cmd)), &outpos, (sizeof(out)-(outpos-out)), 0); parse_part_in(&inpos, (last-(inpos-cmd)), &outpos, (sizeof(out)-(outpos-out)), FLAG_LENGTH_BYTE); + // Fallthrough to default expected, no break here default: parse_part_in(&inpos, (last-(inpos-cmd)), &outpos, (sizeof(out)-(outpos-out)), FLAG_IGNORE_COMMAS); break; @@ -572,7 +580,7 @@ static int comm(int fd_in, int fd_out, int master_socket, int flags) while(!quit) { int fd; - fd = hmcfgusb_poll(dev, 1000); /* Wakeup device/bus at least once a second */ + fd = hmcfgusb_poll(dev, POLL_TIMEOUT_MS); if (fd >= 0) { if (fd == master_socket) { int client; @@ -652,7 +660,7 @@ static int socket_server(char *iface, int port, int flags) exit(EXIT_FAILURE); } - if (fscanf(pidfile, "%u", &old_pid) != 1) { + if (fscanf(pidfile, "%d", &old_pid) != 1) { fclose(pidfile); fprintf(stderr, "Can't read old PID from " PID_FILE ", already running?\n"); exit(EXIT_FAILURE); @@ -890,7 +898,7 @@ int main(int argc, char **argv) break; case 'V': printf("hmland " VERSION "\n"); - printf("Copyright (c) 2013-15 Michael Gernoth\n\n"); + printf("Copyright (c) 2013-16 Michael Gernoth\n\n"); exit(EXIT_SUCCESS); case 'h': case ':':