From 4adfe5a6c9db07537df302f3c17713515bf23a2e Mon Sep 17 00:00:00 2001
From: Marcus Meissner <marcus@jet.franken.de>
Date: Sat, 11 Jul 2015 09:38:13 +0000
Subject: [PATCH] avoid use of sprintf to convert %% to %, duplicate the macro

git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@15490 67ed7778-7388-44ab-90cf-0a291f65f57c
---
 camlibs/ptp2/chdk.c     |  8 ++---
 camlibs/ptp2/chdk_ptp.h | 82 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 84 insertions(+), 6 deletions(-)

diff --git a/camlibs/ptp2/chdk.c b/camlibs/ptp2/chdk.c
index 5fb84ea..3b8a995 100644
--- a/camlibs/ptp2/chdk.c
+++ b/camlibs/ptp2/chdk.c
@@ -1119,18 +1119,14 @@ chdk_camera_capture (Camera *camera, CameraCaptureType type, CameraFilePath *pat
 	int		ret, retint;
 	char		*table, *s;
 	PTPParams	*params = &camera->pl->params;
-	char		*lua;
-	const char	*luascript =	PTP_CHDK_LUA_SERIALIZE_MSGS \
+	const char	*luascript = PTP_CHDK_LUA_SERIALIZE_MSGS_SIMPLEQUOTE \
 				PTP_CHDK_LUA_RLIB_SHOOT	\
 				"return rlib_shoot({info=true});\n";
 
 	ret =  camera_prepare_chdk_capture(camera, context);
 	if (ret != GP_OK) return ret;
 
-	lua = malloc(strlen(luascript)+1);
-	sprintf(lua,luascript); /* This expands the %q inside the string too ... do not optimize away. */
-	ret = chdk_generic_script_run (params, lua, &table, &retint, context);
-	free (lua);
+	ret = chdk_generic_script_run (params, luascript, &table, &retint, context);
 	GP_LOG_D("rlib_shoot returned table %s, retint %d\n", table, retint);
 	s = strstr(table, "exp=");
 	if (s) {
diff --git a/camlibs/ptp2/chdk_ptp.h b/camlibs/ptp2/chdk_ptp.h
index d11e0b7..65dcfd7 100644
--- a/camlibs/ptp2/chdk_ptp.h
+++ b/camlibs/ptp2/chdk_ptp.h
@@ -198,10 +198,92 @@ function serialize(v,opts)\n\
 	return table.concat(r)\n\
 end\n"
 
+#define PTP_CHDK_LUA_SERIALIZE_SIMPLEQUOTE "\n\
+serialize_r = function(v,opts,r,seen,depth)\n\
+	local vt = type(v)\n\
+	if vt == 'nil' or  vt == 'boolean' or vt == 'number' then\n\
+		table.insert(r,tostring(v))\n\
+		return\n\
+	end\n\
+	if vt == 'string' then\n\
+		table.insert(r,string.format('%q',v))\n\
+		return\n\
+	end\n\
+	if vt == 'table' then\n\
+		if not depth then\n\
+			depth = 1\n\
+		end\n\
+		if depth >= opts.maxdepth then\n\
+			error('serialize: max depth')\n\
+		end\n\
+		if not seen then\n\
+			seen={}\n\
+		elseif seen[v] then\n\
+			if opts.err_cycle then\n\
+				error('serialize: cycle')\n\
+			else\n\
+				table.insert(r,'\"cycle:'..tostring(v)..'\"')\n\
+				return\n\
+			end\n\
+		end\n\
+		seen[v] = true;\n\
+		table.insert(r,'{')\n\
+		for k,v1 in pairs(v) do\n\
+			if opts.pretty then\n\
+				table.insert(r,'\\n'..string.rep(' ',depth))\n\
+			end\n\
+			if type(k) == 'string' and string.match(k,'^[_%a][%a%d_]*$') then\n\
+				table.insert(r,k)\n\
+			else\n\
+				table.insert(r,'[')\n\
+				serialize_r(k,opts,r,seen,depth+1)\n\
+				table.insert(r,']')\n\
+			end\n\
+			table.insert(r,'=')\n\
+			serialize_r(v1,opts,r,seen,depth+1)\n\
+			table.insert(r,',')\n\
+		end\n\
+		if opts.pretty then\n\
+			table.insert(r,'\\n'..string.rep(' ',depth-1))\n\
+		end\n\
+		table.insert(r,'}')\n\
+		return\n\
+	end\n\
+	if opts.err_type then\n\
+		error('serialize: unsupported type ' .. vt, 2)\n\
+	else\n\
+		table.insert(r,'\"'..tostring(v)..'\"')\n\
+	end\n\
+end\n\
+serialize_defaults = {\n\
+	maxdepth=10,\n\
+	err_type=true,\n\
+	err_cycle=true,\n\
+	pretty=false,\n\
+}\n\
+function serialize(v,opts)\n\
+	if opts then\n\
+		for k,v in pairs(serialize_defaults) do\n\
+			if not opts[k] then\n\
+				opts[k]=v\n\
+			end\n\
+		end\n\
+	else\n\
+		opts=serialize_defaults\n\
+	end\n\
+	local r={}\n\
+	serialize_r(v,opts,r)\n\
+	return table.concat(r)\n\
+end\n"
+
 #define PTP_CHDK_LUA_SERIALIZE_MSGS \
 PTP_CHDK_LUA_SERIALIZE\
 "usb_msg_table_to_string=serialize\n"
 
+#define PTP_CHDK_LUA_SERIALIZE_MSGS_SIMPLEQUOTE \
+PTP_CHDK_LUA_SERIALIZE_SIMPLEQUOTE\
+"usb_msg_table_to_string=serialize\n"
+
 #define PTP_CHDK_LUA_EXTEND_TABLE \
 "function extend_table(target,source,deep)\n\
 	if type(target) ~= 'table' then\n\
