svn commit: r222343 - head/sys/cddl/compat/opensolaris/kern
Andriy Gapon
avg at FreeBSD.org
Fri May 27 08:42:41 UTC 2011
on 27/05/2011 11:34 Pawel Jakub Dawidek said the following:
> Author: pjd
> Date: Fri May 27 08:34:31 2011
> New Revision: 222343
> URL: http://svn.freebsd.org/changeset/base/222343
>
> Log:
> Silence warnings about unsupoorted value types.
>
> MFC after: 2 weeks
BTW, I've just came with this patch for type 19 in particular, haven't even
tested it yet :-)
diff --git a/sys/cddl/compat/opensolaris/kern/opensolaris_sysevent.c
b/sys/cddl/compat/opensolaris/kern/opensolaris_sysevent.c
index dea618c..12b9e22 100644
--- a/sys/cddl/compat/opensolaris/kern/opensolaris_sysevent.c
+++ b/sys/cddl/compat/opensolaris/kern/opensolaris_sysevent.c
@@ -157,26 +157,15 @@ sysevent_detach_attributes(sysevent_t *evp)
ev->se_nvl = NULL;
}
-int
-log_sysevent(sysevent_t *evp, int flag, sysevent_id_t *eid)
+static void
+print_nvlist_sbuf(nvlist_t *nvl, struct sbuf *sb, const char **type)
{
- struct sysevent *ev = (struct sysevent *)evp;
- struct sbuf *sb;
- const char *type;
- char typestr[128];
nvpair_t *elem = NULL;
- ASSERT(evp != NULL);
- ASSERT(ev->se_nvl != NULL);
- ASSERT(flag == SE_SLEEP);
- ASSERT(eid != NULL);
+ if (type != NULL)
+ *type = NULL;
- sb = sbuf_new_auto();
- if (sb == NULL)
- return (SE_ENOMEM);
- type = NULL;
-
- while ((elem = nvlist_next_nvpair(ev->se_nvl, elem)) != NULL) {
+ while ((elem = nvlist_next_nvpair(nvl, elem)) != NULL) {
switch (nvpair_type(elem)) {
case DATA_TYPE_BOOLEAN:
{
@@ -237,13 +226,24 @@ log_sysevent(sysevent_t *evp, int flag, sysevent_id_t *eid)
(void) nvpair_value_string(elem, &value);
sbuf_printf(sb, " %s=%s", nvpair_name(elem), value);
- if (strcmp(FM_CLASS, nvpair_name(elem)) == 0)
- type = value;
+ if (type != NULL &&
+ strcmp(FM_CLASS, nvpair_name(elem)) == 0)
+ *type = value;
+ break;
+ }
+ case DATA_TYPE_NVLIST:
+ {
+ nvlist_t *value;
+
+ (void) nvpair_value_nvlist(elem, &value);
+ sbuf_printf(sb, " %s=[", nvpair_name(elem));
+ print_nvlist_sbuf(value, sb, NULL);
+ sbuf_printf(sb, "]");
break;
}
case DATA_TYPE_UINT8_ARRAY:
{
- uint8_t *value;
+ uint8_t *value;
uint_t ii, nelem;
(void) nvpair_value_uint8_array(elem, &value, &nelem);
@@ -254,7 +254,7 @@ log_sysevent(sysevent_t *evp, int flag, sysevent_id_t *eid)
}
case DATA_TYPE_UINT16_ARRAY:
{
- uint16_t *value;
+ uint16_t *value;
uint_t ii, nelem;
(void) nvpair_value_uint16_array(elem, &value, &nelem);
@@ -265,7 +265,7 @@ log_sysevent(sysevent_t *evp, int flag, sysevent_id_t *eid)
}
case DATA_TYPE_UINT32_ARRAY:
{
- uint32_t *value;
+ uint32_t *value;
uint_t ii, nelem;
(void) nvpair_value_uint32_array(elem, &value, &nelem);
@@ -276,7 +276,7 @@ log_sysevent(sysevent_t *evp, int flag, sysevent_id_t *eid)
}
case DATA_TYPE_UINT64_ARRAY:
{
- uint64_t *value;
+ uint64_t *value;
uint_t ii, nelem;
(void) nvpair_value_uint64_array(elem, &value, &nelem);
@@ -291,6 +291,26 @@ log_sysevent(sysevent_t *evp, int flag, sysevent_id_t *eid)
break;
}
}
+}
+
+int
+log_sysevent(sysevent_t *evp, int flag, sysevent_id_t *eid)
+{
+ struct sysevent *ev = (struct sysevent *)evp;
+ struct sbuf *sb;
+ const char *type;
+ char typestr[128];
+
+ ASSERT(evp != NULL);
+ ASSERT(ev->se_nvl != NULL);
+ ASSERT(flag == SE_SLEEP);
+ ASSERT(eid != NULL);
+
+ sb = sbuf_new_auto();
+ if (sb == NULL)
+ return (SE_ENOMEM);
+
+ print_nvlist_sbuf(ev->se_nvl, sb, &type);
if (sbuf_finish(sb) != 0) {
sbuf_delete(sb);
--
Andriy Gapon
More information about the svn-src-all
mailing list