mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
7f97c7ea9a
As we start refactoring the code to break dependencies (see doc/refactoring.txt), I want us to use full paths in the includes (eg, #include "base/data-struct/list.h"). This makes it more obvious when we're breaking abstraction boundaries, eg, including a file in metadata/ from base/
93 lines
2.0 KiB
C
93 lines
2.0 KiB
C
/*
|
|
* Copyright (C) 2013 Red Hat, Inc. All rights reserved.
|
|
*
|
|
* This file is part of LVM2.
|
|
*
|
|
* This copyrighted material is made available to anyone wishing to use,
|
|
* modify, copy, or redistribute it subject to the terms and conditions
|
|
* of the GNU Lesser General Public License v.2.1.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include "lib/misc/lib.h"
|
|
#include "lib/properties/prop_common.h"
|
|
|
|
int prop_not_implemented_get(const void *obj, struct lvm_property_type *prop)
|
|
{
|
|
log_errno(ENOSYS, "Function not implemented");
|
|
|
|
return 0;
|
|
}
|
|
|
|
int prop_not_implemented_set(void *obj, struct lvm_property_type *prop)
|
|
{
|
|
log_errno(ENOSYS, "Function not implemented");
|
|
|
|
return 0;
|
|
}
|
|
|
|
int prop_get_property(struct lvm_property_type *p, const void *obj,
|
|
struct lvm_property_type *prop,
|
|
unsigned type)
|
|
{
|
|
while (p->id[0]) {
|
|
if (!strcmp(p->id, prop->id))
|
|
break;
|
|
p++;
|
|
}
|
|
if (!p->id[0]) {
|
|
log_errno(EINVAL, "Invalid property name %s", prop->id);
|
|
return 0;
|
|
}
|
|
if (!(p->type & type)) {
|
|
log_errno(EINVAL, "Property name %s does not match type %d",
|
|
prop->id, p->type);
|
|
return 0;
|
|
}
|
|
|
|
*prop = *p;
|
|
if (!p->get(obj, prop)) {
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int prop_set_property(struct lvm_property_type *p, void *obj,
|
|
struct lvm_property_type *prop,
|
|
unsigned type)
|
|
{
|
|
while (p->id[0]) {
|
|
if (!strcmp(p->id, prop->id))
|
|
break;
|
|
p++;
|
|
}
|
|
if (!p->id[0]) {
|
|
log_errno(EINVAL, "Invalid property name %s", prop->id);
|
|
return 0;
|
|
}
|
|
if (!p->is_settable) {
|
|
log_errno(EINVAL, "Unable to set read-only property %s",
|
|
prop->id);
|
|
return 0;
|
|
}
|
|
if (!(p->type & type)) {
|
|
log_errno(EINVAL, "Property name %s does not match type %d",
|
|
prop->id, p->type);
|
|
return 0;
|
|
}
|
|
|
|
if (p->is_string)
|
|
p->value.string = prop->value.string;
|
|
else
|
|
p->value.integer = prop->value.integer;
|
|
if (!p->set(obj, p)) {
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|