summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2025-06-09 11:05:05 +0200
committerGravatar Nikias Bassen2025-06-09 11:05:05 +0200
commitb9ff67fbd70074964e09c043206e19d2f5af4f41 (patch)
tree5ea06fb2481f1ee0befdd0e5b1b63a7c915423f6
parent4c50979bdf20d8d17281463cef7cd4c848f6d79d (diff)
downloadlibimobiledevice-b9ff67fbd70074964e09c043206e19d2f5af4f41.tar.gz
libimobiledevice-b9ff67fbd70074964e09c043206e19d2f5af4f41.tar.bz2
Use updated libplist API if available
-rw-r--r--configure.ac16
-rw-r--r--tools/idevicebackup.c12
-rw-r--r--tools/idevicebackup2.c15
3 files changed, 40 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac
index 66f6b4b..5a976c9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -84,8 +84,24 @@ if test "x$ac_cv_have_endian_h" = "xno"; then
fi
fi
+CACHED_CFLAGS="$CFLAGS"
+CFLAGS+=" $libplist_CFLAGS -Werror"
+
AC_CHECK_DECL([plist_from_json], [AC_DEFINE([HAVE_PLIST_JSON], [1], [Define if libplist has JSON support])], [], [[#include <plist/plist.h>]])
+# check if libplist has plist_new_unix_date()
+AC_CACHE_CHECK(for plist_new_unix_date, ac_cv_plist_unix_date,
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #include <plist/plist.h>
+ ]], [[
+ return plist_new_unix_date(0) ? 0 : 1
+ ]])],[ac_cv_plist_unix_date=yes],[ac_cv_plist_unix_date=no]))
+if test "$ac_cv_plist_unix_date" = "yes"; then
+ AC_DEFINE(HAVE_PLIST_UNIX_DATE, 1, [Define if libplist has new unix date API (>= 2.7.0)])
+fi
+
+CFLAGS="$CACHED_CFLAGS"
+
# Check for operating system
AC_MSG_CHECKING([for platform-specific build settings])
case ${host_os} in
diff --git a/tools/idevicebackup.c b/tools/idevicebackup.c
index c2ff6a3..363abad 100644
--- a/tools/idevicebackup.c
+++ b/tools/idevicebackup.c
@@ -176,7 +176,13 @@ static plist_t mobilebackup_factory_info_plist_new(const char* udid)
if (value_node)
plist_dict_set_item(ret, "IMEI", plist_copy(value_node));
- plist_dict_set_item(ret, "Last Backup Date", plist_new_date(time(NULL) - MAC_EPOCH, 0));
+ plist_dict_set_item(ret, "Last Backup Date",
+#ifdef HAVE_PLIST_UNIX_DATE
+ plist_new_unix_date(time(NULL))
+#else
+ plist_new_date(time(NULL) - MAC_EPOCH, 0)
+#endif
+ );
value_node = plist_dict_get_item(root_node, "ProductType");
plist_dict_set_item(ret, "Product Type", plist_copy(value_node));
@@ -213,7 +219,11 @@ static void mobilebackup_info_update_last_backup_date(plist_t info_plist)
return;
node = plist_dict_get_item(info_plist, "Last Backup Date");
+#ifdef HAVE_PLIST_UNIX_DATE
+ plist_set_unix_date_val(node, time(NULL));
+#else
plist_set_date_val(node, time(NULL) - MAC_EPOCH, 0);
+#endif
node = NULL;
}
diff --git a/tools/idevicebackup2.c b/tools/idevicebackup2.c
index 34b9739..cdce515 100644
--- a/tools/idevicebackup2.c
+++ b/tools/idevicebackup2.c
@@ -460,7 +460,13 @@ static plist_t mobilebackup_factory_info_plist_new(const char* udid, idevice_t d
/* Installed Applications */
plist_dict_set_item(ret, "Installed Applications", installed_apps);
- plist_dict_set_item(ret, "Last Backup Date", plist_new_date(time(NULL) - MAC_EPOCH, 0));
+ plist_dict_set_item(ret, "Last Backup Date",
+#ifdef HAVE_PLIST_UNIX_DATE
+ plist_new_unix_date(time(NULL))
+#else
+ plist_new_date(time(NULL) - MAC_EPOCH, 0)
+#endif
+ );
value_node = plist_dict_get_item(root_node, "MobileEquipmentIdentifier");
if (value_node)
@@ -1223,7 +1229,12 @@ static void mb2_handle_list_directory(mobilebackup2_client_t mobilebackup2, plis
plist_dict_set_item(fdict, "DLFileType", plist_new_string(ftype));
plist_dict_set_item(fdict, "DLFileSize", plist_new_uint(st.st_size));
plist_dict_set_item(fdict, "DLFileModificationDate",
- plist_new_date(st.st_mtime - MAC_EPOCH, 0));
+#ifdef HAVE_PLIST_UNIX_DATE
+ plist_new_unix_date(st.st_mtime)
+#else
+ plist_new_date(st.st_mtime - MAC_EPOCH, 0)
+#endif
+ );
plist_dict_set_item(dirlist, ep->d_name, fdict);
free(fpath);