summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/AFC.c43
-rw-r--r--src/AFC.h3
2 files changed, 45 insertions, 1 deletions
diff --git a/src/AFC.c b/src/AFC.c
index ba436e7..54b3795 100644
--- a/src/AFC.c
+++ b/src/AFC.c
@@ -1213,3 +1213,46 @@ afc_error_t afc_make_link(afc_client_t client, afc_link_type_t linktype, const c
1213 1213
1214 return ret; 1214 return ret;
1215} 1215}
1216
1217/** Sets the modification time of a file on the phone.
1218 *
1219 * @param client The client to use to set the file size.
1220 * @param path Path of the file for which the modification time should be set.
1221 * @param mtime The modification time to set in nanoseconds since epoch.
1222 *
1223 * @return AFC_E_SUCCESS if everything went well, AFC_E_INVALID_ARGUMENT
1224 * if arguments are NULL or invalid, AFC_E_NOT_ENOUGH_DATA otherwise.
1225 */
1226afc_error_t afc_set_file_time(afc_client_t client, const char *path, uint64_t mtime)
1227{
1228 char *response = NULL;
1229 char *send = (char *) malloc(sizeof(char) * (strlen(path) + 1 + 8));
1230 int bytes = 0;
1231 afc_error_t ret = AFC_E_UNKNOWN_ERROR;
1232
1233 if (!client || !path || !client->afc_packet || !client->connection)
1234 return AFC_E_INVALID_ARGUMENT;
1235
1236 afc_lock(client);
1237
1238 // Send command
1239 memcpy(send, &mtime, 8);
1240 memcpy(send + 8, path, strlen(path) + 1);
1241 client->afc_packet->entire_length = client->afc_packet->this_length = 0;
1242 client->afc_packet->operation = AFC_OP_SET_FILE_TIME;
1243 bytes = afc_dispatch_packet(client, send, 8 + strlen(path) + 1);
1244 free(send);
1245 if (bytes <= 0) {
1246 afc_unlock(client);
1247 return AFC_E_NOT_ENOUGH_DATA;
1248 }
1249 // Receive response
1250 ret = afc_receive_data(client, &response, &bytes);
1251 if (response)
1252 free(response);
1253
1254 afc_unlock(client);
1255
1256 return ret;
1257}
1258
diff --git a/src/AFC.h b/src/AFC.h
index 685d7b5..6b4a0aa 100644
--- a/src/AFC.h
+++ b/src/AFC.h
@@ -82,6 +82,7 @@ enum {
82 AFC_OP_SET_FS_BS = 0x00000019, // SetFSBlockSize (0x800000) 82 AFC_OP_SET_FS_BS = 0x00000019, // SetFSBlockSize (0x800000)
83 AFC_OP_SET_SOCKET_BS = 0x0000001A, // SetSocketBlockSize (0x800000) 83 AFC_OP_SET_SOCKET_BS = 0x0000001A, // SetSocketBlockSize (0x800000)
84 AFC_OP_FILE_LOCK = 0x0000001B, // FileRefLock 84 AFC_OP_FILE_LOCK = 0x0000001B, // FileRefLock
85 AFC_OP_MAKE_LINK = 0x0000001C // MakeLink 85 AFC_OP_MAKE_LINK = 0x0000001C, // MakeLink
86 AFC_OP_SET_FILE_TIME = 0x0000001E // set st_mtime
86}; 87};
87 88