Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Mar 2016 20:16:29 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r297365 - in head/sys: dev/pccard kern sys
Message-ID:  <201603282016.u2SKGT6H003349@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Mon Mar 28 20:16:29 2016
New Revision: 297365
URL: https://svnweb.freebsd.org/changeset/base/297365

Log:
  Move pccard_safe_quote() up to subr_bus.c and rename to
  devctl_safe_quote() so it can be used more generally.

Modified:
  head/sys/dev/pccard/pccard.c
  head/sys/kern/subr_bus.c
  head/sys/sys/bus.h

Modified: head/sys/dev/pccard/pccard.c
==============================================================================
--- head/sys/dev/pccard/pccard.c	Mon Mar 28 19:55:30 2016	(r297364)
+++ head/sys/dev/pccard/pccard.c	Mon Mar 28 20:16:29 2016	(r297365)
@@ -1025,26 +1025,6 @@ pccard_child_location_str(device_t bus, 
 	return (0);
 }
 
-/* XXX Maybe this should be in subr_bus? */
-static void
-pccard_safe_quote(char *dst, const char *src, size_t len)
-{
-	char *walker = dst, *ep = dst + len - 1;
-
-	if (len == 0)
-		return;
-	while (src != NULL && walker < ep)
-	{
-		if (*src == '"') {
-			if (ep - walker < 2)
-				break;
-			*walker++ = '\\';
-		}
-		*walker++ = *src++;
-	}
-	*walker = '\0';
-}
-
 static int
 pccard_child_pnpinfo_str(device_t bus, device_t child, char *buf,
     size_t buflen)
@@ -1054,8 +1034,8 @@ pccard_child_pnpinfo_str(device_t bus, d
 	struct pccard_softc *sc = PCCARD_SOFTC(bus);
 	char cis0[128], cis1[128];
 
-	pccard_safe_quote(cis0, sc->card.cis1_info[0], sizeof(cis0));
-	pccard_safe_quote(cis1, sc->card.cis1_info[1], sizeof(cis1));
+	devctl_safe_quote(cis0, sc->card.cis1_info[0], sizeof(cis0));
+	devctl_safe_quote(cis1, sc->card.cis1_info[1], sizeof(cis1));
 	snprintf(buf, buflen, "manufacturer=0x%04x product=0x%04x "
 	    "cisvendor=\"%s\" cisproduct=\"%s\" function_type=%d",
 	    sc->card.manufacturer, sc->card.product, cis0, cis1, pf->function);

Modified: head/sys/kern/subr_bus.c
==============================================================================
--- head/sys/kern/subr_bus.c	Mon Mar 28 19:55:30 2016	(r297364)
+++ head/sys/kern/subr_bus.c	Mon Mar 28 20:16:29 2016	(r297365)
@@ -839,6 +839,38 @@ sysctl_devctl_queue(SYSCTL_HANDLER_ARGS)
 	return (0);
 }
 
+/**
+ * @brief safely quotes strings that might have double quotes in them.
+ *
+ * The devctl protocol relies on quoted strings having matching quotes.
+ * This routine quotes any internal quotes so the resulting string
+ * is safe to pass to snprintf to construct, for example pnp info strings.
+ * Strings are always terminated with a NUL, but may be truncated if longer
+ * than @p len bytes after quotes.
+ *
+ * @param dst	Buffer to hold the string. Must be at least @p len bytes long
+ * @param src	Original buffer.
+ * @param len	Length of buffer pointed to by @dst, including trailing NUL
+ */
+void
+devctl_safe_quote(char *dst, const char *src, size_t len)
+{
+	char *walker = dst, *ep = dst + len - 1;
+
+	if (len == 0)
+		return;
+	while (src != NULL && walker < ep)
+	{
+		if (*src == '"') {
+			if (ep - walker < 2)
+				break;
+			*walker++ = '\\';
+		}
+		*walker++ = *src++;
+	}
+	*walker = '\0';
+}
+
 /* End of /dev/devctl code */
 
 static TAILQ_HEAD(,device)	bus_data_devices;

Modified: head/sys/sys/bus.h
==============================================================================
--- head/sys/sys/bus.h	Mon Mar 28 19:55:30 2016	(r297364)
+++ head/sys/sys/bus.h	Mon Mar 28 20:16:29 2016	(r297365)
@@ -141,6 +141,7 @@ void devctl_notify(const char *__system,
     const char *__type, const char *__data);
 void devctl_queue_data_f(char *__data, int __flags);
 void devctl_queue_data(char *__data);
+void devctl_safe_quote(char *__dst, const char *__src, size_t len);
 
 /**
  * Device name parsers.  Hook to allow device enumerators to map



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201603282016.u2SKGT6H003349>