summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Bastien Nocera2009-08-01 15:04:27 +0100
committerGravatar Matt Colyer2009-08-03 08:58:33 -0700
commitd5da1a93f977688d621f3f3650ee0a7a51e2b373 (patch)
tree34bfbb67f40d0f58f900201e88d110124f2009d6
parenteb5d285ed474f0cc20b968e4a5d590a3b35e52a7 (diff)
downloadlibimobiledevice-d5da1a93f977688d621f3f3650ee0a7a51e2b373.tar.gz
libimobiledevice-d5da1a93f977688d621f3f3650ee0a7a51e2b373.tar.bz2
Add afc_get_device_info_field() helper function
For use in front-end applications, also serves to document the available keys.
-rw-r--r--include/libiphone/afc.h3
-rw-r--r--src/AFC.c29
2 files changed, 32 insertions, 0 deletions
diff --git a/include/libiphone/afc.h b/include/libiphone/afc.h
index 651621e..77b6f0e 100644
--- a/include/libiphone/afc.h
+++ b/include/libiphone/afc.h
@@ -106,6 +106,9 @@ afc_error_t afc_make_directory(afc_client_t client, const char *dir);
afc_error_t afc_truncate(afc_client_t client, const char *path, off_t newsize);
afc_error_t afc_make_link(afc_client_t client, afc_link_type_t linktype, const char *target, const char *linkname);
+/* Helper functions */
+char * afc_get_device_info_field(afc_client_t client, const char *field);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/AFC.c b/src/AFC.c
index 826c9e5..d2761cf 100644
--- a/src/AFC.c
+++ b/src/AFC.c
@@ -468,6 +468,35 @@ afc_error_t afc_get_device_info(afc_client_t client, char ***infos)
return ret;
}
+/** Get a specific field of the device info for a client connection to phone.
+ * Known values are: Model, FSTotalBytes, FSFreeBytes and FSBlockSize. This is
+ * a helper function for afc_get_device_info().
+ *
+ * @param client The client to get device info for.
+ * @param field The field to get the information for
+ *
+ * @return A char * or NULL if there was an error.
+ */
+char * afc_get_device_info_field(afc_client_t client, const char *field)
+{
+ char *ret = NULL;
+ char **kvps, **ptr;
+
+ if (field == NULL || afc_get_device_info(client, &kvps) != AFC_E_SUCCESS)
+ return NULL;
+
+ for (ptr = kvps; *ptr; ptr++) {
+ if (!strcmp(*ptr, field)) {
+ ret = strdup(*(ptr+1));
+ break;
+ }
+ }
+
+ g_strfreev(kvps);
+
+ return ret;
+}
+
/** Deletes a file or directory.
*
* @param client The client to use.