Switch refclock driver parameter to string

This commit is contained in:
Miroslav Lichvar 2009-08-19 15:29:52 +02:00
parent 8de55124a8
commit 67c0f1c08c
4 changed files with 27 additions and 11 deletions

25
conf.c
View file

@ -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, &param, &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;

View file

@ -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;

View file

@ -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

View file

@ -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) {