X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fserial.c;h=2b77db655b2cec0d88772949c9ba9d72b80951cf;hp=482232024123a5f7172588716fe2b5884fe51c92;hb=a9e50e9e30ecde17e167e271060c8183bfcbf407;hpb=10139cda6f68ae1f921d79c930dd85944afb74a3 diff --git a/src/serial.c b/src/serial.c index 48223202..2b77db65 100644 --- a/src/serial.c +++ b/src/serial.c @@ -27,96 +27,81 @@ #include "plugin.h" #if !KERNEL_LINUX -# error "No applicable input method." +#error "No applicable input method." #endif -static void serial_submit (const char *type_instance, - derive_t rx, derive_t tx) -{ - value_list_t vl = VALUE_LIST_INIT; - value_t values[] = { - { .derive = rx }, - { .derive = tx }, - }; - - vl.values = values; - vl.values_len = STATIC_ARRAY_SIZE (values); - sstrncpy (vl.host, hostname_g, sizeof (vl.host)); - sstrncpy (vl.plugin, "serial", sizeof (vl.plugin)); - sstrncpy (vl.type, "serial_octets", sizeof (vl.type)); - sstrncpy (vl.type_instance, type_instance, - sizeof (vl.type_instance)); - - plugin_dispatch_values (&vl); +static void serial_submit(const char *type_instance, derive_t rx, derive_t tx) { + value_list_t vl = VALUE_LIST_INIT; + value_t values[] = { + {.derive = rx}, {.derive = tx}, + }; + + vl.values = values; + vl.values_len = STATIC_ARRAY_SIZE(values); + sstrncpy(vl.plugin, "serial", sizeof(vl.plugin)); + sstrncpy(vl.type, "serial_octets", sizeof(vl.type)); + sstrncpy(vl.type_instance, type_instance, sizeof(vl.type_instance)); + + plugin_dispatch_values(&vl); } -static int serial_read (void) -{ - FILE *fh; - char buffer[1024]; - - /* there are a variety of names for the serial device */ - if ((fh = fopen ("/proc/tty/driver/serial", "r")) == NULL && - (fh = fopen ("/proc/tty/driver/ttyS", "r")) == NULL) - { - char errbuf[1024]; - WARNING ("serial: fopen: %s", - sstrerror (errno, errbuf, sizeof (errbuf))); - return (-1); - } - - while (fgets (buffer, sizeof (buffer), fh) != NULL) - { - derive_t rx = 0; - derive_t tx = 0; - _Bool have_rx = 0, have_tx = 0; - size_t len; - - char *fields[16]; - int numfields; - - numfields = strsplit (buffer, fields, STATIC_ARRAY_SIZE (fields)); - if (numfields < 6) - continue; - - /* - * 0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 - * 1: uart:16550A port:000002F8 irq:3 tx:0 rx:0 - */ - len = strlen (fields[0]); - if (len < 2) - continue; - if (fields[0][len - 1] != ':') - continue; - fields[0][len - 1] = 0; - - for (int i = 1; i < numfields; i++) - { - len = strlen (fields[i]); - if (len < 4) - continue; - - if (strncmp (fields[i], "tx:", 3) == 0) - { - if (strtoderive (fields[i] + 3, &tx) == 0) - have_tx = 1; - } - else if (strncmp (fields[i], "rx:", 3) == 0) - { - if (strtoderive (fields[i] + 3, &rx) == 0) - have_rx = 1; - } - } - - if (have_rx && have_tx) - serial_submit (fields[0], rx, tx); - } - - fclose (fh); - return (0); +static int serial_read(void) { + FILE *fh; + char buffer[1024]; + + /* there are a variety of names for the serial device */ + if ((fh = fopen("/proc/tty/driver/serial", "r")) == NULL && + (fh = fopen("/proc/tty/driver/ttyS", "r")) == NULL) { + WARNING("serial: fopen: %s", STRERRNO); + return -1; + } + + while (fgets(buffer, sizeof(buffer), fh) != NULL) { + derive_t rx = 0; + derive_t tx = 0; + _Bool have_rx = 0, have_tx = 0; + size_t len; + + char *fields[16]; + int numfields; + + numfields = strsplit(buffer, fields, STATIC_ARRAY_SIZE(fields)); + if (numfields < 6) + continue; + + /* + * 0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 + * 1: uart:16550A port:000002F8 irq:3 tx:0 rx:0 + */ + len = strlen(fields[0]); + if (len < 2) + continue; + if (fields[0][len - 1] != ':') + continue; + fields[0][len - 1] = 0; + + for (int i = 1; i < numfields; i++) { + len = strlen(fields[i]); + if (len < 4) + continue; + + if (strncmp(fields[i], "tx:", 3) == 0) { + if (strtoderive(fields[i] + 3, &tx) == 0) + have_tx = 1; + } else if (strncmp(fields[i], "rx:", 3) == 0) { + if (strtoderive(fields[i] + 3, &rx) == 0) + have_rx = 1; + } + } + + if (have_rx && have_tx) + serial_submit(fields[0], rx, tx); + } + + fclose(fh); + return 0; } /* int serial_read */ -void module_register (void) -{ - plugin_register_read ("serial", serial_read); +void module_register(void) { + plugin_register_read("serial", serial_read); } /* void module_register */