annotate data/osc/sv-osc-send.c @ 961:fae5689f7e27

Frame this condition more defensively (from coverity scan)
author Chris Cannam
date Wed, 03 Sep 2014 09:57:30 +0100
parents 32e50b620a6c
children
rev   line source
Chris@320 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@320 2
Chris@320 3 #include <stdlib.h>
Chris@320 4 #include <stdio.h>
Chris@320 5 #include <string.h>
Chris@320 6 #include <ctype.h>
Chris@320 7 #include <lo/lo.h>
Chris@320 8
Chris@320 9 void
Chris@320 10 usage(char *program_name)
Chris@320 11 {
Chris@320 12 char *base_name = strrchr(program_name, '/');
Chris@320 13
Chris@320 14 if (base_name && *(base_name + 1) != 0) {
Chris@320 15 base_name += 1;
Chris@320 16 } else {
Chris@320 17 base_name = program_name;
Chris@320 18 }
Chris@320 19
Chris@320 20 fprintf(stderr, "\nusage: %s <OSC URL> [<values>]\n\n", program_name);
Chris@320 21 fprintf(stderr, "example OSC URLs:\n\n"
Chris@320 22 " osc.udp://localhost:19383/path/test 1.0 4.2\n"
Chris@320 23 " osc.udp://my.host.org:10886/3/13/load file\n\n");
Chris@320 24 fprintf(stderr, "numeric arguments will be treated as OSC 'f' floating point types.\n\n");
Chris@320 25 exit(1);
Chris@320 26 }
Chris@320 27
Chris@320 28 int main(int argc, char *argv[])
Chris@320 29 {
Chris@320 30 lo_address a;
Chris@320 31 char *url, *host, *port, *path;
Chris@320 32 lo_message message;
Chris@320 33 unsigned int i;
Chris@320 34
Chris@320 35 if (argc < 2) {
Chris@320 36 usage(argv[0]);
Chris@320 37 /* does not return */
Chris@320 38 }
Chris@320 39 url = argv[1];
Chris@320 40
Chris@320 41 host = lo_url_get_hostname(url);
Chris@320 42 port = lo_url_get_port(url);
Chris@320 43 path = lo_url_get_path(url);
Chris@320 44 a = lo_address_new(host, port);
Chris@320 45
Chris@320 46 message = lo_message_new();
Chris@320 47
Chris@320 48 for (i = 0; i + 2 < argc; ++i) {
Chris@320 49
Chris@320 50 int index = i + 2;
Chris@320 51 char *param;
Chris@320 52
Chris@320 53 param = argv[index];
Chris@320 54 if (!isdigit(param[0])) {
Chris@320 55 lo_message_add_string(message, argv[index]);
Chris@320 56 } else {
Chris@320 57 lo_message_add_float(message, atof(argv[index]));
Chris@320 58 }
Chris@320 59 }
Chris@320 60
Chris@320 61 lo_send_message(a, path, message);
Chris@320 62
Chris@320 63 if (lo_address_errno(a)) {
Chris@320 64 printf("liblo error: %s\n", lo_address_errstr(a));
Chris@320 65 }
Chris@320 66
Chris@320 67 free(host);
Chris@320 68 free(port);
Chris@320 69 free(path);
Chris@320 70
Chris@320 71 return 0;
Chris@320 72 }
Chris@320 73