On Tue, Oct 18, 2022 at 05:08:29PM +0200, Maciek Machnikowski wrote: > To enable handling lstab in the same way by different pps sources, move > update_leapsecond_table function from the nmea_pps_source to the generic lstab > file. This also required moving leapfile filename and its modification time to > the struct lstab. > > Signed-off-by: Maciek Machnikowski <mac...@machnikowski.net> > --- > lstab.c | 55 ++++++++++++++++++++++++++++++++++++++++ > lstab.h | 8 ++++++ > ts2phc_nmea_pps_source.c | 51 +++---------------------------------- > 3 files changed, 67 insertions(+), 47 deletions(-) > > diff --git a/lstab.c b/lstab.c > index a44aead..019e2d1 100644 > --- a/lstab.c > +++ b/lstab.c > @@ -3,6 +3,7 @@ > * @note Copyright (C) 2012 Richard Cochran <richardcoch...@gmail.com> > * @note SPDX-License-Identifier: GPL-2.0+ > */ > +#include <sys/stat.h> > #include <inttypes.h> > #include <stdio.h> > #include <stdlib.h>
Preserve alphabetical order please. > @@ -157,6 +160,8 @@ static int lstab_read(struct lstab *lstab, const char > *name) > struct lstab *lstab_create(const char *filename) > { > struct lstab *lstab = calloc(1, sizeof(*lstab)); > + struct stat statbuf; > + int err; > > if (!lstab) { > return NULL; > @@ -166,12 +171,57 @@ struct lstab *lstab_create(const char *filename) > free(lstab); > return NULL; > } > + lstab->leapfile = filename; > + > + err = stat(lstab->leapfile, &statbuf); > + if (err) { > + fprintf(stderr, "file status failed on %s: %m", > + lstab->leapfile); Missing free(lstab); > + return NULL; > + } > + > + lstab->lsfile_mtime = statbuf.st_mtim.tv_sec; > + > } else { > lstab_init(lstab); > } > return lstab; > } > > +int update_leapsecond_table(struct lstab *lstab) No need for global function. Add static keyword. > +{ > + const char* leapfile; > + struct stat statbuf; > + int err; > + > + if (!lstab) { > + return -1; > + } This test is unnecessary as caller provides valid lstab. > + if (!lstab->leapfile) { > + return 0; > + } > + err = stat(lstab->leapfile, &statbuf); > + if (err) { > + fprintf(stderr, "file status failed on %s: %m", > + lstab->leapfile); > + return -1; > + } > + if (lstab->lsfile_mtime == statbuf.st_mtim.tv_sec) { > + return 0; > + } > + printf("updating leap seconds file\n"); > + leapfile = lstab->leapfile; > + lstab_destroy(lstab); > + > + lstab = lstab_create(leapfile); > + if (!lstab) { > + return -1; > + } > + > + return 0; > +} Thanks, Richard _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel