]> granicus.if.org Git - file/commitdiff
more autoconf glue.
authorChristos Zoulas <christos@zoulas.com>
Mon, 20 Oct 2008 17:20:41 +0000 (17:20 +0000)
committerChristos Zoulas <christos@zoulas.com>
Mon, 20 Oct 2008 17:20:41 +0000 (17:20 +0000)
configure.ac
src/cdf_time.c
src/readcdf.c

index ae674ffee4825af476251471647cc093ff1c7170..c2d5068e8c00a4d92b56f850e7886e7f0d06ff29 100644 (file)
@@ -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
index dbabae61f898405333e102f20581c6455231afc3..b74cd305f7cb2f3a840a39a3c2ddebe476401d35 100644 (file)
@@ -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) {
index 5908473fd11c9bd2da2454c7fbb8f84d1950d2f1..0389e2b8fe1e5ebfe5006faa51619690c654f2c3 100644 (file)
 #include "file.h"
 
 #ifndef lint
-FILE_RCSID("@(#)$File: readcdf.c,v 1.7 2008/10/18 20:47:48 christos Exp $")
+FILE_RCSID("@(#)$File: readcdf.c,v 1.8 2008/10/20 17:20:41 christos Exp $")
 #endif
 
 #include <stdio.h>
-#include <err.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <errno.h>
@@ -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;
 }