Thread (20 messages) flat view 20 messages, 4 authors, 2017-09-29

Re: [PATCH 1/6] lib/cmdline.c: Add backslash support to kernel commandline parsing.

From: Michal Suchánek <hidden>
Date: 2017-09-25 18:39:09
Also in: lkml

On Fri, 15 Sep 2017 19:28:56 +0200
Michal Such=C3=A1nek [off-list ref] wrote:
On Fri, 15 Sep 2017 18:14:09 +0100
Al Viro [off-list ref] wrote:
=20
quoted
On Fri, Sep 15, 2017 at 07:02:46PM +0200, Michal Suchanek wrote:
 =20
quoted
 	for (i =3D 0; args[i]; i++) {
-		if (isspace(args[i]) && !in_quote)
+		if (isspace(args[i]) && !in_quote && !backslash)
 			break;
-		if (equals =3D=3D 0) {
-			if (args[i] =3D=3D '=3D')
-				equals =3D i;
+
+		if ((equals =3D=3D 0) && (args[i] =3D=3D '=3D'))
+			equals =3D i;
+
+		if (!backslash) {
+			if ((args[i] =3D=3D '"') || (args[i] =3D=3D
'\\')) {
+				if (args[i] =3D=3D '"')
+					in_quote =3D !in_quote;
+				if (args[i] =3D=3D '\\')
+					backslash =3D 1;
+
+				memmove(args + 1, args, i);
+				args++;
+				i--;
+			}
+		} else {
+			backslash =3D 0;
 		}
-		if (args[i] =3D=3D '"')
-			in_quote =3D !in_quote;
 	}   =20
=20
... and that makes for Unidiomatic Work With Strings Award for this
September. Using memmove() for string rewrite is almost always bad
taste; in this case it's also (as usual) broken. =20
=20
Care to share how it is broken?
Guess not. I will assume it is perfectly fine then. It works perfectly
fine in my testing.

Using memmove for string rewrite is not a matter of taste. It is the
only library function with sane semantics for rewrite of anything. Then
again open-coding it is always an option and maybe in better taste for
some :->

Michal
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help