2015-04-16 05:20:57 +03:00
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright ( C ) 2015 Colin Walters < walters @ verbum . org >
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation ; either version 2 of the licence or ( at
* your option ) any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General
* Public License along with this library ; if not , write to the
* Free Software Foundation , Inc . , 59 Temple Place , Suite 330 ,
* Boston , MA 02111 - 1307 , USA .
*/
# include "config.h"
# include <string.h>
2015-05-20 20:21:48 +03:00
# include "rpmostree-refsack.h"
# include "rpmostree-rpm-util.h"
2015-04-16 05:20:57 +03:00
RpmOstreeRefSack *
2015-05-22 16:38:55 +03:00
rpmostree_refsack_new ( HySack sack , int temp_base_dfd , const char * temp_path )
2015-04-16 05:20:57 +03:00
{
RpmOstreeRefSack * rsack = g_new0 ( RpmOstreeRefSack , 1 ) ;
rsack - > sack = sack ;
rsack - > refcount = 1 ;
2015-04-17 23:47:52 +03:00
rsack - > temp_base_dfd = temp_base_dfd ;
rsack - > temp_path = g_strdup ( temp_path ) ;
2015-04-16 05:20:57 +03:00
return rsack ;
}
RpmOstreeRefSack *
2015-05-22 16:38:55 +03:00
rpmostree_refsack_ref ( RpmOstreeRefSack * rsack )
2015-04-16 05:20:57 +03:00
{
g_atomic_int_inc ( & rsack - > refcount ) ;
return rsack ;
}
void
2015-05-22 16:38:55 +03:00
rpmostree_refsack_unref ( RpmOstreeRefSack * rsack )
2015-04-16 05:20:57 +03:00
{
if ( ! g_atomic_int_dec_and_test ( & rsack - > refcount ) )
return ;
hy_sack_free ( rsack - > sack ) ;
2015-04-17 23:47:52 +03:00
/* The sack might point to a temporarily allocated rpmdb copy, if so,
* prune it now .
*/
if ( rsack - > temp_path )
( void ) glnx_shutil_rm_rf_at ( rsack - > temp_base_dfd , rsack - > temp_path , NULL , NULL ) ;
g_free ( rsack - > temp_path ) ;
2015-04-16 05:20:57 +03:00
g_free ( rsack ) ;
}