From 67c0f1c08c414fad995a7e404a718a47af49e358 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Wed, 19 Aug 2009 15:29:52 +0200 Subject: [PATCH] Switch refclock driver parameter to string --- conf.c | 25 ++++++++++++++++++++----- refclock.c | 7 ++++--- refclock.h | 4 ++-- refclock_shm.c | 2 +- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/conf.c b/conf.c index fdd9d97..b5ef510 100644 --- a/conf.c +++ b/conf.c @@ -428,10 +428,11 @@ parse_peer(const char *line) static void parse_refclock(const char *line) { - int i, n, param, poll, dpoll, filter_length; + int i, n, poll, dpoll, filter_length; unsigned long ref_id; double offset; - char name[5], cmd[10 + 1]; + const char *tmp; + char name[5], cmd[10 + 1], *param; unsigned char ref[5]; i = n_refclock_sources; @@ -444,12 +445,26 @@ parse_refclock(const char *line) offset = 0.0; ref_id = 0; - if (sscanf(line, "%4s %d%n", name, ¶m, &n) != 2) { - LOG(LOGS_WARN, LOGF_Configure, "Could not read refclock driver name and parameter at line %d", line_number); + if (sscanf(line, "%4s%n", name, &n) != 1) { + LOG(LOGS_WARN, LOGF_Configure, "Could not read refclock driver name at line %d", line_number); + return; + } + line += n; + + while (isspace(line[0])) + line++; + tmp = line; + while (line[0] != '\0' && !isspace(line[0])) + line++; + + if (line == tmp) { + LOG(LOGS_WARN, LOGF_Configure, "Could not read refclock parameter at line %d", line_number); return; } - line += n; + param = MallocArray(char, 1 + line - tmp); + strncpy(param, tmp, line - tmp); + param[line - tmp + 1] = '\0'; while (sscanf(line, "%10s%n", cmd, &n) == 1) { line += n; diff --git a/refclock.c b/refclock.c index 1d8a5b3..8d0526a 100644 --- a/refclock.c +++ b/refclock.c @@ -52,7 +52,7 @@ struct MedianFilter { struct RCL_Instance_Record { RefclockDriver *driver; void *data; - int driver_parameter; + char *driver_parameter; int driver_poll; int driver_polled; int poll; @@ -99,6 +99,7 @@ RCL_Finalise(void) inst->driver->fini(inst); filter_fini(&inst->filter); + Free(inst->driver_parameter); } if (n_sources > 0) @@ -139,7 +140,7 @@ RCL_AddRefclock(RefclockParameters *params) else { unsigned char ref[5] = { 0, 0, 0, 0, 0 }; - snprintf((char *)ref, 5, "%s%d", params->driver_name, params->driver_parameter); + snprintf((char *)ref, 5, "%s%s", params->driver_name, params->driver_parameter); inst->ref_id = ref[0] << 24 | ref[1] << 16 | ref[2] << 8 | ref[3]; } @@ -206,7 +207,7 @@ RCL_GetDriverData(RCL_Instance instance) return instance->data; } -int +char * RCL_GetDriverParameter(RCL_Instance instance) { return instance->driver_parameter; diff --git a/refclock.h b/refclock.h index 9e451b6..3c6f45a 100644 --- a/refclock.h +++ b/refclock.h @@ -33,7 +33,7 @@ typedef struct { char driver_name[4]; - int driver_parameter; + char *driver_parameter; int driver_poll; int poll; int filter_length; @@ -59,7 +59,7 @@ extern void RCL_ReportSource(RPT_SourceReport *report, struct timeval *now); /* functions used by drivers */ extern void RCL_SetDriverData(RCL_Instance instance, void *data); extern void *RCL_GetDriverData(RCL_Instance instance); -extern int RCL_GetDriverParameter(RCL_Instance instance); +extern char *RCL_GetDriverParameter(RCL_Instance instance); extern int RCL_AddSample(RCL_Instance instance, struct timeval *sample_time, double offset, NTP_Leap leap_status); #endif diff --git a/refclock_shm.c b/refclock_shm.c index 116c8d0..27dece2 100644 --- a/refclock_shm.c +++ b/refclock_shm.c @@ -59,7 +59,7 @@ static int shm_initialise(RCL_Instance instance) { int id, param; struct shmTime *shm; - param = RCL_GetDriverParameter(instance); + param = atoi(RCL_GetDriverParameter(instance)); id = shmget(SHMKEY + param, sizeof (struct shmTime), IPC_CREAT | 0700); if (id == -1) {