Imported Upstream version 2.5.2p1
[debian/amanda] / tape-src / output-file.c
index 63e00d9d771a168026c76950dce6dc42ebf64aa9..d4e4284d80c9af6fd2620e6241b66deb36f61f41 100644 (file)
@@ -355,11 +355,16 @@ file_open(
        if (volume_info[fd].fd >= 0 && fi->ri_count == 0 &&
                (rfd = open(recordfilename, O_RDONLY)) >= 0) {
            for (; (line = areads(rfd)) != NULL; free(line)) {
-               n = sscanf(line,
-                          OFF_T_FMT " "  OFF_T_FMT " " SIZE_T_FMT,
-                          (OFF_T_FMT_TYPE *)&start_record,
-                          (OFF_T_FMT_TYPE *)&end_record,
-                          (SIZE_T_FMT_TYPE *)&record_size);
+                /* We play this game because OFF_T_FMT_TYPE is not
+                   necessarily the same as off_t, and we need to cast the
+                   actual value (not just the pointer. */
+                OFF_T_FMT_TYPE start_record_ = (OFF_T_FMT_TYPE)0;
+                OFF_T_FMT_TYPE end_record_ = (OFF_T_FMT_TYPE)0;
+               n = sscanf(line, OFF_T_FMT " " OFF_T_FMT " " SIZE_T_FMT,
+                           &start_record_, &end_record_, &record_size);
+                start_record = (off_t)start_record_;
+                end_record = (off_t)end_record_;
+
                if (n == 3) {
                     ri_p = &fi->ri;
                    amtable_alloc((void **)ri_p,