From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:38039) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RuPce-0007cZ-Mf for qemu-devel@nongnu.org; Mon, 06 Feb 2012 09:32:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RuPcd-0003Uz-AJ for qemu-devel@nongnu.org; Mon, 06 Feb 2012 09:32:48 -0500 Received: from mail-pz0-f45.google.com ([209.85.210.45]:42997) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RuPcd-0003Uh-1S for qemu-devel@nongnu.org; Mon, 06 Feb 2012 09:32:47 -0500 Received: by dadp14 with SMTP id p14so6489683dad.4 for ; Mon, 06 Feb 2012 06:32:46 -0800 (PST) Message-ID: <4F2FE48A.5020100@codemonkey.ws> Date: Mon, 06 Feb 2012 08:32:42 -0600 From: Anthony Liguori MIME-Version: 1.0 References: <1328342577-25732-1-git-send-email-pbonzini@redhat.com> <1328342577-25732-18-git-send-email-pbonzini@redhat.com> In-Reply-To: <1328342577-25732-18-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 17/27] qdev: remove parse/print methods for mac properties List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: qemu-devel@nongnu.org On 02/04/2012 02:02 AM, Paolo Bonzini wrote: > Signed-off-by: Paolo Bonzini Reviewed-by: Anthony Liguori > --- > hw/qdev-properties.c | 61 ++++++++++++++++++++++++++++++++++--------------- > 1 files changed, 42 insertions(+), 19 deletions(-) > > diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c > index dea287a..42b9b24 100644 > --- a/hw/qdev-properties.c > +++ b/hw/qdev-properties.c > @@ -848,46 +848,69 @@ PropertyInfo qdev_prop_ptr = { > * 01:02:03:04:05:06 > * 01-02-03-04-05-06 > */ > -static int parse_mac(DeviceState *dev, Property *prop, const char *str) > +static void get_mac(Object *obj, Visitor *v, void *opaque, > + const char *name, Error **errp) > +{ > + DeviceState *dev = DEVICE(obj); > + Property *prop = opaque; > + MACAddr *mac = qdev_get_prop_ptr(dev, prop); > + char buffer[2 * 6 + 5 + 1]; > + char *p = buffer; > + > + snprintf(buffer, sizeof(buffer), "%02x:%02x:%02x:%02x:%02x:%02x", > + mac->a[0], mac->a[1], mac->a[2], > + mac->a[3], mac->a[4], mac->a[5]); > + > + visit_type_str(v,&p, name, errp); > +} > + > +static void set_mac(Object *obj, Visitor *v, void *opaque, > + const char *name, Error **errp) > { > + DeviceState *dev = DEVICE(obj); > + Property *prop = opaque; > MACAddr *mac = qdev_get_prop_ptr(dev, prop); > + Error *local_err = NULL; > int i, pos; > - char *p; > + char *str, *p; > + > + if (dev->state != DEV_STATE_CREATED) { > + error_set(errp, QERR_PERMISSION_DENIED); > + return; > + } > + > + visit_type_str(v,&str, name,&local_err); > + if (local_err) { > + error_propagate(errp, local_err); > + return; > + } > > for (i = 0, pos = 0; i< 6; i++, pos += 3) { > if (!qemu_isxdigit(str[pos])) > - return -EINVAL; > + goto inval; > if (!qemu_isxdigit(str[pos+1])) > - return -EINVAL; > + goto inval; > if (i == 5) { > if (str[pos+2] != '\0') > - return -EINVAL; > + goto inval; > } else { > if (str[pos+2] != ':'&& str[pos+2] != '-') > - return -EINVAL; > + goto inval; > } > mac->a[i] = strtol(str+pos,&p, 16); > } > - return 0; > -} > - > -static int print_mac(DeviceState *dev, Property *prop, char *dest, size_t len) > -{ > - MACAddr *mac = qdev_get_prop_ptr(dev, prop); > + return; > > - return snprintf(dest, len, "%02x:%02x:%02x:%02x:%02x:%02x", > - mac->a[0], mac->a[1], mac->a[2], > - mac->a[3], mac->a[4], mac->a[5]); > +inval: > + error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str); > } > > PropertyInfo qdev_prop_macaddr = { > .name = "macaddr", > .type = PROP_TYPE_MACADDR, > .size = sizeof(MACAddr), > - .parse = parse_mac, > - .print = print_mac, > - .get = get_generic, > - .set = set_generic, > + .get = get_mac, > + .set = set_mac, > }; > >