From 005a2fdb660053cde148d372eb9cda089fa3afff Mon Sep 17 00:00:00 2001 From: Christos Zoulas Date: Mon, 20 Oct 2008 17:20:41 +0000 Subject: [PATCH] more autoconf glue. --- configure.ac | 2 ++ src/cdf_time.c | 6 ++++++ src/readcdf.c | 40 +++++++++++++++++++--------------------- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/configure.ac b/configure.ac index ae674ffe..c2d5068e 100644 --- a/configure.ac +++ b/configure.ac @@ -75,6 +75,8 @@ AC_TYPE_OFF_T AC_TYPE_SIZE_T AC_CHECK_MEMBERS([struct stat.st_rdev]) +AC_STRUCT_TM +AC_CHECK_MEMBERS([struct tm.tm_gmtoff, struct tm.tm_zone]) AC_STRUCT_TIMEZONE_DAYLIGHT AC_SYS_LARGEFILE AC_FUNC_FSEEKO diff --git a/src/cdf_time.c b/src/cdf_time.c index dbabae61..b74cd305 100644 --- a/src/cdf_time.c +++ b/src/cdf_time.c @@ -105,7 +105,9 @@ int cdf_timestamp_to_timespec(struct timespec *ts, cdf_timestamp_t t) { struct tm tm; +#ifdef HAVE_STRUCT_TM_TM_ZONE static char UTC[] = "UTC"; +#endif /* Unit is 100's of nanoseconds */ ts->tv_nsec = (t % CDF_TIME_PREC) * 100; @@ -130,8 +132,12 @@ cdf_timestamp_to_timespec(struct timespec *ts, cdf_timestamp_t t) tm.tm_wday = 0; tm.tm_yday = 0; tm.tm_isdst = 0; +#ifdef HAVE_STRUCT_TM_TM_GMTOFF tm.tm_gmtoff = 0; +#endif +#ifdef HAVE_STRUCT_TM_TM_ZONE tm.tm_zone = UTC; +#endif tm.tm_year -= 1900; ts->tv_sec = mktime(&tm); if (ts->tv_sec == -1) { diff --git a/src/readcdf.c b/src/readcdf.c index dd7bb42b..55128feb 100644 --- a/src/readcdf.c +++ b/src/readcdf.c @@ -26,11 +26,10 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: readcdf.c,v 1.6 2008/10/14 10:38:22 christos Exp $") +FILE_RCSID("@(#)$File: readcdf.c,v 1.7 2008/10/18 20:47:48 christos Exp $") #endif #include -#include #include #include #include @@ -207,45 +206,44 @@ file_trycdf(struct magic_set *ms, int fd, const unsigned char *buf, cdf_dump_sat("SAT", &h, &sat); #endif - if (cdf_read_ssat(fd, &h, &sat, &ssat) == -1) { + if ((i = cdf_read_ssat(fd, &h, &sat, &ssat)) == -1) { file_error(ms, errno, "Can't read SAT"); - free(sat.sat_tab); - return -1; + goto out1; } #ifdef CDF_DEBUG cdf_dump_sat("SSAT", &h, &ssat); #endif - if (cdf_read_dir(fd, &h, &sat, &dir) == -1) { + if ((i = cdf_read_dir(fd, &h, &sat, &dir)) == -1) { file_error(ms, errno, "Can't read directory"); - free(sat.sat_tab); - free(ssat.sat_tab); - return -1; + goto out2; } - if (cdf_read_short_stream(fd, &h, &sat, &dir, &sst) == -1) - err(1, "Cannot read short stream"); + if ((i = cdf_read_short_stream(fd, &h, &sat, &dir, &sst)) == -1) { + file_error(ms, errno, "Cannot read short stream"); + goto out3; + } #ifdef CDF_DEBUG cdf_dump_dir(fd, &h, &sat, &ssat, &sst, &dir); #endif - if (cdf_read_summary_info(fd, &h, &sat, &ssat, &sst, &dir, &scn) + if ((i = cdf_read_summary_info(fd, &h, &sat, &ssat, &sst, &dir, &scn)) == -1) { file_error(ms, errno, "Can't read summary_info"); - free(sat.sat_tab); - free(ssat.sat_tab); - free(sst.sst_tab); - free(dir.dir_tab); - return -1; + goto out4; } #ifdef CDF_DEBUG cdf_dump_summary_info(&h, &scn); #endif i = cdf_file_summary_info(ms, &scn); - free(sat.sat_tab); - free(ssat.sat_tab); - free(dir.dir_tab); - free(sst.sst_tab); free(scn.sst_tab); +out4: + free(sst.sst_tab); +out3: + free(dir.dir_tab); +out2: + free(ssat.sat_tab); +out1: + free(sat.sat_tab); return i; } -- 2.50.1