summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristos Zoulas <christos@zoulas.com>2008-10-20 17:20:41 +0000
committerChristos Zoulas <christos@zoulas.com>2008-10-20 17:20:41 +0000
commit14beee1a4d0d2da24bce3c98052f3284295316e1 (patch)
tree3c007a00f2b17ebf6773ba19ab7763878252a0e2
parent11c9590f84974c63fa91da14fdefe5a8b6eb9fe8 (diff)
downloadfile-git-14beee1a4d0d2da24bce3c98052f3284295316e1.tar.gz
more autoconf glue.
-rw-r--r--configure.ac2
-rw-r--r--src/cdf_time.c6
-rw-r--r--src/readcdf.c40
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 5908473f..0389e2b8 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.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;
}