diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/AFC.c | 43 | ||||
| -rw-r--r-- | src/AFC.h | 3 |
2 files changed, 45 insertions, 1 deletions
| @@ -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 | */ | ||
| 1226 | afc_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 | |||
| @@ -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 | ||
