Dynamically allocate space to hold comments, links, strings, and

2008-01-27  Kevin Cozens  <kcozens@cvs.gnome.org>

	* plug-ins/imagemap/imap_cern.l:
	* plug-ins/imagemap/imap_cern.y: 
	* plug-ins/imagemap/imap_csim.l:
	* plug-ins/imagemap/imap_csim.y:
	* plug-ins/imagemap/imap_ncsa.l:
	* plug-ins/imagemap/imap_ncsa.y: Dynamically allocate space to hold
	comments, links, strings, and co-ordinate lists. Fixes bug #511072.

	* plug-ins/imagemap/imap_cern_lex.c:
	* plug-ins/imagemap/imap_cern_parse.c:
	* plug-ins/imagemap/imap_cern_parse.h:
	* plug-ins/imagemap/imap_csim_lex.c:
	* plug-ins/imagemap/imap_csim_parse.c:
	* plug-ins/imagemap/imap_csim_parse.h:
	* plug-ins/imagemap/imap_ncsa_lex.c:
	* plug-ins/imagemap/imap_ncsa_parse.c:
	* plug-ins/imagemap/imap_ncsa_parse.h: Regenerated.

svn path=/trunk/; revision=24722
This commit is contained in:
Kevin Cozens
2008-01-27 16:13:51 +00:00
committed by Kevin Cozens
parent d1e1e0a166
commit 7b67daac8d
16 changed files with 276 additions and 141 deletions

View File

@ -1,3 +1,23 @@
2008-01-27 Kevin Cozens <kcozens@cvs.gnome.org>
* plug-ins/imagemap/imap_cern.l:
* plug-ins/imagemap/imap_cern.y:
* plug-ins/imagemap/imap_csim.l:
* plug-ins/imagemap/imap_csim.y:
* plug-ins/imagemap/imap_ncsa.l:
* plug-ins/imagemap/imap_ncsa.y: Dynamically allocate space to hold
comments, links, strings, and co-ordinate lists. Fixes bug #511072.
* plug-ins/imagemap/imap_cern_lex.c:
* plug-ins/imagemap/imap_cern_parse.c:
* plug-ins/imagemap/imap_cern_parse.h:
* plug-ins/imagemap/imap_csim_lex.c:
* plug-ins/imagemap/imap_csim_parse.c:
* plug-ins/imagemap/imap_csim_parse.h:
* plug-ins/imagemap/imap_ncsa_lex.c:
* plug-ins/imagemap/imap_ncsa_parse.c:
* plug-ins/imagemap/imap_ncsa_parse.h: Regenerated.
2008-01-27 Sven Neumann <sven@gimp.org> 2008-01-27 Sven Neumann <sven@gimp.org>
* plug-ins/gimpressionist/gimp.c (gimpressionist_main): transfer * plug-ins/gimpressionist/gimp.c (gimpressionist_main): transfer

View File

@ -61,7 +61,7 @@ RECT{WS}\(4096,4096\){WS}\(4096,4096\) {
<comment>.*$ { <comment>.*$ {
BEGIN(INITIAL); BEGIN(INITIAL);
strcpy(cern_lval.id, yytext); cern_lval.id = g_strndup (yytext, yyleng);
return COMMENT; return COMMENT;
} }
@ -74,7 +74,7 @@ POLY return POLYGON;
DEFAULT return DEFAULT; DEFAULT return DEFAULT;
[^ ,\t\n]+$ { [^ ,\t\n]+$ {
strcpy(cern_lval.id, yytext); cern_lval.id = g_strndup (yytext, yyleng);
return LINK; return LINK;
} }

View File

@ -47,7 +47,7 @@ static Object_t *current_object;
%union { %union {
int val; int val;
double value; double value;
char id[256]; char *id;
} }
%token<val> RECTANGLE POLYGON CIRCLE DEFAULT %token<val> RECTANGLE POLYGON CIRCLE DEFAULT
@ -75,6 +75,7 @@ default : DEFAULT LINK
{ {
MapInfo_t *info = get_map_info(); MapInfo_t *info = get_map_info();
g_strreplace(&info->default_url, $2); g_strreplace(&info->default_url, $2);
g_free ($2);
} }
; ;
@ -88,6 +89,7 @@ rectangle : RECTANGLE '(' FLOAT ',' FLOAT ')' '(' FLOAT ',' FLOAT ')' LINK
current_object = create_rectangle(x, y, width, height); current_object = create_rectangle(x, y, width, height);
object_set_url(current_object, $12); object_set_url(current_object, $12);
add_shape(current_object); add_shape(current_object);
g_free ($12);
} }
; ;
@ -99,6 +101,7 @@ circle : CIRCLE '(' FLOAT ',' FLOAT ')' FLOAT LINK
current_object = create_circle(x, y, r); current_object = create_circle(x, y, r);
object_set_url(current_object, $8); object_set_url(current_object, $8);
add_shape(current_object); add_shape(current_object);
g_free ($8);
} }
; ;
@ -106,6 +109,7 @@ polygon : POLYGON {current_object = create_polygon(NULL);} coord_list LINK
{ {
object_set_url(current_object, $4); object_set_url(current_object, $4);
add_shape(current_object); add_shape(current_object);
g_free ($4);
} }
; ;
@ -131,6 +135,7 @@ comment_line : author_line
real_comment : BEGIN_COMMENT COMMENT real_comment : BEGIN_COMMENT COMMENT
{ {
g_free ($2);
} }
; ;
@ -138,7 +143,7 @@ author_line : AUTHOR COMMENT
{ {
MapInfo_t *info = get_map_info(); MapInfo_t *info = get_map_info();
g_strreplace(&info->author, $2); g_strreplace(&info->author, $2);
g_free ($2);
} }
; ;
@ -150,6 +155,7 @@ description_line: DESCRIPTION COMMENT
description = g_strconcat(info->description, $2, "\n", description = g_strconcat(info->description, $2, "\n",
NULL); NULL);
g_strreplace(&info->description, description); g_strreplace(&info->description, description);
g_free ($2);
} }
; ;

View File

@ -5,6 +5,25 @@
/* A lexical scanner generated by flex */ /* A lexical scanner generated by flex */
#define yy_create_buffer cern__create_buffer
#define yy_delete_buffer cern__delete_buffer
#define yy_flex_debug cern__flex_debug
#define yy_init_buffer cern__init_buffer
#define yy_flush_buffer cern__flush_buffer
#define yy_load_buffer_state cern__load_buffer_state
#define yy_switch_to_buffer cern__switch_to_buffer
#define yyin cern_in
#define yyleng cern_leng
#define yylex cern_lex
#define yylineno cern_lineno
#define yyout cern_out
#define yyrestart cern_restart
#define yytext cern_text
#define yywrap cern_wrap
#define yyalloc cern_alloc
#define yyrealloc cern_realloc
#define yyfree cern_free
#define FLEX_SCANNER #define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_MINOR_VERSION 5
@ -335,7 +354,7 @@ void cern_free (void * );
/* Begin user sect3 */ /* Begin user sect3 */
#define cern_wrap() 1 #define cern_wrap(n) 1
#define YY_SKIP_YYWRAP #define YY_SKIP_YYWRAP
typedef unsigned char YY_CHAR; typedef unsigned char YY_CHAR;
@ -570,7 +589,7 @@ char *cern_text;
#endif /* FLEX_SCANNER */ #endif /* FLEX_SCANNER */
#line 574 "<stdout>" #line 593 "<stdout>"
#define INITIAL 0 #define INITIAL 0
#define comment 1 #define comment 1
@ -727,7 +746,7 @@ YY_DECL
#line 45 "imap_cern.l" #line 45 "imap_cern.l"
#line 731 "<stdout>" #line 750 "<stdout>"
if ( !(yy_init) ) if ( !(yy_init) )
{ {
@ -845,7 +864,7 @@ YY_RULE_SETUP
#line 62 "imap_cern.l" #line 62 "imap_cern.l"
{ {
BEGIN(INITIAL); BEGIN(INITIAL);
strcpy(cern_lval.id, cern_text); cern_lval.id = g_strndup (cern_text, cern_leng);
return COMMENT; return COMMENT;
} }
YY_BREAK YY_BREAK
@ -876,7 +895,7 @@ YY_DO_BEFORE_ACTION; /* set up cern_text again */
YY_RULE_SETUP YY_RULE_SETUP
#line 76 "imap_cern.l" #line 76 "imap_cern.l"
{ {
strcpy(cern_lval.id, cern_text); cern_lval.id = g_strndup (cern_text, cern_leng);
return LINK; return LINK;
} }
YY_BREAK YY_BREAK
@ -904,7 +923,7 @@ YY_RULE_SETUP
#line 90 "imap_cern.l" #line 90 "imap_cern.l"
ECHO; ECHO;
YY_BREAK YY_BREAK
#line 908 "<stdout>" #line 927 "<stdout>"
case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(comment): case YY_STATE_EOF(comment):
yyterminate(); yyterminate();
@ -1136,7 +1155,7 @@ static int yy_get_next_buffer (void)
/* Read in more data. */ /* Read in more data. */
YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
(yy_n_chars), (size_t) num_to_read ); (yy_n_chars), num_to_read );
YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
} }
@ -1637,7 +1656,7 @@ YY_BUFFER_STATE cern__scan_buffer (char * base, yy_size_t size )
/** Setup the input buffer state to scan a string. The next call to cern_lex() will /** Setup the input buffer state to scan a string. The next call to cern_lex() will
* scan from a @e copy of @a str. * scan from a @e copy of @a str.
* @param yystr a NUL-terminated string to scan * @param str a NUL-terminated string to scan
* *
* @return the newly allocated buffer state object. * @return the newly allocated buffer state object.
* @note If you want to scan bytes that may contain NUL values, then use * @note If you want to scan bytes that may contain NUL values, then use

View File

@ -173,7 +173,7 @@ typedef union YYSTYPE
{ {
int val; int val;
double value; double value;
char id[256]; char *id;
} }
/* Line 187 of yacc.c. */ /* Line 187 of yacc.c. */
#line 180 "y.tab.c" #line 180 "y.tab.c"
@ -481,8 +481,8 @@ static const yytype_int8 yyrhs[] =
static const yytype_uint8 yyrline[] = static const yytype_uint8 yyrline[] =
{ {
0, 60, 60, 63, 64, 67, 68, 69, 70, 71, 0, 60, 60, 63, 64, 67, 68, 69, 70, 71,
74, 82, 94, 105, 105, 112, 113, 118, 127, 128, 74, 83, 96, 108, 108, 116, 117, 122, 131, 132,
129, 132, 137, 145 133, 136, 142, 150
}; };
#endif #endif
@ -1414,11 +1414,12 @@ yyreduce:
{ {
MapInfo_t *info = get_map_info(); MapInfo_t *info = get_map_info();
g_strreplace(&info->default_url, (yyvsp[(2) - (2)].id)); g_strreplace(&info->default_url, (yyvsp[(2) - (2)].id));
g_free ((yyvsp[(2) - (2)].id));
} }
break; break;
case 11: case 11:
#line 83 "imap_cern.y" #line 84 "imap_cern.y"
{ {
gint x = (gint) (yyvsp[(3) - (12)].value); gint x = (gint) (yyvsp[(3) - (12)].value);
gint y = (gint) (yyvsp[(5) - (12)].value); gint y = (gint) (yyvsp[(5) - (12)].value);
@ -1427,11 +1428,12 @@ yyreduce:
current_object = create_rectangle(x, y, width, height); current_object = create_rectangle(x, y, width, height);
object_set_url(current_object, (yyvsp[(12) - (12)].id)); object_set_url(current_object, (yyvsp[(12) - (12)].id));
add_shape(current_object); add_shape(current_object);
g_free ((yyvsp[(12) - (12)].id));
} }
break; break;
case 12: case 12:
#line 95 "imap_cern.y" #line 97 "imap_cern.y"
{ {
gint x = (gint) (yyvsp[(3) - (8)].value); gint x = (gint) (yyvsp[(3) - (8)].value);
gint y = (gint) (yyvsp[(5) - (8)].value); gint y = (gint) (yyvsp[(5) - (8)].value);
@ -1439,30 +1441,32 @@ yyreduce:
current_object = create_circle(x, y, r); current_object = create_circle(x, y, r);
object_set_url(current_object, (yyvsp[(8) - (8)].id)); object_set_url(current_object, (yyvsp[(8) - (8)].id));
add_shape(current_object); add_shape(current_object);
g_free ((yyvsp[(8) - (8)].id));
} }
break; break;
case 13: case 13:
#line 105 "imap_cern.y" #line 108 "imap_cern.y"
{current_object = create_polygon(NULL);} {current_object = create_polygon(NULL);}
break; break;
case 14: case 14:
#line 106 "imap_cern.y" #line 109 "imap_cern.y"
{ {
object_set_url(current_object, (yyvsp[(4) - (4)].id)); object_set_url(current_object, (yyvsp[(4) - (4)].id));
add_shape(current_object); add_shape(current_object);
g_free ((yyvsp[(4) - (4)].id));
} }
break; break;
case 16: case 16:
#line 114 "imap_cern.y" #line 118 "imap_cern.y"
{ {
} }
break; break;
case 17: case 17:
#line 119 "imap_cern.y" #line 123 "imap_cern.y"
{ {
Polygon_t *polygon = ObjectToPolygon(current_object); Polygon_t *polygon = ObjectToPolygon(current_object);
GdkPoint *point = new_point((gint) (yyvsp[(2) - (5)].value), (gint) (yyvsp[(4) - (5)].value)); GdkPoint *point = new_point((gint) (yyvsp[(2) - (5)].value), (gint) (yyvsp[(4) - (5)].value));
@ -1472,22 +1476,23 @@ yyreduce:
break; break;
case 21: case 21:
#line 133 "imap_cern.y" #line 137 "imap_cern.y"
{ {
g_free ((yyvsp[(2) - (2)].id));
} }
break; break;
case 22: case 22:
#line 138 "imap_cern.y" #line 143 "imap_cern.y"
{ {
MapInfo_t *info = get_map_info(); MapInfo_t *info = get_map_info();
g_strreplace(&info->author, (yyvsp[(2) - (2)].id)); g_strreplace(&info->author, (yyvsp[(2) - (2)].id));
g_free ((yyvsp[(2) - (2)].id));
} }
break; break;
case 23: case 23:
#line 146 "imap_cern.y" #line 151 "imap_cern.y"
{ {
MapInfo_t *info = get_map_info(); MapInfo_t *info = get_map_info();
gchar *description; gchar *description;
@ -1495,12 +1500,13 @@ yyreduce:
description = g_strconcat(info->description, (yyvsp[(2) - (2)].id), "\n", description = g_strconcat(info->description, (yyvsp[(2) - (2)].id), "\n",
NULL); NULL);
g_strreplace(&info->description, description); g_strreplace(&info->description, description);
g_free ((yyvsp[(2) - (2)].id));
} }
break; break;
/* Line 1267 of yacc.c. */ /* Line 1267 of yacc.c. */
#line 1504 "y.tab.c" #line 1510 "y.tab.c"
default: break; default: break;
} }
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@ -1714,7 +1720,7 @@ yyreturn:
} }
#line 157 "imap_cern.y" #line 163 "imap_cern.y"
static void static void

View File

@ -72,7 +72,7 @@ typedef union YYSTYPE
{ {
int val; int val;
double value; double value;
char id[256]; char *id;
} }
/* Line 1489 of yacc.c. */ /* Line 1489 of yacc.c. */
#line 79 "y.tab.h" #line 79 "y.tab.h"

View File

@ -66,8 +66,7 @@ WS [ \t\n]+
} }
<comment>.*/--\> { <comment>.*/--\> {
strcpy(csim_lval.id, yytext); csim_lval.id = g_strndup (yytext, yyleng);
csim_lval.id[yyleng - 1] = '\0';
return STRING; return STRING;
} }
@ -113,7 +112,6 @@ NOHREF return NOHREF;
\" { \" {
BEGIN(quoted_string); BEGIN(quoted_string);
*csim_lval.id = 0;
} }
<quoted_string>\" { <quoted_string>\" {
@ -121,7 +119,9 @@ NOHREF return NOHREF;
return STRING; return STRING;
} }
<quoted_string>[^\"]* strcpy(csim_lval.id, yytext); <quoted_string>[^\"]* {
csim_lval.id = g_strndup (yytext, yyleng);
}
-?{DIGIT}*"."?{DIGIT}*([Ee][-+]?{DIGIT}*)? { -?{DIGIT}*"."?{DIGIT}*([Ee][-+]?{DIGIT}*)? {
csim_lval.value = g_ascii_strtod (yytext, NULL); csim_lval.value = g_ascii_strtod (yytext, NULL);

View File

@ -49,7 +49,7 @@ static MapInfo_t *_map_info;
%union { %union {
int val; int val;
double value; double value;
char id[4096]; /* Large enough to hold all polygon points! */ char *id;
} }
%token<val> IMG SRC WIDTH HEIGHT BORDER USEMAP %token<val> IMG SRC WIDTH HEIGHT BORDER USEMAP
@ -69,6 +69,7 @@ csim_file : image start_map comment_lines area_list end_map
image : '<' IMG SRC '=' STRING image_tags xhtml_close image : '<' IMG SRC '=' STRING image_tags xhtml_close
{ {
g_strreplace(&_map_info->image_name, $5); g_strreplace(&_map_info->image_name, $5);
g_free ($5);
} }
; ;
@ -79,8 +80,8 @@ image_tags : /* Empty */
image_tag : image_width image_tag : image_width
| image_height | image_height
| BORDER '=' integer_value {} | BORDER '=' integer_value {}
| USEMAP '=' STRING {} | USEMAP '=' STRING { g_free ($3); }
| ALT '=' STRING {} | ALT '=' STRING { g_free ($3); }
; ;
image_width : WIDTH '=' integer_value image_width : WIDTH '=' integer_value
@ -102,12 +103,14 @@ integer_value : FLOAT
| STRING | STRING
{ {
$$ = (gint) g_ascii_strtod ($1, NULL); $$ = (gint) g_ascii_strtod ($1, NULL);
g_free ($1);
} }
; ;
start_map : '<' START_MAP NAME '=' STRING '>' start_map : '<' START_MAP NAME '=' STRING '>'
{ {
g_strreplace(&_map_info->title, $5); g_strreplace(&_map_info->title, $5);
g_free ($5);
} }
; ;
@ -122,13 +125,14 @@ comment_line : author_line
real_comment : BEGIN_COMMENT STRING END_COMMENT real_comment : BEGIN_COMMENT STRING END_COMMENT
{ {
g_free ($2);
} }
; ;
author_line : AUTHOR STRING END_COMMENT author_line : AUTHOR STRING END_COMMENT
{ {
g_strreplace(&_map_info->author, $2); g_strreplace(&_map_info->author, $2);
g_free ($2);
} }
; ;
@ -139,6 +143,7 @@ description_line: DESCRIPTION STRING END_COMMENT
description = g_strconcat(_map_info->description, $2, "\n", description = g_strconcat(_map_info->description, $2, "\n",
NULL); NULL);
g_strreplace(&_map_info->description, description); g_strreplace(&_map_info->description, description);
g_free ($2);
} }
; ;
@ -187,6 +192,7 @@ shape_tag : SHAPE '=' STRING
} else if (!g_ascii_strcasecmp($3, "DEFAULT")) { } else if (!g_ascii_strcasecmp($3, "DEFAULT")) {
current_type = UNDEFINED; current_type = UNDEFINED;
} }
g_free ($3);
} }
; ;
@ -245,6 +251,8 @@ coords_tag : COORDS '=' STRING
polygon_remove_last_point(polygon); polygon_remove_last_point(polygon);
polygon->points = points; polygon->points = points;
} }
g_free ($3);
} }
; ;
@ -255,6 +263,7 @@ href_tag : HREF '=' STRING
} else { } else {
object_set_url(current_object, $3); object_set_url(current_object, $3);
} }
g_free ($3);
} }
; ;
@ -266,42 +275,49 @@ nohref_tag : NOHREF optional_value
optional_value : /* Empty */ optional_value : /* Empty */
| '=' STRING | '=' STRING
{ {
g_free ($2);
} }
; ;
alt_tag : ALT '=' STRING alt_tag : ALT '=' STRING
{ {
object_set_comment(current_object, $3); object_set_comment(current_object, $3);
g_free ($3);
} }
; ;
target_tag : TARGET '=' STRING target_tag : TARGET '=' STRING
{ {
object_set_target(current_object, $3); object_set_target(current_object, $3);
g_free ($3);
} }
; ;
onmouseover_tag : ONMOUSEOVER '=' STRING onmouseover_tag : ONMOUSEOVER '=' STRING
{ {
object_set_mouse_over(current_object, $3); object_set_mouse_over(current_object, $3);
g_free ($3);
} }
; ;
onmouseout_tag : ONMOUSEOUT '=' STRING onmouseout_tag : ONMOUSEOUT '=' STRING
{ {
object_set_mouse_out(current_object, $3); object_set_mouse_out(current_object, $3);
g_free ($3);
} }
; ;
onfocus_tag : ONFOCUS '=' STRING onfocus_tag : ONFOCUS '=' STRING
{ {
object_set_focus(current_object, $3); object_set_focus(current_object, $3);
g_free ($3);
} }
; ;
onblur_tag : ONBLUR '=' STRING onblur_tag : ONBLUR '=' STRING
{ {
object_set_blur(current_object, $3); object_set_blur(current_object, $3);
g_free ($3);
} }
; ;

View File

@ -5,6 +5,25 @@
/* A lexical scanner generated by flex */ /* A lexical scanner generated by flex */
#define yy_create_buffer csim__create_buffer
#define yy_delete_buffer csim__delete_buffer
#define yy_flex_debug csim__flex_debug
#define yy_init_buffer csim__init_buffer
#define yy_flush_buffer csim__flush_buffer
#define yy_load_buffer_state csim__load_buffer_state
#define yy_switch_to_buffer csim__switch_to_buffer
#define yyin csim_in
#define yyleng csim_leng
#define yylex csim_lex
#define yylineno csim_lineno
#define yyout csim_out
#define yyrestart csim_restart
#define yytext csim_text
#define yywrap csim_wrap
#define yyalloc csim_alloc
#define yyrealloc csim_realloc
#define yyfree csim_free
#define FLEX_SCANNER #define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_MINOR_VERSION 5
@ -335,7 +354,7 @@ void csim_free (void * );
/* Begin user sect3 */ /* Begin user sect3 */
#define csim_wrap() 1 #define csim_wrap(n) 1
#define YY_SKIP_YYWRAP #define YY_SKIP_YYWRAP
typedef unsigned char YY_CHAR; typedef unsigned char YY_CHAR;
@ -589,7 +608,7 @@ char *csim_text;
#line 593 "<stdout>" #line 612 "<stdout>"
#define INITIAL 0 #define INITIAL 0
#define quoted_string 1 #define quoted_string 1
@ -747,7 +766,7 @@ YY_DECL
#line 46 "imap_csim.l" #line 46 "imap_csim.l"
#line 751 "<stdout>" #line 770 "<stdout>"
if ( !(yy_init) ) if ( !(yy_init) )
{ {
@ -869,122 +888,120 @@ YY_DO_BEFORE_ACTION; /* set up csim_text again */
YY_RULE_SETUP YY_RULE_SETUP
#line 68 "imap_csim.l" #line 68 "imap_csim.l"
{ {
strcpy(csim_lval.id, csim_text); csim_lval.id = g_strndup (csim_text, csim_leng);
csim_lval.id[csim_leng - 1] = '\0';
return STRING; return STRING;
} }
YY_BREAK YY_BREAK
case 6: case 6:
YY_RULE_SETUP YY_RULE_SETUP
#line 74 "imap_csim.l" #line 73 "imap_csim.l"
return IMG; return IMG;
YY_BREAK YY_BREAK
case 7: case 7:
YY_RULE_SETUP YY_RULE_SETUP
#line 76 "imap_csim.l" #line 75 "imap_csim.l"
return SRC; return SRC;
YY_BREAK YY_BREAK
case 8: case 8:
YY_RULE_SETUP YY_RULE_SETUP
#line 78 "imap_csim.l" #line 77 "imap_csim.l"
return WIDTH; return WIDTH;
YY_BREAK YY_BREAK
case 9: case 9:
YY_RULE_SETUP YY_RULE_SETUP
#line 80 "imap_csim.l" #line 79 "imap_csim.l"
return HEIGHT; return HEIGHT;
YY_BREAK YY_BREAK
case 10: case 10:
YY_RULE_SETUP YY_RULE_SETUP
#line 82 "imap_csim.l" #line 81 "imap_csim.l"
return BORDER; return BORDER;
YY_BREAK YY_BREAK
case 11: case 11:
YY_RULE_SETUP YY_RULE_SETUP
#line 84 "imap_csim.l" #line 83 "imap_csim.l"
return USEMAP; return USEMAP;
YY_BREAK YY_BREAK
case 12: case 12:
YY_RULE_SETUP YY_RULE_SETUP
#line 86 "imap_csim.l" #line 85 "imap_csim.l"
return START_MAP; return START_MAP;
YY_BREAK YY_BREAK
case 13: case 13:
YY_RULE_SETUP YY_RULE_SETUP
#line 88 "imap_csim.l" #line 87 "imap_csim.l"
return END_MAP; return END_MAP;
YY_BREAK YY_BREAK
case 14: case 14:
YY_RULE_SETUP YY_RULE_SETUP
#line 90 "imap_csim.l" #line 89 "imap_csim.l"
return NAME; return NAME;
YY_BREAK YY_BREAK
case 15: case 15:
YY_RULE_SETUP YY_RULE_SETUP
#line 92 "imap_csim.l" #line 91 "imap_csim.l"
return AREA; return AREA;
YY_BREAK YY_BREAK
case 16: case 16:
YY_RULE_SETUP YY_RULE_SETUP
#line 94 "imap_csim.l" #line 93 "imap_csim.l"
return SHAPE; return SHAPE;
YY_BREAK YY_BREAK
case 17: case 17:
YY_RULE_SETUP YY_RULE_SETUP
#line 96 "imap_csim.l" #line 95 "imap_csim.l"
return COORDS; return COORDS;
YY_BREAK YY_BREAK
case 18: case 18:
YY_RULE_SETUP YY_RULE_SETUP
#line 98 "imap_csim.l" #line 97 "imap_csim.l"
return TARGET; return TARGET;
YY_BREAK YY_BREAK
case 19: case 19:
YY_RULE_SETUP YY_RULE_SETUP
#line 100 "imap_csim.l" #line 99 "imap_csim.l"
return ONMOUSEOVER; return ONMOUSEOVER;
YY_BREAK YY_BREAK
case 20: case 20:
YY_RULE_SETUP YY_RULE_SETUP
#line 102 "imap_csim.l" #line 101 "imap_csim.l"
return ONMOUSEOUT; return ONMOUSEOUT;
YY_BREAK YY_BREAK
case 21: case 21:
YY_RULE_SETUP YY_RULE_SETUP
#line 104 "imap_csim.l" #line 103 "imap_csim.l"
return ONFOCUS; return ONFOCUS;
YY_BREAK YY_BREAK
case 22: case 22:
YY_RULE_SETUP YY_RULE_SETUP
#line 106 "imap_csim.l" #line 105 "imap_csim.l"
return ONBLUR; return ONBLUR;
YY_BREAK YY_BREAK
case 23: case 23:
YY_RULE_SETUP YY_RULE_SETUP
#line 108 "imap_csim.l" #line 107 "imap_csim.l"
return ALT; return ALT;
YY_BREAK YY_BREAK
case 24: case 24:
YY_RULE_SETUP YY_RULE_SETUP
#line 110 "imap_csim.l" #line 109 "imap_csim.l"
return HREF; return HREF;
YY_BREAK YY_BREAK
case 25: case 25:
YY_RULE_SETUP YY_RULE_SETUP
#line 112 "imap_csim.l" #line 111 "imap_csim.l"
return NOHREF; return NOHREF;
YY_BREAK YY_BREAK
case 26: case 26:
YY_RULE_SETUP YY_RULE_SETUP
#line 114 "imap_csim.l" #line 113 "imap_csim.l"
{ {
BEGIN(quoted_string); BEGIN(quoted_string);
*csim_lval.id = 0;
} }
YY_BREAK YY_BREAK
case 27: case 27:
YY_RULE_SETUP YY_RULE_SETUP
#line 119 "imap_csim.l" #line 117 "imap_csim.l"
{ {
BEGIN(INITIAL); BEGIN(INITIAL);
return STRING; return STRING;
@ -993,8 +1010,10 @@ YY_RULE_SETUP
case 28: case 28:
/* rule 28 can match eol */ /* rule 28 can match eol */
YY_RULE_SETUP YY_RULE_SETUP
#line 124 "imap_csim.l" #line 122 "imap_csim.l"
strcpy(csim_lval.id, csim_text); {
csim_lval.id = g_strndup (csim_text, csim_leng);
}
YY_BREAK YY_BREAK
case 29: case 29:
YY_RULE_SETUP YY_RULE_SETUP
@ -1020,7 +1039,7 @@ YY_RULE_SETUP
#line 135 "imap_csim.l" #line 135 "imap_csim.l"
ECHO; ECHO;
YY_BREAK YY_BREAK
#line 1024 "<stdout>" #line 1043 "<stdout>"
case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(quoted_string): case YY_STATE_EOF(quoted_string):
case YY_STATE_EOF(comment): case YY_STATE_EOF(comment):
@ -1253,7 +1272,7 @@ static int yy_get_next_buffer (void)
/* Read in more data. */ /* Read in more data. */
YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
(yy_n_chars), (size_t) num_to_read ); (yy_n_chars), num_to_read );
YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
} }
@ -1754,7 +1773,7 @@ YY_BUFFER_STATE csim__scan_buffer (char * base, yy_size_t size )
/** Setup the input buffer state to scan a string. The next call to csim_lex() will /** Setup the input buffer state to scan a string. The next call to csim_lex() will
* scan from a @e copy of @a str. * scan from a @e copy of @a str.
* @param yystr a NUL-terminated string to scan * @param str a NUL-terminated string to scan
* *
* @return the newly allocated buffer state object. * @return the newly allocated buffer state object.
* @note If you want to scan bytes that may contain NUL values, then use * @note If you want to scan bytes that may contain NUL values, then use

View File

@ -207,7 +207,7 @@ typedef union YYSTYPE
{ {
int val; int val;
double value; double value;
char id[4096]; /* Large enough to hold all polygon points! */ char *id;
} }
/* Line 187 of yacc.c. */ /* Line 187 of yacc.c. */
#line 214 "y.tab.c" #line 214 "y.tab.c"
@ -528,12 +528,12 @@ static const yytype_int8 yyrhs[] =
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] = static const yytype_uint16 yyrline[] =
{ {
0, 66, 66, 69, 75, 76, 79, 80, 81, 82, 0, 66, 66, 69, 76, 77, 80, 81, 82, 83,
83, 86, 92, 98, 102, 108, 114, 115, 118, 119, 84, 87, 93, 99, 103, 110, 117, 118, 121, 122,
120, 123, 128, 135, 145, 146, 149, 156, 157, 160, 123, 126, 132, 139, 150, 151, 154, 161, 162, 165,
161, 164, 165, 166, 167, 168, 169, 170, 171, 172, 166, 169, 170, 171, 172, 173, 174, 175, 176, 177,
173, 176, 193, 251, 261, 266, 267, 272, 278, 284, 178, 181, 199, 259, 270, 275, 276, 282, 289, 296,
290, 296, 302, 308 303, 310, 317, 324
}; };
#endif #endif
@ -1508,86 +1508,91 @@ yyreduce:
#line 70 "imap_csim.y" #line 70 "imap_csim.y"
{ {
g_strreplace(&_map_info->image_name, (yyvsp[(5) - (7)].id)); g_strreplace(&_map_info->image_name, (yyvsp[(5) - (7)].id));
g_free ((yyvsp[(5) - (7)].id));
} }
break; break;
case 8: case 8:
#line 81 "imap_csim.y"
{}
break;
case 9:
#line 82 "imap_csim.y" #line 82 "imap_csim.y"
{} {}
break; break;
case 10: case 9:
#line 83 "imap_csim.y" #line 83 "imap_csim.y"
{} { g_free ((yyvsp[(3) - (3)].id)); }
break;
case 10:
#line 84 "imap_csim.y"
{ g_free ((yyvsp[(3) - (3)].id)); }
break; break;
case 11: case 11:
#line 87 "imap_csim.y" #line 88 "imap_csim.y"
{ {
_map_info->old_image_width = (yyvsp[(3) - (3)].val); _map_info->old_image_width = (yyvsp[(3) - (3)].val);
} }
break; break;
case 12: case 12:
#line 93 "imap_csim.y" #line 94 "imap_csim.y"
{ {
_map_info->old_image_height = (yyvsp[(3) - (3)].val); _map_info->old_image_height = (yyvsp[(3) - (3)].val);
} }
break; break;
case 13: case 13:
#line 99 "imap_csim.y" #line 100 "imap_csim.y"
{ {
(yyval.val) = (gint) (yyvsp[(1) - (1)].value); (yyval.val) = (gint) (yyvsp[(1) - (1)].value);
} }
break; break;
case 14: case 14:
#line 103 "imap_csim.y" #line 104 "imap_csim.y"
{ {
(yyval.val) = (gint) g_ascii_strtod ((yyvsp[(1) - (1)].id), NULL); (yyval.val) = (gint) g_ascii_strtod ((yyvsp[(1) - (1)].id), NULL);
g_free ((yyvsp[(1) - (1)].id));
} }
break; break;
case 15: case 15:
#line 109 "imap_csim.y" #line 111 "imap_csim.y"
{ {
g_strreplace(&_map_info->title, (yyvsp[(5) - (6)].id)); g_strreplace(&_map_info->title, (yyvsp[(5) - (6)].id));
g_free ((yyvsp[(5) - (6)].id));
} }
break; break;
case 21: case 21:
#line 124 "imap_csim.y" #line 127 "imap_csim.y"
{ {
g_free ((yyvsp[(2) - (3)].id));
} }
break; break;
case 22: case 22:
#line 129 "imap_csim.y" #line 133 "imap_csim.y"
{ {
g_strreplace(&_map_info->author, (yyvsp[(2) - (3)].id)); g_strreplace(&_map_info->author, (yyvsp[(2) - (3)].id));
g_free ((yyvsp[(2) - (3)].id));
} }
break; break;
case 23: case 23:
#line 136 "imap_csim.y" #line 140 "imap_csim.y"
{ {
gchar *description; gchar *description;
description = g_strconcat(_map_info->description, (yyvsp[(2) - (3)].id), "\n", description = g_strconcat(_map_info->description, (yyvsp[(2) - (3)].id), "\n",
NULL); NULL);
g_strreplace(&_map_info->description, description); g_strreplace(&_map_info->description, description);
g_free ((yyvsp[(2) - (3)].id));
} }
break; break;
case 26: case 26:
#line 150 "imap_csim.y" #line 155 "imap_csim.y"
{ {
if (current_type != UNDEFINED) if (current_type != UNDEFINED)
add_shape(current_object); add_shape(current_object);
@ -1595,7 +1600,7 @@ yyreduce:
break; break;
case 41: case 41:
#line 177 "imap_csim.y" #line 182 "imap_csim.y"
{ {
if (!g_ascii_strcasecmp((yyvsp[(3) - (3)].id), "RECT")) { if (!g_ascii_strcasecmp((yyvsp[(3) - (3)].id), "RECT")) {
current_object = create_rectangle(0, 0, 0, 0); current_object = create_rectangle(0, 0, 0, 0);
@ -1609,11 +1614,12 @@ yyreduce:
} else if (!g_ascii_strcasecmp((yyvsp[(3) - (3)].id), "DEFAULT")) { } else if (!g_ascii_strcasecmp((yyvsp[(3) - (3)].id), "DEFAULT")) {
current_type = UNDEFINED; current_type = UNDEFINED;
} }
g_free ((yyvsp[(3) - (3)].id));
} }
break; break;
case 42: case 42:
#line 194 "imap_csim.y" #line 200 "imap_csim.y"
{ {
char *p; char *p;
if (current_type == RECTANGLE) { if (current_type == RECTANGLE) {
@ -1668,77 +1674,87 @@ yyreduce:
polygon_remove_last_point(polygon); polygon_remove_last_point(polygon);
polygon->points = points; polygon->points = points;
} }
g_free ((yyvsp[(3) - (3)].id));
} }
break; break;
case 43: case 43:
#line 252 "imap_csim.y" #line 260 "imap_csim.y"
{ {
if (current_type == UNDEFINED) { if (current_type == UNDEFINED) {
g_strreplace(&_map_info->default_url, (yyvsp[(3) - (3)].id)); g_strreplace(&_map_info->default_url, (yyvsp[(3) - (3)].id));
} else { } else {
object_set_url(current_object, (yyvsp[(3) - (3)].id)); object_set_url(current_object, (yyvsp[(3) - (3)].id));
} }
g_free ((yyvsp[(3) - (3)].id));
} }
break; break;
case 44: case 44:
#line 262 "imap_csim.y" #line 271 "imap_csim.y"
{ {
} }
break; break;
case 46: case 46:
#line 268 "imap_csim.y" #line 277 "imap_csim.y"
{ {
g_free ((yyvsp[(2) - (2)].id));
} }
break; break;
case 47: case 47:
#line 273 "imap_csim.y" #line 283 "imap_csim.y"
{ {
object_set_comment(current_object, (yyvsp[(3) - (3)].id)); object_set_comment(current_object, (yyvsp[(3) - (3)].id));
g_free ((yyvsp[(3) - (3)].id));
} }
break; break;
case 48: case 48:
#line 279 "imap_csim.y" #line 290 "imap_csim.y"
{ {
object_set_target(current_object, (yyvsp[(3) - (3)].id)); object_set_target(current_object, (yyvsp[(3) - (3)].id));
g_free ((yyvsp[(3) - (3)].id));
} }
break; break;
case 49: case 49:
#line 285 "imap_csim.y" #line 297 "imap_csim.y"
{ {
object_set_mouse_over(current_object, (yyvsp[(3) - (3)].id)); object_set_mouse_over(current_object, (yyvsp[(3) - (3)].id));
g_free ((yyvsp[(3) - (3)].id));
} }
break; break;
case 50: case 50:
#line 291 "imap_csim.y" #line 304 "imap_csim.y"
{ {
object_set_mouse_out(current_object, (yyvsp[(3) - (3)].id)); object_set_mouse_out(current_object, (yyvsp[(3) - (3)].id));
g_free ((yyvsp[(3) - (3)].id));
} }
break; break;
case 51: case 51:
#line 297 "imap_csim.y" #line 311 "imap_csim.y"
{ {
object_set_focus(current_object, (yyvsp[(3) - (3)].id)); object_set_focus(current_object, (yyvsp[(3) - (3)].id));
g_free ((yyvsp[(3) - (3)].id));
} }
break; break;
case 52: case 52:
#line 303 "imap_csim.y" #line 318 "imap_csim.y"
{ {
object_set_blur(current_object, (yyvsp[(3) - (3)].id)); object_set_blur(current_object, (yyvsp[(3) - (3)].id));
g_free ((yyvsp[(3) - (3)].id));
} }
break; break;
/* Line 1267 of yacc.c. */ /* Line 1267 of yacc.c. */
#line 1742 "y.tab.c" #line 1758 "y.tab.c"
default: break; default: break;
} }
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@ -1952,7 +1968,7 @@ yyreturn:
} }
#line 311 "imap_csim.y" #line 327 "imap_csim.y"
static void static void

View File

@ -104,7 +104,7 @@ typedef union YYSTYPE
{ {
int val; int val;
double value; double value;
char id[4096]; /* Large enough to hold all polygon points! */ char *id;
} }
/* Line 1489 of yacc.c. */ /* Line 1489 of yacc.c. */
#line 111 "y.tab.h" #line 111 "y.tab.h"

View File

@ -67,7 +67,7 @@ WS [ \t\n]+
<comment>.* { <comment>.* {
BEGIN(INITIAL); BEGIN(INITIAL);
strcpy(ncsa_lval.id, yytext); ncsa_lval.id = g_strndup (yytext, yyleng);
return COMMENT; return COMMENT;
} }
@ -93,8 +93,7 @@ DEFAULT {
<imap_link>[^ ,\t\n]+ { <imap_link>[^ ,\t\n]+ {
BEGIN(INITIAL); BEGIN(INITIAL);
strcpy(ncsa_lval.id, yytext); ncsa_lval.id = g_strndup (yytext, yyleng);
ncsa_lval.id[yyleng - 1] = '\0';
return LINK; return LINK;
} }

View File

@ -46,7 +46,7 @@ static Object_t *current_object;
%union { %union {
int val; int val;
double value; double value;
char id[256]; char *id;
} }
%token<val> RECTANGLE POLYGON CIRCLE DEFAULT %token<val> RECTANGLE POLYGON CIRCLE DEFAULT
@ -71,6 +71,7 @@ comment_line : author_line
real_comment : BEGIN_COMMENT COMMENT real_comment : BEGIN_COMMENT COMMENT
{ {
g_free ($2);
} }
; ;
@ -78,6 +79,7 @@ author_line : AUTHOR COMMENT
{ {
MapInfo_t *info = get_map_info(); MapInfo_t *info = get_map_info();
g_strreplace(&info->author, $2); g_strreplace(&info->author, $2);
g_free ($2);
} }
; ;
@ -85,6 +87,7 @@ title_line : TITLE COMMENT
{ {
MapInfo_t *info = get_map_info(); MapInfo_t *info = get_map_info();
g_strreplace(&info->title, $2); g_strreplace(&info->title, $2);
g_free ($2);
} }
; ;
@ -96,6 +99,7 @@ description_line: DESCRIPTION COMMENT
description = g_strconcat(info->description, $2, "\n", description = g_strconcat(info->description, $2, "\n",
NULL); NULL);
g_strreplace(&info->description, description); g_strreplace(&info->description, description);
g_free ($2);
} }
; ;
@ -114,6 +118,7 @@ default : DEFAULT LINK
{ {
MapInfo_t *info = get_map_info(); MapInfo_t *info = get_map_info();
g_strreplace(&info->default_url, $2); g_strreplace(&info->default_url, $2);
g_free ($2);
} }
; ;
@ -127,6 +132,7 @@ rectangle : RECTANGLE LINK FLOAT ',' FLOAT FLOAT ',' FLOAT
current_object = create_rectangle(x, y, width, height); current_object = create_rectangle(x, y, width, height);
object_set_url(current_object, $2); object_set_url(current_object, $2);
add_shape(current_object); add_shape(current_object);
g_free ($2);
} }
; ;
@ -138,6 +144,7 @@ circle : CIRCLE LINK FLOAT ',' FLOAT FLOAT ',' FLOAT
current_object = create_circle(x, y, r); current_object = create_circle(x, y, r);
object_set_url(current_object, $2); object_set_url(current_object, $2);
add_shape(current_object); add_shape(current_object);
g_free ($2);
} }
; ;
@ -145,6 +152,7 @@ polygon : POLYGON LINK {current_object = create_polygon(NULL);} coord_list
{ {
object_set_url(current_object, $2); object_set_url(current_object, $2);
add_shape(current_object); add_shape(current_object);
g_free ($2);
} }
; ;

View File

@ -5,6 +5,25 @@
/* A lexical scanner generated by flex */ /* A lexical scanner generated by flex */
#define yy_create_buffer ncsa__create_buffer
#define yy_delete_buffer ncsa__delete_buffer
#define yy_flex_debug ncsa__flex_debug
#define yy_init_buffer ncsa__init_buffer
#define yy_flush_buffer ncsa__flush_buffer
#define yy_load_buffer_state ncsa__load_buffer_state
#define yy_switch_to_buffer ncsa__switch_to_buffer
#define yyin ncsa_in
#define yyleng ncsa_leng
#define yylex ncsa_lex
#define yylineno ncsa_lineno
#define yyout ncsa_out
#define yyrestart ncsa_restart
#define yytext ncsa_text
#define yywrap ncsa_wrap
#define yyalloc ncsa_alloc
#define yyrealloc ncsa_realloc
#define yyfree ncsa_free
#define FLEX_SCANNER #define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_MINOR_VERSION 5
@ -335,7 +354,7 @@ void ncsa_free (void * );
/* Begin user sect3 */ /* Begin user sect3 */
#define ncsa_wrap() 1 #define ncsa_wrap(n) 1
#define YY_SKIP_YYWRAP #define YY_SKIP_YYWRAP
typedef unsigned char YY_CHAR; typedef unsigned char YY_CHAR;
@ -541,7 +560,7 @@ char *ncsa_text;
#line 545 "<stdout>" #line 564 "<stdout>"
#define INITIAL 0 #define INITIAL 0
#define imap_link 1 #define imap_link 1
@ -699,7 +718,7 @@ YY_DECL
#line 46 "imap_ncsa.l" #line 46 "imap_ncsa.l"
#line 703 "<stdout>" #line 722 "<stdout>"
if ( !(yy_init) ) if ( !(yy_init) )
{ {
@ -819,7 +838,7 @@ YY_RULE_SETUP
#line 68 "imap_ncsa.l" #line 68 "imap_ncsa.l"
{ {
BEGIN(INITIAL); BEGIN(INITIAL);
strcpy(ncsa_lval.id, ncsa_text); ncsa_lval.id = g_strndup (ncsa_text, ncsa_leng);
return COMMENT; return COMMENT;
} }
YY_BREAK YY_BREAK
@ -860,14 +879,13 @@ YY_RULE_SETUP
#line 94 "imap_ncsa.l" #line 94 "imap_ncsa.l"
{ {
BEGIN(INITIAL); BEGIN(INITIAL);
strcpy(ncsa_lval.id, ncsa_text); ncsa_lval.id = g_strndup (ncsa_text, ncsa_leng);
ncsa_lval.id[ncsa_leng - 1] = '\0';
return LINK; return LINK;
} }
YY_BREAK YY_BREAK
case 11: case 11:
YY_RULE_SETUP YY_RULE_SETUP
#line 101 "imap_ncsa.l" #line 100 "imap_ncsa.l"
{ {
ncsa_lval.value = g_ascii_strtod (ncsa_text, NULL); ncsa_lval.value = g_ascii_strtod (ncsa_text, NULL);
return FLOAT; return FLOAT;
@ -876,20 +894,20 @@ YY_RULE_SETUP
case 12: case 12:
/* rule 12 can match eol */ /* rule 12 can match eol */
YY_RULE_SETUP YY_RULE_SETUP
#line 106 "imap_ncsa.l" #line 105 "imap_ncsa.l"
; /* Eat white space */ ; /* Eat white space */
YY_BREAK YY_BREAK
case 13: case 13:
YY_RULE_SETUP YY_RULE_SETUP
#line 108 "imap_ncsa.l" #line 107 "imap_ncsa.l"
return *ncsa_text; return *ncsa_text;
YY_BREAK YY_BREAK
case 14: case 14:
YY_RULE_SETUP YY_RULE_SETUP
#line 110 "imap_ncsa.l" #line 109 "imap_ncsa.l"
ECHO; ECHO;
YY_BREAK YY_BREAK
#line 893 "<stdout>" #line 911 "<stdout>"
case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(imap_link): case YY_STATE_EOF(imap_link):
case YY_STATE_EOF(comment): case YY_STATE_EOF(comment):
@ -1122,7 +1140,7 @@ static int yy_get_next_buffer (void)
/* Read in more data. */ /* Read in more data. */
YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
(yy_n_chars), (size_t) num_to_read ); (yy_n_chars), num_to_read );
YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
} }
@ -1623,7 +1641,7 @@ YY_BUFFER_STATE ncsa__scan_buffer (char * base, yy_size_t size )
/** Setup the input buffer state to scan a string. The next call to ncsa_lex() will /** Setup the input buffer state to scan a string. The next call to ncsa_lex() will
* scan from a @e copy of @a str. * scan from a @e copy of @a str.
* @param yystr a NUL-terminated string to scan * @param str a NUL-terminated string to scan
* *
* @return the newly allocated buffer state object. * @return the newly allocated buffer state object.
* @note If you want to scan bytes that may contain NUL values, then use * @note If you want to scan bytes that may contain NUL values, then use
@ -1877,7 +1895,7 @@ void ncsa_free (void * ptr )
#define YYTABLES_NAME "yytables" #define YYTABLES_NAME "yytables"
#line 110 "imap_ncsa.l" #line 109 "imap_ncsa.l"

View File

@ -174,7 +174,7 @@ typedef union YYSTYPE
{ {
int val; int val;
double value; double value;
char id[256]; char *id;
} }
/* Line 187 of yacc.c. */ /* Line 187 of yacc.c. */
#line 181 "y.tab.c" #line 181 "y.tab.c"
@ -482,8 +482,8 @@ static const yytype_int8 yyrhs[] =
static const yytype_uint8 yyrline[] = static const yytype_uint8 yyrline[] =
{ {
0, 59, 59, 62, 63, 66, 67, 68, 69, 72, 0, 59, 59, 62, 63, 66, 67, 68, 69, 72,
77, 84, 91, 102, 103, 106, 107, 108, 109, 110, 78, 86, 94, 106, 107, 110, 111, 112, 113, 114,
113, 121, 133, 144, 144, 151, 152, 157 117, 126, 139, 151, 151, 159, 160, 165
}; };
#endif #endif
@ -1411,27 +1411,30 @@ yyreduce:
case 9: case 9:
#line 73 "imap_ncsa.y" #line 73 "imap_ncsa.y"
{ {
g_free ((yyvsp[(2) - (2)].id));
} }
break; break;
case 10: case 10:
#line 78 "imap_ncsa.y" #line 79 "imap_ncsa.y"
{ {
MapInfo_t *info = get_map_info(); MapInfo_t *info = get_map_info();
g_strreplace(&info->author, (yyvsp[(2) - (2)].id)); g_strreplace(&info->author, (yyvsp[(2) - (2)].id));
g_free ((yyvsp[(2) - (2)].id));
} }
break; break;
case 11: case 11:
#line 85 "imap_ncsa.y" #line 87 "imap_ncsa.y"
{ {
MapInfo_t *info = get_map_info(); MapInfo_t *info = get_map_info();
g_strreplace(&info->title, (yyvsp[(2) - (2)].id)); g_strreplace(&info->title, (yyvsp[(2) - (2)].id));
g_free ((yyvsp[(2) - (2)].id));
} }
break; break;
case 12: case 12:
#line 92 "imap_ncsa.y" #line 95 "imap_ncsa.y"
{ {
MapInfo_t *info = get_map_info(); MapInfo_t *info = get_map_info();
gchar *description; gchar *description;
@ -1439,19 +1442,21 @@ yyreduce:
description = g_strconcat(info->description, (yyvsp[(2) - (2)].id), "\n", description = g_strconcat(info->description, (yyvsp[(2) - (2)].id), "\n",
NULL); NULL);
g_strreplace(&info->description, description); g_strreplace(&info->description, description);
g_free ((yyvsp[(2) - (2)].id));
} }
break; break;
case 20: case 20:
#line 114 "imap_ncsa.y" #line 118 "imap_ncsa.y"
{ {
MapInfo_t *info = get_map_info(); MapInfo_t *info = get_map_info();
g_strreplace(&info->default_url, (yyvsp[(2) - (2)].id)); g_strreplace(&info->default_url, (yyvsp[(2) - (2)].id));
g_free ((yyvsp[(2) - (2)].id));
} }
break; break;
case 21: case 21:
#line 122 "imap_ncsa.y" #line 127 "imap_ncsa.y"
{ {
gint x = (gint) (yyvsp[(3) - (8)].value); gint x = (gint) (yyvsp[(3) - (8)].value);
gint y = (gint) (yyvsp[(5) - (8)].value); gint y = (gint) (yyvsp[(5) - (8)].value);
@ -1460,11 +1465,12 @@ yyreduce:
current_object = create_rectangle(x, y, width, height); current_object = create_rectangle(x, y, width, height);
object_set_url(current_object, (yyvsp[(2) - (8)].id)); object_set_url(current_object, (yyvsp[(2) - (8)].id));
add_shape(current_object); add_shape(current_object);
g_free ((yyvsp[(2) - (8)].id));
} }
break; break;
case 22: case 22:
#line 134 "imap_ncsa.y" #line 140 "imap_ncsa.y"
{ {
gint x = (gint) (yyvsp[(3) - (8)].value); gint x = (gint) (yyvsp[(3) - (8)].value);
gint y = (gint) (yyvsp[(5) - (8)].value); gint y = (gint) (yyvsp[(5) - (8)].value);
@ -1472,30 +1478,32 @@ yyreduce:
current_object = create_circle(x, y, r); current_object = create_circle(x, y, r);
object_set_url(current_object, (yyvsp[(2) - (8)].id)); object_set_url(current_object, (yyvsp[(2) - (8)].id));
add_shape(current_object); add_shape(current_object);
g_free ((yyvsp[(2) - (8)].id));
} }
break; break;
case 23: case 23:
#line 144 "imap_ncsa.y" #line 151 "imap_ncsa.y"
{current_object = create_polygon(NULL);} {current_object = create_polygon(NULL);}
break; break;
case 24: case 24:
#line 145 "imap_ncsa.y" #line 152 "imap_ncsa.y"
{ {
object_set_url(current_object, (yyvsp[(2) - (4)].id)); object_set_url(current_object, (yyvsp[(2) - (4)].id));
add_shape(current_object); add_shape(current_object);
g_free ((yyvsp[(2) - (4)].id));
} }
break; break;
case 26: case 26:
#line 153 "imap_ncsa.y" #line 161 "imap_ncsa.y"
{ {
} }
break; break;
case 27: case 27:
#line 158 "imap_ncsa.y" #line 166 "imap_ncsa.y"
{ {
Polygon_t *polygon = ObjectToPolygon(current_object); Polygon_t *polygon = ObjectToPolygon(current_object);
GdkPoint *point = new_point((gint) (yyvsp[(1) - (3)].value), (gint) (yyvsp[(3) - (3)].value)); GdkPoint *point = new_point((gint) (yyvsp[(1) - (3)].value), (gint) (yyvsp[(3) - (3)].value));
@ -1506,7 +1514,7 @@ yyreduce:
/* Line 1267 of yacc.c. */ /* Line 1267 of yacc.c. */
#line 1510 "y.tab.c" #line 1518 "y.tab.c"
default: break; default: break;
} }
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@ -1720,7 +1728,7 @@ yyreturn:
} }
#line 166 "imap_ncsa.y" #line 174 "imap_ncsa.y"
static void static void

View File

@ -74,7 +74,7 @@ typedef union YYSTYPE
{ {
int val; int val;
double value; double value;
char id[256]; char *id;
} }
/* Line 1489 of yacc.c. */ /* Line 1489 of yacc.c. */
#line 81 "y.tab.h" #line 81 "y.tab.h"