@@ -305,21 +305,27 @@ static void rpc_system_storage_read_process(const PB_Main* request, void* contex
305
305
response -> command_id = request -> command_id ;
306
306
response -> which_content = PB_Main_storage_read_response_tag ;
307
307
response -> command_status = PB_CommandStatus_OK ;
308
- response -> content .storage_read_response .has_file = true;
309
- response -> content .storage_read_response .file .data =
310
- malloc (PB_BYTES_ARRAY_T_ALLOCSIZE (MIN (size_left , MAX_DATA_SIZE )));
311
- uint8_t * buffer = response -> content .storage_read_response .file .data -> bytes ;
312
- uint16_t * read_size_msg = & response -> content .storage_read_response .file .data -> size ;
313
308
314
309
size_t read_size = MIN (size_left , MAX_DATA_SIZE );
315
- * read_size_msg = storage_file_read (file , buffer , read_size );
316
- size_left -= read_size ;
317
- result = (* read_size_msg == read_size );
318
-
319
- if (result ) {
320
- response -> has_next = (size_left > 0 );
321
- rpc_send_and_release (session , response );
310
+ if (read_size ) {
311
+ response -> content .storage_read_response .has_file = true;
312
+ response -> content .storage_read_response .file .data =
313
+ malloc (PB_BYTES_ARRAY_T_ALLOCSIZE ());
314
+ uint8_t * buffer = response -> content .storage_read_response .file .data -> bytes ;
315
+ uint16_t * read_size_msg = & response -> content .storage_read_response .file .data -> size ;
316
+
317
+ * read_size_msg = storage_file_read (file , buffer , read_size );
318
+ size_left -= read_size ;
319
+ result = (* read_size_msg == read_size );
320
+
321
+ response -> has_next = result && (size_left > 0 );
322
+ } else {
323
+ response -> content .storage_read_response .has_file = false;
324
+ response -> has_next = false;
325
+ result = true;
322
326
}
327
+
328
+ rpc_send_and_release (session , response );
323
329
} while ((size_left != 0 ) && result );
324
330
325
331
if (!result ) {
@@ -349,7 +355,7 @@ static void rpc_system_storage_write_process(const PB_Main* request, void* conte
349
355
RpcSession * session = rpc_storage -> session ;
350
356
furi_assert (session );
351
357
352
- bool result = true;
358
+ bool fs_operation_success = true;
353
359
354
360
if (!path_contains_only_ascii (request -> content .storage_write_request .path )) {
355
361
rpc_storage -> current_command_id = request -> command_id ;
@@ -370,28 +376,32 @@ static void rpc_system_storage_write_process(const PB_Main* request, void* conte
370
376
rpc_storage -> current_command_id = request -> command_id ;
371
377
rpc_storage -> state = RpcStorageStateWriting ;
372
378
const char * path = request -> content .storage_write_request .path ;
373
- result = storage_file_open (rpc_storage -> file , path , FSAM_WRITE , FSOM_CREATE_ALWAYS );
379
+ fs_operation_success =
380
+ storage_file_open (rpc_storage -> file , path , FSAM_WRITE , FSOM_CREATE_ALWAYS );
374
381
}
375
382
376
383
File * file = rpc_storage -> file ;
384
+ bool send_response = false;
385
+
386
+ if (fs_operation_success ) {
387
+ if (request -> content .storage_write_request .has_file ) {
388
+ uint8_t * buffer = request -> content .storage_write_request .file .data -> bytes ;
389
+ size_t buffer_size = request -> content .storage_write_request .file .data -> size ;
390
+ uint16_t written_size = storage_file_write (file , buffer , buffer_size );
391
+ fs_operation_success = (written_size == buffer_size );
392
+ }
377
393
378
- if (result ) {
379
- uint8_t * buffer = request -> content .storage_write_request .file .data -> bytes ;
380
- size_t buffer_size = request -> content .storage_write_request .file .data -> size ;
381
-
382
- uint16_t written_size = storage_file_write (file , buffer , buffer_size );
383
- result = (written_size == buffer_size );
394
+ send_response = !request -> has_next ;
395
+ }
384
396
385
- if (result && !request -> has_next ) {
386
- rpc_send_and_release_empty (
387
- session , rpc_storage -> current_command_id , PB_CommandStatus_OK );
388
- rpc_system_storage_reset_state (rpc_storage , session , false);
389
- }
397
+ PB_CommandStatus command_status = PB_CommandStatus_OK ;
398
+ if (!fs_operation_success ) {
399
+ send_response = true;
400
+ command_status = rpc_system_storage_get_file_error (file );
390
401
}
391
402
392
- if (!result ) {
393
- rpc_send_and_release_empty (
394
- session , rpc_storage -> current_command_id , rpc_system_storage_get_file_error (file ));
403
+ if (send_response ) {
404
+ rpc_send_and_release_empty (session , rpc_storage -> current_command_id , command_status );
395
405
rpc_system_storage_reset_state (rpc_storage , session , false);
396
406
}
397
407
}
0 commit comments