@@ -374,22 +374,24 @@ gboolean bd_btrfs_remove_device (const gchar *mountpoint, const gchar *device, c
374
374
*
375
375
* Tech category: %BD_BTRFS_TECH_SUBVOL-%BD_BTRFS_TECH_MODE_CREATE
376
376
*/
377
- gboolean bd_btrfs_create_subvolume (const gchar * mountpoint , const gchar * name , const BDExtraArg * * extra , GError * * error ) {
377
+ gboolean bd_btrfs_create_subvolume (const gchar * mountpoint , const gchar * name , G_GNUC_UNUSED const BDExtraArg * * extra , GError * * error ) {
378
378
gchar * path = NULL ;
379
379
gboolean success = FALSE;
380
- const gchar * argv [5 ] = {"btrfs" , "subvol" , "create" , NULL , NULL };
381
-
382
- if (!check_deps (& avail_deps , DEPS_BTRFS_MASK , deps , DEPS_LAST , & deps_check_lock , error ) ||
383
- !check_module_deps (& avail_module_deps , MODULE_DEPS_BTRFS_MASK , module_deps , MODULE_DEPS_LAST , & deps_check_lock , error ))
384
- return FALSE;
380
+ enum btrfs_util_error err ;
385
381
386
382
if (g_str_has_suffix (mountpoint , "/" ))
387
383
path = g_strdup_printf ("%s%s" , mountpoint , name );
388
384
else
389
385
path = g_strdup_printf ("%s/%s" , mountpoint , name );
390
- argv [3 ] = path ;
391
386
392
- success = bd_utils_exec_and_report_error (argv , extra , error );
387
+
388
+ err = btrfs_util_create_subvolume (path , 0 ,NULL ,NULL );
389
+ if (err ) {
390
+ g_set_error (error , BD_BTRFS_ERROR , BD_BTRFS_ERROR_DEVICE , "%s: %m" , btrfs_util_strerror (err ));
391
+ } else {
392
+ success = TRUE;
393
+ }
394
+
393
395
g_free (path );
394
396
395
397
return success ;
@@ -407,22 +409,24 @@ gboolean bd_btrfs_create_subvolume (const gchar *mountpoint, const gchar *name,
407
409
*
408
410
* Tech category: %BD_BTRFS_TECH_SUBVOL-%BD_BTRFS_TECH_MODE_DELETE
409
411
*/
410
- gboolean bd_btrfs_delete_subvolume (const gchar * mountpoint , const gchar * name , const BDExtraArg * * extra , GError * * error ) {
412
+ gboolean bd_btrfs_delete_subvolume (const gchar * mountpoint , const gchar * name , G_GNUC_UNUSED const BDExtraArg * * extra , GError * * error ) {
411
413
gchar * path = NULL ;
412
414
gboolean success = FALSE;
413
- const gchar * argv [5 ] = {"btrfs" , "subvol" , "delete" , NULL , NULL };
414
-
415
- if (!check_deps (& avail_deps , DEPS_BTRFS_MASK , deps , DEPS_LAST , & deps_check_lock , error ) ||
416
- !check_module_deps (& avail_module_deps , MODULE_DEPS_BTRFS_MASK , module_deps , MODULE_DEPS_LAST , & deps_check_lock , error ))
417
- return FALSE;
415
+ enum btrfs_util_error err ;
418
416
419
417
if (g_str_has_suffix (mountpoint , "/" ))
420
418
path = g_strdup_printf ("%s%s" , mountpoint , name );
421
419
else
422
420
path = g_strdup_printf ("%s/%s" , mountpoint , name );
423
- argv [3 ] = path ;
424
421
425
- success = bd_utils_exec_and_report_error (argv , extra , error );
422
+ // TODO: support BTRFS_UTIL_DELETE_SUBVOLUME_RECURSIVE
423
+ err = btrfs_util_delete_subvolume (path , 0 );
424
+ if (err ) {
425
+ g_set_error (error , BD_BTRFS_ERROR , BD_BTRFS_ERROR_DEVICE , "%s: %m" , btrfs_util_strerror (err ));
426
+ } else {
427
+ success = TRUE;
428
+ }
429
+
426
430
g_free (path );
427
431
428
432
return success ;
0 commit comments