@@ -374,22 +374,24 @@ gboolean bd_btrfs_remove_device (const gchar *mountpoint, const gchar *device, c
374374 *
375375 * Tech category: %BD_BTRFS_TECH_SUBVOL-%BD_BTRFS_TECH_MODE_CREATE
376376 */
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 ) {
378378 gchar * path = NULL ;
379379 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 ;
385381
386382 if (g_str_has_suffix (mountpoint , "/" ))
387383 path = g_strdup_printf ("%s%s" , mountpoint , name );
388384 else
389385 path = g_strdup_printf ("%s/%s" , mountpoint , name );
390- argv [3 ] = path ;
391386
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+
393395 g_free (path );
394396
395397 return success ;
@@ -407,22 +409,24 @@ gboolean bd_btrfs_create_subvolume (const gchar *mountpoint, const gchar *name,
407409 *
408410 * Tech category: %BD_BTRFS_TECH_SUBVOL-%BD_BTRFS_TECH_MODE_DELETE
409411 */
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 ) {
411413 gchar * path = NULL ;
412414 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 ;
418416
419417 if (g_str_has_suffix (mountpoint , "/" ))
420418 path = g_strdup_printf ("%s%s" , mountpoint , name );
421419 else
422420 path = g_strdup_printf ("%s/%s" , mountpoint , name );
423- argv [3 ] = path ;
424421
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+
426430 g_free (path );
427431
428432 return success ;
0 commit comments