diff options
Diffstat (limited to 'src/AFC.c')
| -rw-r--r-- | src/AFC.c | 49 | 
1 files changed, 48 insertions, 1 deletions
| @@ -179,7 +179,7 @@ static int dispatch_AFC_packet(iphone_afc_client_t client, const char *data, int  		log_debug_msg("dispatch_AFC_packet: sent the first now go with the second\n");  		log_debug_msg("Length: %i\n", length - offset);  		log_debug_msg("Buffer: \n"); -		log_debug_msg(data + offset); +		log_debug_buffer(data + offset, length - offset);  		iphone_mux_send(client->connection, data + offset, length - offset, &bytes);  		return bytes; @@ -1017,6 +1017,53 @@ iphone_error_t iphone_afc_truncate_file(iphone_afc_client_t client, iphone_afc_f  	}  } +/** Sets the size of a file on the phone without prior opening it. + *  + * @param client The client to use to set the file size. + * @param path The path of the file to be truncated. + * @param newsize The size to set the file to.  + *  + * @return IPHONE_E_SUCCESS if everything went well, IPHONE_E_INVALID_ARG + *         if arguments are NULL or invalid, IPHONE_E_NOT_ENOUGH_DATA otherwise. + */ +iphone_error_t iphone_afc_truncate(iphone_afc_client_t client, const char *path, off_t newsize) +{ +	char *response = NULL; +	char *send = (char *) malloc(sizeof(char) * (strlen(path) + 1 + 8)); +	int bytes = 0; +	uint64_t size_requested = newsize; + +	if (!client || !path || !client->afc_packet || !client->connection) +		return IPHONE_E_INVALID_ARG; + +	afc_lock(client); + +	// Send command +	memcpy(send, &size_requested, 8); +	memcpy(send + 8, path, strlen(path) + 1); +	client->afc_packet->entire_length = client->afc_packet->this_length = 0; +	client->afc_packet->operation = AFC_TRUNCATE; +	bytes = dispatch_AFC_packet(client, send, 8 + strlen(path)); +	free(send); +	if (bytes <= 0) { +		afc_unlock(client); +		return IPHONE_E_NOT_ENOUGH_DATA; +	} +	// Receive response +	bytes = receive_AFC_data(client, &response); +	if (response) +		free(response); + +	afc_unlock(client); + +	if (bytes < 0) { +		return IPHONE_E_NOT_ENOUGH_DATA; +	} else { +		return IPHONE_E_SUCCESS; +	} +} + +  uint32 iphone_afc_get_file_handle(iphone_afc_file_t file)  {  	return file->filehandle; | 
