gmime r1508 - in trunk: . gmime



Author: fejj
Date: Mon Feb 23 02:19:04 2009
New Revision: 1508
URL: http://svn.gnome.org/viewvc/gmime?rev=1508&view=rev

Log:
2009-02-22  Jeffrey Stedfast  <fejj novell com>

	* gmime/gmime-parser.c: Updated to use GSlice.



Modified:
   trunk/ChangeLog
   trunk/gmime/gmime-parser.c

Modified: trunk/gmime/gmime-parser.c
==============================================================================
--- trunk/gmime/gmime-parser.c	(original)
+++ trunk/gmime/gmime-parser.c	Mon Feb 23 02:19:04 2009
@@ -56,8 +56,22 @@
  * into multiple #GMimeMessage objects.
  **/
 
+typedef struct _boundary_stack {
+	struct _boundary_stack *parent;
+	char *boundary;
+	size_t boundarylen;
+	size_t boundarylenfinal;
+	size_t boundarylenmax;
+	gint64 content_end;
+} BoundaryStack;
+
+typedef struct _header_raw {
+	struct _header_raw *next;
+	char *name, *value;
+	gint64 offset;
+} HeaderRaw;
 
-typedef struct _ContentType {
+typedef struct _content_type {
 	char *type, *subtype;
 	gboolean exists;
 } ContentType;
@@ -144,18 +158,9 @@
 	unsigned short int persist_stream:1;
 	unsigned short int respect_content_length:1;
 	
-	struct _header_raw *headers;
+	HeaderRaw *headers;
 	
-	struct _boundary_stack *bounds;
-};
-
-struct _boundary_stack {
-	struct _boundary_stack *parent;
-	char *boundary;
-	size_t boundarylen;
-	size_t boundarylenfinal;
-	size_t boundarylenmax;
-	gint64 content_end;
+	BoundaryStack *bounds;
 };
 
 
@@ -163,12 +168,12 @@
 parser_push_boundary (GMimeParser *parser, const char *boundary)
 {
 	struct _GMimeParserPrivate *priv = parser->priv;
-	struct _boundary_stack *s;
+	BoundaryStack *s;
 	size_t max;
 	
 	max = priv->bounds ? priv->bounds->boundarylenmax : 0;
 	
-	s = g_new (struct _boundary_stack, 1);
+	s = g_slice_new (BoundaryStack);
 	s->parent = priv->bounds;
 	priv->bounds = s;
 	
@@ -191,7 +196,7 @@
 parser_pop_boundary (GMimeParser *parser)
 {
 	struct _GMimeParserPrivate *priv = parser->priv;
-	struct _boundary_stack *s;
+	BoundaryStack *s;
 	
 	if (!priv->bounds) {
 		d(g_warning ("boundary stack underflow"));
@@ -202,47 +207,42 @@
 	priv->bounds = priv->bounds->parent;
 	
 	g_free (s->boundary);
-	g_free (s);
+	
+	g_slice_free (BoundaryStack, s);
 }
 
-struct _header_raw {
-	struct _header_raw *next;
-	char *name;
-	char *value;
-	gint64 offset;
-};
-
 static const char *
-header_raw_find (struct _header_raw *headers, const char *name, gint64 *offset)
+header_raw_find (HeaderRaw *headers, const char *name, gint64 *offset)
 {
-	struct _header_raw *h;
+	HeaderRaw *header = headers;
 	
-	h = headers;
-	while (h) {
-		if (!g_ascii_strcasecmp (h->name, name)) {
+	while (header) {
+		if (!g_ascii_strcasecmp (header->name, name)) {
 			if (offset)
-				*offset = h->offset;
-			return h->value;
+				*offset = header->offset;
+			return header->value;
 		}
 		
-		h = h->next;
+		header = header->next;
 	}
 	
 	return NULL;
 }
 
 static void
-header_raw_clear (struct _header_raw **headers)
+header_raw_clear (HeaderRaw **headers)
 {
-	struct _header_raw *h, *n;
+	HeaderRaw *header, *next;
 	
-	h = *headers;
-	while (h) {
-		n = h->next;
-		g_free (h->name);
-		g_free (h->value);
-		g_free (h);
-		h = n;
+	header = *headers;
+	while (header) {
+		next = header->next;
+		g_free (header->name);
+		g_free (header->value);
+		
+		g_slice_free (HeaderRaw, header);
+		
+		header = next;
 	}
 	
 	*headers = NULL;
@@ -837,11 +837,11 @@
 } G_STMT_END
 
 static void
-header_parse (GMimeParser *parser, struct _header_raw **tail)
+header_parse (GMimeParser *parser, HeaderRaw **tail)
 {
 	struct _GMimeParserPrivate *priv = parser->priv;
-	struct _header_raw *header;
 	register char *inptr, *end;
+	HeaderRaw *header;
 	char *start;
 	size_t hlen;
 	
@@ -864,7 +864,7 @@
 	
 	hlen = inptr - priv->headerbuf;
 	
-	header = g_new (struct _header_raw, 1);
+	header = g_slice_new (HeaderRaw);
 	header->next = NULL;
 	
 	header->name = g_strndup (priv->headerbuf, hlen);
@@ -905,16 +905,16 @@
 	struct _GMimeParserPrivate *priv = parser->priv;
 	gboolean eoln, valid = TRUE, fieldname = TRUE;
 	gboolean continuation = FALSE;
-	struct _header_raw *hend;
 	register char *inptr;
 	char *start, *inend;
 	ssize_t left = 0;
+	HeaderRaw *tail;
 	size_t len;
 	
 	priv->midline = FALSE;
 	raw_header_reset (priv);
 	header_raw_clear (&priv->headers);
-	hend = (struct _header_raw *) &priv->headers;
+	tail = (HeaderRaw *) &priv->headers;
 	priv->header_offset = parser_offset (priv, NULL);
 	
 	if (priv->headers_begin == -1)
@@ -940,7 +940,7 @@
 			
 			/* if we are scanning a new line, check for a folded header */
 			if (!priv->midline && continuation && (*inptr != ' ' && *inptr != '\t')) {
-				header_parse (parser, &hend);
+				header_parse (parser, &tail);
 				priv->header_offset = parser_offset (priv, inptr);
 				continuation = FALSE;
 				fieldname = TRUE;
@@ -1047,7 +1047,7 @@
  headers_end:
 	
 	if (priv->headerptr > priv->headerbuf)
-		header_parse (parser, &hend);
+		header_parse (parser, &tail);
 	
 	if (priv->headers_end == -1)
 		priv->headers_end = parser_offset (priv, start);
@@ -1086,7 +1086,8 @@
 {
 	g_free (content_type->subtype);
 	g_free (content_type->type);
-	g_free (content_type);
+	
+	g_slice_free (ContentType, content_type);
 }
 
 static gboolean
@@ -1113,7 +1114,7 @@
 	ContentType *content_type;
 	const char *value;
 	
-	content_type = g_new (ContentType, 1);
+	content_type = g_slice_new (ContentType);
 	
 	if (!(value = header_raw_find (priv->headers, "Content-Type", NULL)) ||
 	    !g_mime_parse_content_type (&value, &content_type->type, &content_type->subtype)) {
@@ -1229,7 +1230,7 @@
 		len--;
 	
 	if (possible_boundary (priv->scan_from, start, len)) {
-		struct _boundary_stack *s;
+		BoundaryStack *s;
 		
 		d(printf ("checking boundary '%.*s'\n", len, start));
 		
@@ -1417,10 +1418,10 @@
 parser_scan_message_part (GMimeParser *parser, GMimeMessagePart *mpart, int *found)
 {
 	struct _GMimeParserPrivate *priv = parser->priv;
-	struct _header_raw *header;
 	ContentType *content_type;
 	GMimeMessage *message;
 	GMimeObject *object;
+	HeaderRaw *header;
 	
 	g_assert (priv->state == GMIME_PARSER_STATE_CONTENT);
 	
@@ -1457,8 +1458,8 @@
 parser_construct_leaf_part (GMimeParser *parser, ContentType *content_type, int *found)
 {
 	struct _GMimeParserPrivate *priv = parser->priv;
-	struct _header_raw *header;
 	GMimeObject *object;
+	HeaderRaw *header;
 	
 	g_assert (priv->state >= GMIME_PARSER_STATE_HEADERS_END);
 	
@@ -1558,7 +1559,7 @@
 static gboolean
 found_immediate_boundary (struct _GMimeParserPrivate *priv, gboolean end)
 {
-	struct _boundary_stack *s = priv->bounds;
+	BoundaryStack *s = priv->bounds;
 	size_t len = end ? s->boundarylenfinal : s->boundarylen;
 	
 	return !strncmp (priv->inptr, s->boundary, len)
@@ -1610,10 +1611,10 @@
 parser_construct_multipart (GMimeParser *parser, ContentType *content_type, int *found)
 {
 	struct _GMimeParserPrivate *priv = parser->priv;
-	struct _header_raw *header;
 	GMimeMultipart *multipart;
 	const char *boundary;
 	GMimeObject *object;
+	HeaderRaw *header;
 	
 	g_assert (priv->state >= GMIME_PARSER_STATE_HEADERS_END);
 	
@@ -1714,10 +1715,10 @@
 {
 	struct _GMimeParserPrivate *priv = parser->priv;
 	unsigned long content_length = ULONG_MAX;
-	struct _header_raw *header;
 	ContentType *content_type;
 	GMimeMessage *message;
 	GMimeObject *object;
+	HeaderRaw *header;
 	char *endptr;
 	int found;
 	



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]