2010-08-14 21:59:25 +04:00
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2010-05-24 07:25:33 +04:00
/***
This file is part of systemd .
Copyright 2010 Lennart Poettering
systemd is free software ; you can redistribute it and / or modify it
2012-04-12 02:20:58 +04:00
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation ; either version 2.1 of the License , or
2010-05-24 07:25:33 +04:00
( at your option ) any later version .
systemd 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
2012-04-12 02:20:58 +04:00
Lesser General Public License for more details .
2010-05-24 07:25:33 +04:00
2012-04-12 02:20:58 +04:00
You should have received a copy of the GNU Lesser General Public License
2010-05-24 07:25:33 +04:00
along with systemd ; If not , see < http : //www.gnu.org/licenses/>.
* * */
2013-11-20 00:12:59 +04:00
# include "unit.h"
# include "path.h"
2010-05-24 07:25:33 +04:00
# include "dbus-unit.h"
# include "dbus-path.h"
2013-11-20 00:12:59 +04:00
# include "bus-util.h"
static BUS_DEFINE_PROPERTY_GET_ENUM ( property_get_result , path_result , PathResult ) ;
static int property_get_paths (
sd_bus * bus ,
const char * path ,
const char * interface ,
const char * property ,
sd_bus_message * reply ,
2013-11-21 22:34:37 +04:00
void * userdata ,
sd_bus_error * error ) {
2013-11-20 00:12:59 +04:00
Path * p = userdata ;
2010-07-04 06:23:48 +04:00
PathSpec * k ;
2013-11-20 00:12:59 +04:00
int r ;
2010-07-04 06:23:48 +04:00
2013-11-20 00:12:59 +04:00
assert ( bus ) ;
assert ( reply ) ;
2010-07-04 06:23:48 +04:00
assert ( p ) ;
2013-11-20 00:12:59 +04:00
r = sd_bus_message_open_container ( reply , ' a ' , " (ss) " ) ;
if ( r < 0 )
return r ;
2010-07-04 06:23:48 +04:00
LIST_FOREACH ( spec , k , p - > specs ) {
2013-11-20 00:12:59 +04:00
r = sd_bus_message_append ( reply , " (ss) " , path_type_to_string ( k - > type ) , k - > path ) ;
if ( r < 0 )
return r ;
2010-07-04 06:23:48 +04:00
}
2013-11-20 00:12:59 +04:00
return sd_bus_message_close_container ( reply ) ;
2010-07-04 06:23:48 +04:00
}
2013-11-20 00:12:59 +04:00
static int property_get_unit (
sd_bus * bus ,
const char * path ,
const char * interface ,
const char * property ,
sd_bus_message * reply ,
2013-11-21 22:34:37 +04:00
void * userdata ,
sd_bus_error * error ) {
2011-02-21 21:26:53 +03:00
2013-11-20 00:12:59 +04:00
Unit * p = userdata , * trigger ;
2011-02-21 21:26:53 +03:00
2013-11-20 00:12:59 +04:00
assert ( bus ) ;
assert ( reply ) ;
assert ( p ) ;
2011-02-21 21:26:53 +03:00
2013-11-20 00:12:59 +04:00
trigger = UNIT_TRIGGER ( p ) ;
2011-02-21 21:26:53 +03:00
2013-11-20 00:12:59 +04:00
return sd_bus_message_append ( reply , " s " , trigger ? trigger - > id : " " ) ;
}
2012-02-03 08:04:48 +04:00
2013-11-20 00:12:59 +04:00
const sd_bus_vtable bus_path_vtable [ ] = {
SD_BUS_VTABLE_START ( 0 ) ,
2013-12-22 05:24:05 +04:00
SD_BUS_PROPERTY ( " Unit " , " s " , property_get_unit , 0 , SD_BUS_VTABLE_PROPERTY_CONST ) ,
SD_BUS_PROPERTY ( " Paths " , " a(ss) " , property_get_paths , 0 , SD_BUS_VTABLE_PROPERTY_CONST ) ,
SD_BUS_PROPERTY ( " MakeDirectory " , " b " , bus_property_get_bool , offsetof ( Path , make_directory ) , SD_BUS_VTABLE_PROPERTY_CONST ) ,
SD_BUS_PROPERTY ( " DirectoryMode " , " u " , bus_property_get_mode , offsetof ( Path , directory_mode ) , SD_BUS_VTABLE_PROPERTY_CONST ) ,
2013-11-20 00:12:59 +04:00
SD_BUS_PROPERTY ( " Result " , " s " , property_get_result , offsetof ( Path , result ) , SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE ) ,
SD_BUS_VTABLE_END
2012-01-16 03:23:59 +04:00
} ;