Allow the local directive to be specified without the stratum field.
It's an option now, with default value 10. Also, move the parsing code
to cmdparse.c to make it available to the client.
/* ================================================== */
+int
+CPS_ParseLocal(char *line, int *stratum)
+{
+ int n;
+ char *cmd;
+
+ *stratum = 10;
+
+ while (*line) {
+ cmd = line;
+ line = CPS_SplitWord(line);
+
+ if (!strcasecmp(cmd, "stratum")) {
+ if (sscanf(line, "%d%n", stratum, &n) != 1)
+ return 0;
+ } else {
+ return 0;
+ }
+
+ line += n;
+ }
+
+ return 1;
+}
+/* ================================================== */
+
void
CPS_StatusToString(CPS_Status status, char *dest, int len)
{
/* Parse a command to add an NTP server or peer */
extern CPS_Status CPS_ParseNTPSourceAdd(char *line, CPS_NTP_Source *src);
+/* Parse a command to enable local reference */
+extern int CPS_ParseLocal(char *line, int *stratum);
+
/* Get a string describing error status */
extern void CPS_StatusToString(CPS_Status status, char *dest, int len);
static void
parse_local(char *line)
{
- int stratum;
- if (sscanf(line, "stratum%d", &stratum) == 1) {
- local_stratum = stratum;
- enable_local = 1;
- } else {
+ if (!CPS_ParseLocal(line, &local_stratum))
command_parse_error();
- }
+ enable_local = 1;
}
/* ================================================== */