22
22
#include <unistd.h>
23
23
#include <blockdev/utils.h>
24
24
#include <bs_size.h>
25
+ #include <btrfsutil.h>
25
26
26
27
#include "btrfs.h"
27
28
#include "check_deps.h"
@@ -453,48 +454,14 @@ gboolean bd_btrfs_delete_subvolume (const gchar *mountpoint, const gchar *name,
453
454
* Tech category: %BD_BTRFS_TECH_SUBVOL-%BD_BTRFS_TECH_MODE_QUERY
454
455
*/
455
456
guint64 bd_btrfs_get_default_subvolume_id (const gchar * mountpoint , GError * * error ) {
456
- GRegex * regex = NULL ;
457
- GMatchInfo * match_info = NULL ;
458
- gboolean success = FALSE;
459
- gchar * output = NULL ;
460
- gchar * match = NULL ;
457
+ enum btrfs_util_error err ;
461
458
guint64 ret = 0 ;
462
- const gchar * argv [5 ] = {"btrfs" , "subvol" , "get-default" , mountpoint , NULL };
463
-
464
- if (!check_deps (& avail_deps , DEPS_BTRFS_MASK , deps , DEPS_LAST , & deps_check_lock , error ) ||
465
- !check_module_deps (& avail_module_deps , MODULE_DEPS_BTRFS_MASK , module_deps , MODULE_DEPS_LAST , & deps_check_lock , error ))
466
- return 0 ;
467
-
468
- regex = g_regex_new ("ID (\\d+) .*" , 0 , 0 , error );
469
- if (!regex ) {
470
- bd_utils_log_format (BD_UTILS_LOG_WARNING , "Failed to create new GRegex" );
471
- /* error is already populated */
472
- return 0 ;
473
- }
474
-
475
- success = bd_utils_exec_and_capture_output (argv , NULL , & output , error );
476
- if (!success ) {
477
- g_regex_unref (regex );
478
- return 0 ;
479
- }
480
459
481
- success = g_regex_match (regex , output , 0 , & match_info );
482
- if (!success ) {
483
- g_set_error (error , BD_BTRFS_ERROR , BD_BTRFS_ERROR_PARSE , "Failed to parse subvolume's ID" );
484
- g_regex_unref (regex );
485
- g_match_info_free (match_info );
486
- g_free (output );
487
- return 0 ;
460
+ err = btrfs_util_get_default_subvolume (mountpoint , & ret );
461
+ if (err ) {
462
+ g_set_error (error , BD_BTRFS_ERROR , BD_BTRFS_ERROR_NOT_FOUND , "%s: %m" , btrfs_util_strerror (err ));
488
463
}
489
464
490
- match = g_match_info_fetch (match_info , 1 );
491
- ret = g_ascii_strtoull (match , NULL , 0 );
492
-
493
- g_free (match );
494
- g_match_info_free (match_info );
495
- g_regex_unref (regex );
496
- g_free (output );
497
-
498
465
return ret ;
499
466
}
500
467
@@ -511,17 +478,15 @@ guint64 bd_btrfs_get_default_subvolume_id (const gchar *mountpoint, GError **err
511
478
*
512
479
* Tech category: %BD_BTRFS_TECH_SUBVOL-%BD_BTRFS_TECH_MODE_MODIFY
513
480
*/
514
- gboolean bd_btrfs_set_default_subvolume (const gchar * mountpoint , guint64 subvol_id , const BDExtraArg * * extra , GError * * error ) {
515
- const gchar * argv [ 6 ] = { "btrfs" , "subvol" , "set-default" , NULL , mountpoint , NULL } ;
481
+ gboolean bd_btrfs_set_default_subvolume (const gchar * mountpoint , guint64 subvol_id , G_GNUC_UNUSED const BDExtraArg * * extra , GError * * error ) {
482
+ enum btrfs_util_error err ;
516
483
gboolean ret = FALSE;
517
484
518
- if (!check_deps (& avail_deps , DEPS_BTRFS_MASK , deps , DEPS_LAST , & deps_check_lock , error ) ||
519
- !check_module_deps (& avail_module_deps , MODULE_DEPS_BTRFS_MASK , module_deps , MODULE_DEPS_LAST , & deps_check_lock , error ))
520
- return FALSE;
521
-
522
- argv [3 ] = g_strdup_printf ("%" G_GUINT64_FORMAT , subvol_id );
523
- ret = bd_utils_exec_and_report_error (argv , extra , error );
524
- g_free ((gchar * ) argv [3 ]);
485
+ err = btrfs_util_set_default_subvolume (mountpoint , subvol_id );
486
+ if (err )
487
+ g_set_error (error , BD_BTRFS_ERROR , BD_BTRFS_ERROR_NOT_FOUND , "%s: %m" , btrfs_util_strerror (err ));
488
+ else
489
+ ret = TRUE;
525
490
526
491
return ret ;
527
492
}
0 commit comments