[geany/geany-plugins] 901847: Merge branch 'debugger/gdb_mi-speedup' into debugger/frame-speedup

Colomban Wendling git-noreply at xxxxx
Sun Feb 7 03:37:38 UTC 2016


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Sun, 07 Feb 2016 03:37:38 UTC
Commit:      9018472988a8a438f6a47d267ccf11e8ebc8b34d
             https://github.com/geany/geany-plugins/commit/9018472988a8a438f6a47d267ccf11e8ebc8b34d

Log Message:
-----------
Merge branch 'debugger/gdb_mi-speedup' into debugger/frame-speedup


Modified Paths:
--------------
    debugger/src/gdb_mi.c

Modified: debugger/src/gdb_mi.c
51 lines changed, 36 insertions(+), 15 deletions(-)
===================================================================
@@ -98,13 +98,17 @@ static gchar *parse_cstring(const gchar **p)
 
 	if (**p == '"')
 	{
+		const gchar *base;
+
 		(*p)++;
+		base = *p;
 		while (**p != '"')
 		{
 			gchar c = **p;
 			/* TODO: check expansions here */
 			if (c == '\\')
 			{
+				g_string_append_len(str, base, (*p) - base);
 				(*p)++;
 				c = **p;
 				switch (g_ascii_tolower(c))
@@ -159,12 +163,14 @@ static gchar *parse_cstring(const gchar **p)
 						}
 						break;
 				}
+				g_string_append_c(str, c);
+				base = (*p) + 1;
 			}
-			if (**p == '\0')
+			else if (**p == '\0')
 				break;
-			g_string_append_c(str, c);
 			(*p)++;
 		}
+		g_string_append_len(str, base, (*p) - base);
 		if (**p == '"')
 			(*p)++;
 	}
@@ -176,15 +182,15 @@ static gchar *parse_cstring(const gchar **p)
  *        the docs aren't clear on this */
 static gchar *parse_string(const gchar **p)
 {
-	GString *str = g_string_new(NULL);
+	const gchar *base = *p;
 
 	if (g_ascii_isalpha(**p) || strchr("-_.", **p))
 	{
-		g_string_append_c(str, **p);
 		for ((*p)++; g_ascii_isalnum(**p) || strchr("-_.", **p); (*p)++)
-			g_string_append_c(str, **p);
+			;
 	}
-	return g_string_free(str, FALSE);
+
+	return g_strndup (base, *p - base);
 }
 
 /* parses: string "=" value */
@@ -205,15 +211,17 @@ static gboolean parse_result(struct gdb_mi_result *result, const gchar **p)
  * Actually, this is more permissive and allows mixed tuples/lists */
 static struct gdb_mi_value *parse_value(const gchar **p)
 {
-	struct gdb_mi_value *val = g_malloc0(sizeof *val);
+	struct gdb_mi_value *val = NULL;
 	if (**p == '"')
 	{
+		val = g_malloc0(sizeof *val);
 		val->type = GDB_MI_VAL_STRING;
 		val->string = parse_cstring(p);
 	}
 	else if (**p == '{' || **p == '[')
 	{
 		struct gdb_mi_result *prev = NULL;
+		val = g_malloc0(sizeof *val);
 		val->type = GDB_MI_VAL_LIST;
 		gchar end = **p == '{' ? '}' : ']';
 		(*p)++;
@@ -242,11 +250,6 @@ static struct gdb_mi_value *parse_value(const gchar **p)
 		if (**p == end)
 			(*p)++;
 	}
-	else
-	{
-		gdb_mi_value_free(val);
-		val = NULL;
-	}
 	return val;
 }
 
@@ -479,17 +482,35 @@ static void gdb_mi_record_dump(const struct gdb_mi_record *record)
 		gdb_mi_result_dump(record->first, TRUE, 2);
 }
 
-int main(void)
+static gchar *read_line(FILE *fp)
 {
 	char buf[1024] = {0};
+	GString *line = g_string_new(NULL);
+
+	while (fgets(buf, sizeof buf, fp))
+	{
+		g_string_append(line, buf);
+		if (line->len < 1 || line->str[line->len - 1] == '\n')
+			break;
+	}
+
+	return g_string_free(line, line->len < 1);
+}
 
-	while (fgets(buf, sizeof buf, stdin))
+int main(int argc, char **argv)
+{
+	gchar *line;
+
+	while ((line = read_line(stdin)) != NULL)
 	{
-		struct gdb_mi_record *record = gdb_mi_record_parse(buf);
+		struct gdb_mi_record *record = gdb_mi_record_parse(line);
 
 		gdb_mi_record_dump(record);
 		gdb_mi_record_free(record);
+
+		g_free(line);
 	}
+
 	return 0;
 }
 



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Plugins-Commits mailing list