ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] Q: bison strdup
@ 2006-10-07 22:00 Alexey Tourbin
  2006-10-07 23:17 ` Alexey Tourbin
  0 siblings, 1 reply; 2+ messages in thread
From: Alexey Tourbin @ 2006-10-07 22:00 UTC (permalink / raw)
  To: devel


[-- Attachment #1.1: Type: text/plain, Size: 253 bytes --]

Специалисты по бизону!
Кто-нибудь знает, когда я хочу немного модифицировать $1, нужно strdup
делать или нет?  А то у меня после вот этого вот изменения SEGV стал
наблюдаться.  Если нужно делать strdup, как тогда в конце правильно
очистить память?

[-- Attachment #1.2: zshgiChuD --]
[-- Type: text/plain, Size: 2071 bytes --]

commit a1db68d1ae0e4fcc6a3e93322349a0eb4d25befc
Author: Alexey Tourbin <at@altlinux.ru>
Date:   Sun Oct 8 01:25:49 2006 +0400

    implemented -u option to convert underscores in tag and branch names to dots
    
    This is like git-cvsimport -u, but arguably smarter: each dot is converted
    iff the previous character was a digit.

diff --git a/gram.y b/gram.y
index 2ef1e20..413228e 100644
--- a/gram.y
+++ b/gram.y
@@ -21,6 +21,20 @@ #include "cvs.h"
     
 void yyerror (char *msg);
 
+extern int opt_convert_underscores;
+
+static char *
+fixup_symbol(char *s)
+{
+    if (opt_convert_underscores) {
+	char *p = s;
+	while (*++p)
+	    if (*p == '_' && isdigit(p[-1]))
+		*p = '.';
+    }
+    return s;
+}
+
 %}
 
 %union {
@@ -95,7 +109,7 @@ symbols		: symbols symbol
 symbol		: name COLON NUMBER
 		  {
 			$$ = calloc (1, sizeof (cvs_symbol));
-			$$->name = $1;
+			$$->name = fixup_symbol ($1);
 			$$->number = $3;
 		  }
 		;
diff --git a/parsecvs.c b/parsecvs.c
index e15eede..bd256ed 100644
--- a/parsecvs.c
+++ b/parsecvs.c
@@ -694,6 +694,8 @@ static void load_status_next (void)
 
 #define OBJ_PACK_TIME	1024
 
+int opt_convert_underscores = 0;
+
 int
 main (int argc, char **argv)
 {
@@ -713,8 +715,9 @@ main (int argc, char **argv)
 	static struct option options[] = {
 	    { "help",		0, 0, 'h' },
 	    { "version",	0, 0, 'V' },
+	    { "convert-underscores", 0, 0, 'u' },
 	};
-	int c = getopt_long(argc, argv, "+hV", options, NULL);
+	int c = getopt_long(argc, argv, "+hVu", options, NULL);
 	if (c < 0)
 	    break;
 	switch (c) {
@@ -730,6 +733,9 @@ main (int argc, char **argv)
 		   "This is free software; see the source for copying conditions. There is NO\n"
 		   "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
 	    return 0;
+	case 'u':
+	    opt_convert_underscores = 1;
+	    break;
 	default: /* error message already emitted */
 	    fprintf(stderr, "Try `%s --help' for more information.\n", argv[0]);
 	    return 1;

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [devel] Q: bison strdup
  2006-10-07 22:00 [devel] Q: bison strdup Alexey Tourbin
@ 2006-10-07 23:17 ` Alexey Tourbin
  0 siblings, 0 replies; 2+ messages in thread
From: Alexey Tourbin @ 2006-10-07 23:17 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 968 bytes --]

On Sun, Oct 08, 2006 at 02:00:49AM +0400, Alexey Tourbin wrote:
> Специалисты по бизону!
> Кто-нибудь знает, когда я хочу немного модифицировать $1, нужно strdup
> делать или нет?  А то у меня после вот этого вот изменения SEGV стал
> наблюдаться.  Если нужно делать strdup, как тогда в конце правильно
> очистить память?

А в общем я кажется стал догадываться в чём дело.  Надо UPE перечитать,
а то уже забыл что это за бизон такой.

> @@ -95,7 +109,7 @@ symbols		: symbols symbol
>  symbol		: name COLON NUMBER
>  		  {
>  			$$ = calloc (1, sizeof (cvs_symbol));
> -			$$->name = $1;
> +			$$->name = fixup_symbol ($1);
>  			$$->number = $3;
>  		  }
>  		;

Здесь name это во-первых нетерминальный символ, то есть откуда он взялся
и в каком виде это ещё надо думать.  Во-вторых если бы он был
тенминальным значит его отдал flex и надо смотреть делается ли в *.l
что-то типа strdup(yytext) или нет.

Кому надо UPE на русском обращайтесь.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2006-10-07 23:17 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-10-07 22:00 [devel] Q: bison strdup Alexey Tourbin
2006-10-07 23:17 ` Alexey Tourbin

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git