| /* |
| * 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.h" |
| #include "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; |
| } |