summaryrefslogtreecommitdiffstats
path: root/src/libirecovery.c
diff options
context:
space:
mode:
authorGravatar Rosen Penev2021-05-07 02:26:24 -0700
committerGravatar Nikias Bassen2023-05-05 02:52:00 +0200
commit14102fb7ef8737965c97836560eb3a287f480a25 (patch)
tree263e9cba1b88073a1d68d7e54d1a49bf47fdcaf2 /src/libirecovery.c
parent28be9537a632625deaa7d71979ebf725b1b9bbc2 (diff)
downloadlibirecovery-14102fb7ef8737965c97836560eb3a287f480a25.tar.gz
libirecovery-14102fb7ef8737965c97836560eb3a287f480a25.tar.bz2
move IRECV_API into the headers
clang + lld + ucrt on Windows seems to require that the dllimport attribute be applied to the first declaration. Fixes -Wdll-attribute-on-declaration error. Signed-off-by: Rosen Penev <rosenp@gmail.com>
Diffstat (limited to 'src/libirecovery.c')
-rw-r--r--src/libirecovery.c88
1 files changed, 39 insertions, 49 deletions
diff --git a/src/libirecovery.c b/src/libirecovery.c
index 8ebc9fa..6edb948 100644
--- a/src/libirecovery.c
+++ b/src/libirecovery.c
@@ -57,16 +57,6 @@
57#endif 57#endif
58#endif 58#endif
59 59
60#ifdef WIN32
61#define IRECV_API __declspec( dllexport )
62#else
63#ifdef HAVE_FVISIBILITY
64#define IRECV_API __attribute__((visibility("default")))
65#else
66#define IRECV_API
67#endif
68#endif
69
70#include "libirecovery.h" 60#include "libirecovery.h"
71 61
72struct irecv_client_private { 62struct irecv_client_private {
@@ -1040,14 +1030,14 @@ static int check_context(irecv_client_t client) {
1040} 1030}
1041#endif 1031#endif
1042 1032
1043IRECV_API void irecv_init(void) 1033void irecv_init(void)
1044{ 1034{
1045#ifndef USE_DUMMY 1035#ifndef USE_DUMMY
1046 thread_once(&init_once, _irecv_init); 1036 thread_once(&init_once, _irecv_init);
1047#endif 1037#endif
1048} 1038}
1049 1039
1050IRECV_API void irecv_exit(void) 1040void irecv_exit(void)
1051{ 1041{
1052#ifndef USE_DUMMY 1042#ifndef USE_DUMMY
1053 thread_once(&deinit_once, _irecv_deinit); 1043 thread_once(&deinit_once, _irecv_deinit);
@@ -1089,7 +1079,7 @@ static int iokit_usb_control_transfer(irecv_client_t client, uint8_t bm_request_
1089#endif 1079#endif
1090#endif 1080#endif
1091 1081
1092IRECV_API int irecv_usb_control_transfer(irecv_client_t client, uint8_t bm_request_type, uint8_t b_request, uint16_t w_value, uint16_t w_index, unsigned char *data, uint16_t w_length, unsigned int timeout) { 1082int irecv_usb_control_transfer(irecv_client_t client, uint8_t bm_request_type, uint8_t b_request, uint16_t w_value, uint16_t w_index, unsigned char *data, uint16_t w_length, unsigned int timeout) {
1093#ifdef USE_DUMMY 1083#ifdef USE_DUMMY
1094 return IRECV_E_UNSUPPORTED; 1084 return IRECV_E_UNSUPPORTED;
1095#else 1085#else
@@ -1199,7 +1189,7 @@ static int iokit_usb_bulk_transfer(irecv_client_t client,
1199#endif 1189#endif
1200#endif 1190#endif
1201 1191
1202IRECV_API int irecv_usb_bulk_transfer(irecv_client_t client, 1192int irecv_usb_bulk_transfer(irecv_client_t client,
1203 unsigned char endpoint, 1193 unsigned char endpoint,
1204 unsigned char *data, 1194 unsigned char *data,
1205 int length, 1195 int length,
@@ -1420,7 +1410,7 @@ static irecv_error_t iokit_open_with_ecid(irecv_client_t* pclient, uint64_t ecid
1420#endif 1410#endif
1421#endif 1411#endif
1422 1412
1423IRECV_API irecv_error_t irecv_open_with_ecid(irecv_client_t* pclient, uint64_t ecid) { 1413irecv_error_t irecv_open_with_ecid(irecv_client_t* pclient, uint64_t ecid) {
1424#ifdef USE_DUMMY 1414#ifdef USE_DUMMY
1425 return IRECV_E_UNSUPPORTED; 1415 return IRECV_E_UNSUPPORTED;
1426#else 1416#else
@@ -1573,7 +1563,7 @@ IRECV_API irecv_error_t irecv_open_with_ecid(irecv_client_t* pclient, uint64_t e
1573#endif 1563#endif
1574} 1564}
1575 1565
1576IRECV_API irecv_error_t irecv_usb_set_configuration(irecv_client_t client, int configuration) { 1566irecv_error_t irecv_usb_set_configuration(irecv_client_t client, int configuration) {
1577#ifdef USE_DUMMY 1567#ifdef USE_DUMMY
1578 return IRECV_E_UNSUPPORTED; 1568 return IRECV_E_UNSUPPORTED;
1579#else 1569#else
@@ -1689,7 +1679,7 @@ static irecv_error_t iokit_usb_set_interface(irecv_client_t client, int usb_inte
1689#endif 1679#endif
1690#endif 1680#endif
1691 1681
1692IRECV_API irecv_error_t irecv_usb_set_interface(irecv_client_t client, int usb_interface, int usb_alt_interface) { 1682irecv_error_t irecv_usb_set_interface(irecv_client_t client, int usb_interface, int usb_alt_interface) {
1693#ifdef USE_DUMMY 1683#ifdef USE_DUMMY
1694 return IRECV_E_UNSUPPORTED; 1684 return IRECV_E_UNSUPPORTED;
1695#else 1685#else
@@ -1725,7 +1715,7 @@ IRECV_API irecv_error_t irecv_usb_set_interface(irecv_client_t client, int usb_i
1725#endif 1715#endif
1726} 1716}
1727 1717
1728IRECV_API irecv_error_t irecv_reset(irecv_client_t client) { 1718irecv_error_t irecv_reset(irecv_client_t client) {
1729#ifdef USE_DUMMY 1719#ifdef USE_DUMMY
1730 return IRECV_E_UNSUPPORTED; 1720 return IRECV_E_UNSUPPORTED;
1731#else 1721#else
@@ -1758,7 +1748,7 @@ IRECV_API irecv_error_t irecv_reset(irecv_client_t client) {
1758#endif 1748#endif
1759} 1749}
1760 1750
1761IRECV_API irecv_error_t irecv_open_with_ecid_and_attempts(irecv_client_t* pclient, uint64_t ecid, int attempts) { 1751irecv_error_t irecv_open_with_ecid_and_attempts(irecv_client_t* pclient, uint64_t ecid, int attempts) {
1762#ifdef USE_DUMMY 1752#ifdef USE_DUMMY
1763 return IRECV_E_UNSUPPORTED; 1753 return IRECV_E_UNSUPPORTED;
1764#else 1754#else
@@ -1781,7 +1771,7 @@ IRECV_API irecv_error_t irecv_open_with_ecid_and_attempts(irecv_client_t* pclien
1781#endif 1771#endif
1782} 1772}
1783 1773
1784IRECV_API irecv_error_t irecv_event_subscribe(irecv_client_t client, irecv_event_type type, irecv_event_cb_t callback, void* user_data) { 1774irecv_error_t irecv_event_subscribe(irecv_client_t client, irecv_event_type type, irecv_event_cb_t callback, void* user_data) {
1785#ifdef USE_DUMMY 1775#ifdef USE_DUMMY
1786 return IRECV_E_UNSUPPORTED; 1776 return IRECV_E_UNSUPPORTED;
1787#else 1777#else
@@ -1818,7 +1808,7 @@ IRECV_API irecv_error_t irecv_event_subscribe(irecv_client_t client, irecv_event
1818#endif 1808#endif
1819} 1809}
1820 1810
1821IRECV_API irecv_error_t irecv_event_unsubscribe(irecv_client_t client, irecv_event_type type) { 1811irecv_error_t irecv_event_unsubscribe(irecv_client_t client, irecv_event_type type) {
1822#ifdef USE_DUMMY 1812#ifdef USE_DUMMY
1823 return IRECV_E_UNSUPPORTED; 1813 return IRECV_E_UNSUPPORTED;
1824#else 1814#else
@@ -2426,7 +2416,7 @@ static void *_irecv_event_handler(void* data)
2426} 2416}
2427#endif /* !USE_DUMMY */ 2417#endif /* !USE_DUMMY */
2428 2418
2429IRECV_API irecv_error_t irecv_device_event_subscribe(irecv_device_event_context_t *context, irecv_device_event_cb_t callback, void *user_data) 2419irecv_error_t irecv_device_event_subscribe(irecv_device_event_context_t *context, irecv_device_event_cb_t callback, void *user_data)
2430{ 2420{
2431#ifdef USE_DUMMY 2421#ifdef USE_DUMMY
2432 return IRECV_E_UNSUPPORTED; 2422 return IRECV_E_UNSUPPORTED;
@@ -2472,7 +2462,7 @@ IRECV_API irecv_error_t irecv_device_event_subscribe(irecv_device_event_context_
2472#endif 2462#endif
2473} 2463}
2474 2464
2475IRECV_API irecv_error_t irecv_device_event_unsubscribe(irecv_device_event_context_t context) 2465irecv_error_t irecv_device_event_unsubscribe(irecv_device_event_context_t context)
2476{ 2466{
2477#ifdef USE_DUMMY 2467#ifdef USE_DUMMY
2478 return IRECV_E_UNSUPPORTED; 2468 return IRECV_E_UNSUPPORTED;
@@ -2524,7 +2514,7 @@ IRECV_API irecv_error_t irecv_device_event_unsubscribe(irecv_device_event_contex
2524#endif 2514#endif
2525} 2515}
2526 2516
2527IRECV_API irecv_error_t irecv_close(irecv_client_t client) { 2517irecv_error_t irecv_close(irecv_client_t client) {
2528#ifdef USE_DUMMY 2518#ifdef USE_DUMMY
2529 return IRECV_E_UNSUPPORTED; 2519 return IRECV_E_UNSUPPORTED;
2530#else 2520#else
@@ -2580,7 +2570,7 @@ IRECV_API irecv_error_t irecv_close(irecv_client_t client) {
2580#endif 2570#endif
2581} 2571}
2582 2572
2583IRECV_API void irecv_set_debug_level(int level) { 2573void irecv_set_debug_level(int level) {
2584 libirecovery_debug = level; 2574 libirecovery_debug = level;
2585#ifndef USE_DUMMY 2575#ifndef USE_DUMMY
2586#ifndef WIN32 2576#ifndef WIN32
@@ -2612,7 +2602,7 @@ static irecv_error_t irecv_send_command_raw(irecv_client_t client, const char* c
2612} 2602}
2613#endif 2603#endif
2614 2604
2615IRECV_API irecv_error_t irecv_send_command_breq(irecv_client_t client, const char* command, uint8_t b_request) { 2605irecv_error_t irecv_send_command_breq(irecv_client_t client, const char* command, uint8_t b_request) {
2616#ifdef USE_DUMMY 2606#ifdef USE_DUMMY
2617 return IRECV_E_UNSUPPORTED; 2607 return IRECV_E_UNSUPPORTED;
2618#else 2608#else
@@ -2656,11 +2646,11 @@ IRECV_API irecv_error_t irecv_send_command_breq(irecv_client_t client, const cha
2656#endif 2646#endif
2657} 2647}
2658 2648
2659IRECV_API irecv_error_t irecv_send_command(irecv_client_t client, const char* command) { 2649irecv_error_t irecv_send_command(irecv_client_t client, const char* command) {
2660 return irecv_send_command_breq(client, command, 0); 2650 return irecv_send_command_breq(client, command, 0);
2661} 2651}
2662 2652
2663IRECV_API irecv_error_t irecv_send_file(irecv_client_t client, const char* filename, int dfu_notify_finished) { 2653irecv_error_t irecv_send_file(irecv_client_t client, const char* filename, int dfu_notify_finished) {
2664#ifdef USE_DUMMY 2654#ifdef USE_DUMMY
2665 return IRECV_E_UNSUPPORTED; 2655 return IRECV_E_UNSUPPORTED;
2666#else 2656#else
@@ -2719,7 +2709,7 @@ static irecv_error_t irecv_get_status(irecv_client_t client, unsigned int* statu
2719} 2709}
2720#endif 2710#endif
2721 2711
2722IRECV_API irecv_error_t irecv_send_buffer(irecv_client_t client, unsigned char* buffer, unsigned long length, int dfu_notify_finished) { 2712irecv_error_t irecv_send_buffer(irecv_client_t client, unsigned char* buffer, unsigned long length, int dfu_notify_finished) {
2723#ifdef USE_DUMMY 2713#ifdef USE_DUMMY
2724 return IRECV_E_UNSUPPORTED; 2714 return IRECV_E_UNSUPPORTED;
2725#else 2715#else
@@ -2886,7 +2876,7 @@ IRECV_API irecv_error_t irecv_send_buffer(irecv_client_t client, unsigned char*
2886#endif 2876#endif
2887} 2877}
2888 2878
2889IRECV_API irecv_error_t irecv_receive(irecv_client_t client) { 2879irecv_error_t irecv_receive(irecv_client_t client) {
2890#ifdef USE_DUMMY 2880#ifdef USE_DUMMY
2891 return IRECV_E_UNSUPPORTED; 2881 return IRECV_E_UNSUPPORTED;
2892#else 2882#else
@@ -2920,7 +2910,7 @@ IRECV_API irecv_error_t irecv_receive(irecv_client_t client) {
2920#endif 2910#endif
2921} 2911}
2922 2912
2923IRECV_API irecv_error_t irecv_getenv(irecv_client_t client, const char* variable, char** value) { 2913irecv_error_t irecv_getenv(irecv_client_t client, const char* variable, char** value) {
2924#ifdef USE_DUMMY 2914#ifdef USE_DUMMY
2925 return IRECV_E_UNSUPPORTED; 2915 return IRECV_E_UNSUPPORTED;
2926#else 2916#else
@@ -2960,7 +2950,7 @@ IRECV_API irecv_error_t irecv_getenv(irecv_client_t client, const char* variable
2960#endif 2950#endif
2961} 2951}
2962 2952
2963IRECV_API irecv_error_t irecv_getret(irecv_client_t client, unsigned int* value) { 2953irecv_error_t irecv_getret(irecv_client_t client, unsigned int* value) {
2964#ifdef USE_DUMMY 2954#ifdef USE_DUMMY
2965 return IRECV_E_UNSUPPORTED; 2955 return IRECV_E_UNSUPPORTED;
2966#else 2956#else
@@ -2983,7 +2973,7 @@ IRECV_API irecv_error_t irecv_getret(irecv_client_t client, unsigned int* value)
2983#endif 2973#endif
2984} 2974}
2985 2975
2986IRECV_API irecv_error_t irecv_get_mode(irecv_client_t client, int* mode) { 2976irecv_error_t irecv_get_mode(irecv_client_t client, int* mode) {
2987#ifdef USE_DUMMY 2977#ifdef USE_DUMMY
2988 return IRECV_E_UNSUPPORTED; 2978 return IRECV_E_UNSUPPORTED;
2989#else 2979#else
@@ -2996,7 +2986,7 @@ IRECV_API irecv_error_t irecv_get_mode(irecv_client_t client, int* mode) {
2996#endif 2986#endif
2997} 2987}
2998 2988
2999IRECV_API const struct irecv_device_info* irecv_get_device_info(irecv_client_t client) 2989const struct irecv_device_info* irecv_get_device_info(irecv_client_t client)
3000{ 2990{
3001#ifdef USE_DUMMY 2991#ifdef USE_DUMMY
3002 return NULL; 2992 return NULL;
@@ -3024,7 +3014,7 @@ static void *iokit_limera1n_usb_submit_request(void *argv) {
3024#endif 3014#endif
3025#endif 3015#endif
3026 3016
3027IRECV_API irecv_error_t irecv_trigger_limera1n_exploit(irecv_client_t client) { 3017irecv_error_t irecv_trigger_limera1n_exploit(irecv_client_t client) {
3028#ifdef USE_DUMMY 3018#ifdef USE_DUMMY
3029 return IRECV_E_UNSUPPORTED; 3019 return IRECV_E_UNSUPPORTED;
3030#else 3020#else
@@ -3075,7 +3065,7 @@ IRECV_API irecv_error_t irecv_trigger_limera1n_exploit(irecv_client_t client) {
3075#endif 3065#endif
3076} 3066}
3077 3067
3078IRECV_API irecv_error_t irecv_execute_script(irecv_client_t client, const char* script) { 3068irecv_error_t irecv_execute_script(irecv_client_t client, const char* script) {
3079#ifdef USE_DUMMY 3069#ifdef USE_DUMMY
3080 return IRECV_E_UNSUPPORTED; 3070 return IRECV_E_UNSUPPORTED;
3081#else 3071#else
@@ -3107,7 +3097,7 @@ IRECV_API irecv_error_t irecv_execute_script(irecv_client_t client, const char*
3107#endif 3097#endif
3108} 3098}
3109 3099
3110IRECV_API irecv_error_t irecv_saveenv(irecv_client_t client) { 3100irecv_error_t irecv_saveenv(irecv_client_t client) {
3111#ifdef USE_DUMMY 3101#ifdef USE_DUMMY
3112 return IRECV_E_UNSUPPORTED; 3102 return IRECV_E_UNSUPPORTED;
3113#else 3103#else
@@ -3120,7 +3110,7 @@ IRECV_API irecv_error_t irecv_saveenv(irecv_client_t client) {
3120#endif 3110#endif
3121} 3111}
3122 3112
3123IRECV_API irecv_error_t irecv_setenv(irecv_client_t client, const char* variable, const char* value) { 3113irecv_error_t irecv_setenv(irecv_client_t client, const char* variable, const char* value) {
3124#ifdef USE_DUMMY 3114#ifdef USE_DUMMY
3125 return IRECV_E_UNSUPPORTED; 3115 return IRECV_E_UNSUPPORTED;
3126#else 3116#else
@@ -3144,7 +3134,7 @@ IRECV_API irecv_error_t irecv_setenv(irecv_client_t client, const char* variable
3144#endif 3134#endif
3145} 3135}
3146 3136
3147IRECV_API irecv_error_t irecv_setenv_np(irecv_client_t client, const char* variable, const char* value) { 3137irecv_error_t irecv_setenv_np(irecv_client_t client, const char* variable, const char* value) {
3148#ifdef USE_DUMMY 3138#ifdef USE_DUMMY
3149 return IRECV_E_UNSUPPORTED; 3139 return IRECV_E_UNSUPPORTED;
3150#else 3140#else
@@ -3168,7 +3158,7 @@ IRECV_API irecv_error_t irecv_setenv_np(irecv_client_t client, const char* varia
3168#endif 3158#endif
3169} 3159}
3170 3160
3171IRECV_API irecv_error_t irecv_reboot(irecv_client_t client) { 3161irecv_error_t irecv_reboot(irecv_client_t client) {
3172#ifdef USE_DUMMY 3162#ifdef USE_DUMMY
3173 return IRECV_E_UNSUPPORTED; 3163 return IRECV_E_UNSUPPORTED;
3174#else 3164#else
@@ -3181,7 +3171,7 @@ IRECV_API irecv_error_t irecv_reboot(irecv_client_t client) {
3181#endif 3171#endif
3182} 3172}
3183 3173
3184IRECV_API const char* irecv_strerror(irecv_error_t error) { 3174const char* irecv_strerror(irecv_error_t error) {
3185 switch (error) { 3175 switch (error) {
3186 case IRECV_E_SUCCESS: 3176 case IRECV_E_SUCCESS:
3187 return "Command completed successfully"; 3177 return "Command completed successfully";
@@ -3229,7 +3219,7 @@ IRECV_API const char* irecv_strerror(irecv_error_t error) {
3229 return NULL; 3219 return NULL;
3230} 3220}
3231 3221
3232IRECV_API irecv_error_t irecv_reset_counters(irecv_client_t client) { 3222irecv_error_t irecv_reset_counters(irecv_client_t client) {
3233#ifdef USE_DUMMY 3223#ifdef USE_DUMMY
3234 return IRECV_E_UNSUPPORTED; 3224 return IRECV_E_UNSUPPORTED;
3235#else 3225#else
@@ -3244,7 +3234,7 @@ IRECV_API irecv_error_t irecv_reset_counters(irecv_client_t client) {
3244#endif 3234#endif
3245} 3235}
3246 3236
3247IRECV_API irecv_error_t irecv_recv_buffer(irecv_client_t client, char* buffer, unsigned long length) { 3237irecv_error_t irecv_recv_buffer(irecv_client_t client, char* buffer, unsigned long length) {
3248#ifdef USE_DUMMY 3238#ifdef USE_DUMMY
3249 return IRECV_E_UNSUPPORTED; 3239 return IRECV_E_UNSUPPORTED;
3250#else 3240#else
@@ -3290,7 +3280,7 @@ IRECV_API irecv_error_t irecv_recv_buffer(irecv_client_t client, char* buffer, u
3290#endif 3280#endif
3291} 3281}
3292 3282
3293IRECV_API irecv_error_t irecv_finish_transfer(irecv_client_t client) { 3283irecv_error_t irecv_finish_transfer(irecv_client_t client) {
3294#ifdef USE_DUMMY 3284#ifdef USE_DUMMY
3295 return IRECV_E_UNSUPPORTED; 3285 return IRECV_E_UNSUPPORTED;
3296#else 3286#else
@@ -3312,11 +3302,11 @@ IRECV_API irecv_error_t irecv_finish_transfer(irecv_client_t client) {
3312#endif 3302#endif
3313} 3303}
3314 3304
3315IRECV_API irecv_device_t irecv_devices_get_all(void) { 3305irecv_device_t irecv_devices_get_all(void) {
3316 return irecv_devices; 3306 return irecv_devices;
3317} 3307}
3318 3308
3319IRECV_API irecv_error_t irecv_devices_get_device_by_client(irecv_client_t client, irecv_device_t* device) { 3309irecv_error_t irecv_devices_get_device_by_client(irecv_client_t client, irecv_device_t* device) {
3320#ifdef USE_DUMMY 3310#ifdef USE_DUMMY
3321 return IRECV_E_UNSUPPORTED; 3311 return IRECV_E_UNSUPPORTED;
3322#else 3312#else
@@ -3342,7 +3332,7 @@ IRECV_API irecv_error_t irecv_devices_get_device_by_client(irecv_client_t client
3342#endif 3332#endif
3343} 3333}
3344 3334
3345IRECV_API irecv_error_t irecv_devices_get_device_by_product_type(const char* product_type, irecv_device_t* device) { 3335irecv_error_t irecv_devices_get_device_by_product_type(const char* product_type, irecv_device_t* device) {
3346 int i = 0; 3336 int i = 0;
3347 3337
3348 if (!product_type || !device) 3338 if (!product_type || !device)
@@ -3360,7 +3350,7 @@ IRECV_API irecv_error_t irecv_devices_get_device_by_product_type(const char* pro
3360 return IRECV_E_NO_DEVICE; 3350 return IRECV_E_NO_DEVICE;
3361} 3351}
3362 3352
3363IRECV_API irecv_error_t irecv_devices_get_device_by_hardware_model(const char* hardware_model, irecv_device_t* device) { 3353irecv_error_t irecv_devices_get_device_by_hardware_model(const char* hardware_model, irecv_device_t* device) {
3364 int i = 0; 3354 int i = 0;
3365 3355
3366 if (!hardware_model || !device) 3356 if (!hardware_model || !device)
@@ -3378,7 +3368,7 @@ IRECV_API irecv_error_t irecv_devices_get_device_by_hardware_model(const char* h
3378 return IRECV_E_NO_DEVICE; 3368 return IRECV_E_NO_DEVICE;
3379} 3369}
3380 3370
3381IRECV_API irecv_client_t irecv_reconnect(irecv_client_t client, int initial_pause) { 3371irecv_client_t irecv_reconnect(irecv_client_t client, int initial_pause) {
3382#ifdef USE_DUMMY 3372#ifdef USE_DUMMY
3383 return NULL; 3373 return NULL;
3384#else 3374#else