@@ -19,7 +19,10 @@ static const char *TAG = "esp_delta_ota";
1919
2020typedef struct esp_delta_ota_ctx {
2121 void * user_data ;
22- src_read_cb_t read_cb ;
22+ union {
23+ src_read_cb_t read_cb ; /*!< Read Callback */
24+ src_read_cb_with_user_ctx_t read_cb_with_user_data ; /*!< Read Callback with user data */
25+ };
2326 union {
2427 merged_stream_write_cb_with_user_ctx_t write_cb_with_user_data ;
2528 merged_stream_write_cb_t write_cb ;
@@ -57,11 +60,20 @@ static int esp_delta_ota_read_cb(void *arg_p, uint8_t *buf_p, size_t size)
5760 return - ESP_ERR_INVALID_ARG ;
5861 }
5962 esp_delta_ota_ctx * handle = (esp_delta_ota_ctx * )arg_p ;
60- esp_err_t err = handle -> read_cb (buf_p , size , handle -> src_offset );
61- if (err != ESP_OK ) {
62- ESP_LOGE (TAG , "Error in read_cb(): %s" , esp_err_to_name (err ));
63- return ESP_FAIL ;
63+ esp_err_t err = ESP_OK ;
64+ if (!handle -> user_data ) {
65+ err = handle -> read_cb (buf_p , size , handle -> src_offset );
66+ if (err != ESP_OK ) {
67+ ESP_LOGE (TAG , "Error in read_cb(): %s" , esp_err_to_name (err ));
68+ return ESP_FAIL ;
69+ }
70+ } else {
71+ err = handle -> read_cb_with_user_data (buf_p , size , handle -> src_offset , handle -> user_data ); if (err != ESP_OK ) {
72+ ESP_LOGE (TAG , "Error in read_cb_with_user_data(): %s" , esp_err_to_name (err ));
73+ return ESP_FAIL ;
74+ }
6475 }
76+
6577 handle -> src_offset += size ;
6678 return ESP_OK ;
6779}
0 commit comments