Skip to content

Commit

Permalink
Fix more clippy stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
dlon committed Nov 26, 2024
1 parent 9474474 commit 7f56d0e
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 45 deletions.
53 changes: 31 additions & 22 deletions mullvad-api/include/mullvad-api.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,17 @@ typedef struct MullvadApiDevice {
/**
* Initializes a Mullvad API client.
*
* #Arguments
* # Safety
*
* * `client_ptr`: Must be a pointer to that is valid for the length of a `MullvadApiClient`
* struct.
* struct.
*
* * `api_address`: pointer to nul-terminated UTF-8 string containing a socket address
* representation
* ("143.32.4.32:9090"), the port is mandatory.
* ("143.32.4.32:9090"), the port is mandatory.
*
* * `hostname`: pointer to a null-terminated UTF-8 string representing the hostname that will be
* used for TLS validation.
* used for TLS validation.
*/
struct MullvadApiError mullvad_api_client_initialize(struct MullvadApiClient *client_ptr,
const char *api_address_ptr,
Expand All @@ -61,26 +62,27 @@ struct MullvadApiError mullvad_api_client_initialize(struct MullvadApiClient *cl
/**
* Removes all devices from a given account
*
* #Arguments
* # Safety
*
* * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient`
*
* * `account_str_ptr`: pointer to nul-terminated UTF-8 string containing the account number of the
* account that will have all of it's devices removed.
* account that will have all of it's devices removed.
*/
struct MullvadApiError mullvad_api_remove_all_devices(struct MullvadApiClient client_ptr,
const char *account_ptr);

/**
* Removes all devices from a given account
*
* #Arguments
* # Safety
* * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient`
*
* * `account_str_ptr`: pointer to nul-terminated UTF-8 string containing the account number of the
* account that will have all of it's devices removed.
* account that will have all of it's devices removed.
*
* * `expiry_unix_timestamp`: a pointer to a signed 64 bit integer. If this function returns no
* error, the expiry timestamp will be written to this pointer.
* error, the expiry timestamp will be written to this pointer.
*/
struct MullvadApiError mullvad_api_get_expiry(struct MullvadApiClient client_ptr,
const char *account_str_ptr,
Expand All @@ -89,15 +91,16 @@ struct MullvadApiError mullvad_api_get_expiry(struct MullvadApiClient client_ptr
/**
* Gets a list of all devices associated with the specified account from the API.
*
* #Arguments
* # Safety
*
* * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient`
*
* * `account_str_ptr`: pointer to nul-terminated UTF-8 string containing the account number of the
* account that will have all of it's devices removed.
* account that will have all of it's devices removed.
*
* * `device_iter_ptr`: a pointer to a `device::MullvadApiDeviceIterator`. If this function
* doesn't return an error, the pointer will be initialized with a valid instance of
* `device::MullvadApiDeviceIterator`, which can be used to iterate through the devices.
* doesn't return an error, the pointer will be initialized with a valid instance of
* `device::MullvadApiDeviceIterator`, which can be used to iterate through the devices.
*/
struct MullvadApiError mullvad_api_list_devices(struct MullvadApiClient client_ptr,
const char *account_str_ptr,
Expand All @@ -107,16 +110,17 @@ struct MullvadApiError mullvad_api_list_devices(struct MullvadApiClient client_p
* Adds a device to the specified account with the specified public key. Note that the device
* name, associated addresess and UUID are not returned.
*
* #Arguments
* # Safety
*
* * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient`
*
* * `account_str_ptr`: pointer to nul-terminated UTF-8 string containing the account number of the
* account that will have a device added to ita device added to it.
* account that will have a device added to ita device added to it.
*
* * `public_key_ptr`: a pointer to 32 bytes of a WireGuard public key that will be uploaded.
*
* * `new_device_ptr`: a pointer to enough memory to allocate a `MullvadApiDevice`. If this
* function doesn't return an error, it will be initialized.
* function doesn't return an error, it will be initialized.
*/
struct MullvadApiError mullvad_api_add_device(struct MullvadApiClient client_ptr,
const char *account_str_ptr,
Expand All @@ -126,24 +130,25 @@ struct MullvadApiError mullvad_api_add_device(struct MullvadApiClient client_ptr
/**
* Creates a new account.
*
* #Arguments
* # Safety
*
* * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient`
*
* * `account_str_ptr`: If a new account is created successfully, a pointer to an allocated C
* string containing the new
* account number will be written to this pointer. It must be freed via
* `mullvad_api_cstring_drop`.
* string containing the new account number will be written to this pointer. It must be freed via
* `mullvad_api_cstring_drop`.
*/
struct MullvadApiError mullvad_api_create_account(struct MullvadApiClient client_ptr,
const char **account_str_ptr);

/**
* Deletes the specified account.
*
* #Arguments
* # Safety
*
* * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient`
*
* * `account_str_ptr`: A null-terminated string representing the account to be deleted.
* * `account_str_ptr`: Must be a null-terminated string representing the account to be deleted.
*/
struct MullvadApiError mullvad_api_delete_account(struct MullvadApiClient client_ptr,
const char *account_str_ptr);
Expand All @@ -152,6 +157,10 @@ void mullvad_api_client_drop(struct MullvadApiClient client);

/**
* Deallocates a CString returned by the Mullvad API client.
*
* # Safety
*
* `cstr_ptr` must be a pointer to a string allocated by another `mullvad_api` function.
*/
void mullvad_api_cstring_drop(char *cstr_ptr);

Expand Down
57 changes: 34 additions & 23 deletions mullvad-api/src/ffi/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -223,16 +223,17 @@ impl FfiClient {

/// Initializes a Mullvad API client.
///
/// #Arguments
/// # Safety
///
/// * `client_ptr`: Must be a pointer to that is valid for the length of a `MullvadApiClient`
/// struct.
/// struct.
///
/// * `api_address`: pointer to nul-terminated UTF-8 string containing a socket address
/// representation
/// ("143.32.4.32:9090"), the port is mandatory.
/// ("143.32.4.32:9090"), the port is mandatory.
///
/// * `hostname`: pointer to a null-terminated UTF-8 string representing the hostname that will be
/// used for TLS validation.
/// used for TLS validation.
#[no_mangle]
pub unsafe extern "C" fn mullvad_api_client_initialize(
client_ptr: *mut MullvadApiClient,
Expand All @@ -252,11 +253,12 @@ pub unsafe extern "C" fn mullvad_api_client_initialize(

/// Removes all devices from a given account
///
/// #Arguments
/// # Safety
///
/// * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient`
///
/// * `account_str_ptr`: pointer to nul-terminated UTF-8 string containing the account number of the
/// account that will have all of it's devices removed.
/// account that will have all of it's devices removed.
#[no_mangle]
pub unsafe extern "C" fn mullvad_api_remove_all_devices(
client_ptr: MullvadApiClient,
Expand All @@ -271,14 +273,14 @@ pub unsafe extern "C" fn mullvad_api_remove_all_devices(

/// Removes all devices from a given account
///
/// #Arguments
/// # Safety
/// * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient`
///
/// * `account_str_ptr`: pointer to nul-terminated UTF-8 string containing the account number of the
/// account that will have all of it's devices removed.
/// account that will have all of it's devices removed.
///
/// * `expiry_unix_timestamp`: a pointer to a signed 64 bit integer. If this function returns no
/// error, the expiry timestamp will be written to this pointer.
/// error, the expiry timestamp will be written to this pointer.
#[no_mangle]
pub unsafe extern "C" fn mullvad_api_get_expiry(
client_ptr: MullvadApiClient,
Expand All @@ -297,15 +299,16 @@ pub unsafe extern "C" fn mullvad_api_get_expiry(

/// Gets a list of all devices associated with the specified account from the API.
///
/// #Arguments
/// # Safety
///
/// * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient`
///
/// * `account_str_ptr`: pointer to nul-terminated UTF-8 string containing the account number of the
/// account that will have all of it's devices removed.
/// account that will have all of it's devices removed.
///
/// * `device_iter_ptr`: a pointer to a `device::MullvadApiDeviceIterator`. If this function
/// doesn't return an error, the pointer will be initialized with a valid instance of
/// `device::MullvadApiDeviceIterator`, which can be used to iterate through the devices.
/// doesn't return an error, the pointer will be initialized with a valid instance of
/// `device::MullvadApiDeviceIterator`, which can be used to iterate through the devices.
#[no_mangle]
pub unsafe extern "C" fn mullvad_api_list_devices(
client_ptr: MullvadApiClient,
Expand All @@ -325,16 +328,17 @@ pub unsafe extern "C" fn mullvad_api_list_devices(
/// Adds a device to the specified account with the specified public key. Note that the device
/// name, associated addresess and UUID are not returned.
///
/// #Arguments
/// # Safety
///
/// * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient`
///
/// * `account_str_ptr`: pointer to nul-terminated UTF-8 string containing the account number of the
/// account that will have a device added to ita device added to it.
/// account that will have a device added to ita device added to it.
///
/// * `public_key_ptr`: a pointer to 32 bytes of a WireGuard public key that will be uploaded.
///
/// * `new_device_ptr`: a pointer to enough memory to allocate a `MullvadApiDevice`. If this
/// function doesn't return an error, it will be initialized.
/// function doesn't return an error, it will be initialized.
#[no_mangle]
pub unsafe extern "C" fn mullvad_api_add_device(
client_ptr: MullvadApiClient,
Expand All @@ -358,13 +362,13 @@ pub unsafe extern "C" fn mullvad_api_add_device(

/// Creates a new account.
///
/// #Arguments
/// # Safety
///
/// * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient`
///
/// * `account_str_ptr`: If a new account is created successfully, a pointer to an allocated C
/// string containing the new
/// account number will be written to this pointer. It must be freed via
/// `mullvad_api_cstring_drop`.
/// string containing the new account number will be written to this pointer. It must be freed via
/// `mullvad_api_cstring_drop`.
#[no_mangle]
pub unsafe extern "C" fn mullvad_api_create_account(
client_ptr: MullvadApiClient,
Expand All @@ -389,10 +393,11 @@ pub unsafe extern "C" fn mullvad_api_create_account(

/// Deletes the specified account.
///
/// #Arguments
/// # Safety
///
/// * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient`
///
/// * `account_str_ptr`: A null-terminated string representing the account to be deleted.
/// * `account_str_ptr`: Must be a null-terminated string representing the account to be deleted.
#[no_mangle]
pub unsafe extern "C" fn mullvad_api_delete_account(
client_ptr: MullvadApiClient,
Expand All @@ -411,14 +416,20 @@ pub extern "C" fn mullvad_api_client_drop(client: MullvadApiClient) {
}

/// Deallocates a CString returned by the Mullvad API client.
///
/// # Safety
///
/// `cstr_ptr` must be a pointer to a string allocated by another `mullvad_api` function.
#[no_mangle]
pub unsafe extern "C" fn mullvad_api_cstring_drop(cstr_ptr: *mut libc::c_char) {
let _ = unsafe { CString::from_raw(cstr_ptr) };
}

/// The return value is only valid for the lifetime of the `ptr` that's passed in
///
/// SAFETY: `ptr` must be valid for `size` bytes
/// # Safety
///
/// `ptr` must be valid for `size` bytes
unsafe fn string_from_raw_ptr(ptr: *const libc::c_char) -> Result<String, MullvadApiError> {
let cstr = unsafe { CStr::from_ptr(ptr) };

Expand Down

0 comments on commit 7f56d0e

Please sign in to comment.