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-head mailing list