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;
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;
+ }
+
+ 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;
if (!strncasecmp(cmd, "refid", 5)) {
struct RCL_Instance_Record {
RefclockDriver *driver;
void *data;
- int driver_parameter;
+ char *driver_parameter;
int driver_poll;
int driver_polled;
int poll;
inst->driver->fini(inst);
filter_fini(&inst->filter);
+ Free(inst->driver_parameter);
}
if (n_sources > 0)
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];
}
return instance->data;
}
-int
+char *
RCL_GetDriverParameter(RCL_Instance instance)
{
return instance->driver_parameter;
typedef struct {
char driver_name[4];
- int driver_parameter;
+ char *driver_parameter;
int driver_poll;
int poll;
int filter_length;
/* 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