[svn] GnuPG - r4060 - trunk/g10
svn author dshaw
cvs at cvs.gnupg.org
Thu Mar 9 20:43:32 CET 2006
Author: dshaw
Date: 2006-03-09 20:43:29 +0100 (Thu, 09 Mar 2006)
New Revision: 4060
Modified:
trunk/g10/ChangeLog
trunk/g10/build-packet.c
trunk/g10/keyedit.c
Log:
* build-packet.c (string_to_notation): Add ability to indicate a notation
to be deleted with a '-' prefix.
* keyedit.c (menu_set_notation): Use it here to allow deleting a notation
marked with '-'. This works with either "-notation" or "-notation=value".
Modified: trunk/g10/ChangeLog
===================================================================
--- trunk/g10/ChangeLog 2006-03-09 19:24:59 UTC (rev 4059)
+++ trunk/g10/ChangeLog 2006-03-09 19:43:29 UTC (rev 4060)
@@ -1,3 +1,12 @@
+2006-03-09 David Shaw <dshaw at jabberwocky.com>
+
+ * build-packet.c (string_to_notation): Add ability to indicate a
+ notation to be deleted with a '-' prefix.
+
+ * keyedit.c (menu_set_notation): Use it here to allow deleting a
+ notation marked with '-'. This works with either "-notation" or
+ "-notation=value".
+
2006-03-08 David Shaw <dshaw at jabberwocky.com>
* keyedit.c (menu_set_notation): New function to set notations on
Modified: trunk/g10/build-packet.c
===================================================================
--- trunk/g10/build-packet.c 2006-03-09 19:24:59 UTC (rev 4059)
+++ trunk/g10/build-packet.c 2006-03-09 19:43:29 UTC (rev 4060)
@@ -891,12 +891,18 @@
struct notation *
string_to_notation(const char *string,int is_utf8)
{
- const char *s,*i;
- int saw_at=0,highbit=0;
+ const char *s;
+ int saw_at=0;
struct notation *notation;
notation=xmalloc_clear(sizeof(*notation));
+ if(*string=='-')
+ {
+ notation->flags.ignore=1;
+ string++;
+ }
+
if(*string=='!')
{
notation->flags.critical=1;
@@ -911,6 +917,10 @@
if( *s=='@')
saw_at++;
+ /* -notationname is legal without an = sign */
+ if(!*s && notation->flags.ignore)
+ break;
+
if( !*s || !isascii (*s) || (!isgraph(*s) && !isspace(*s)) )
{
log_error(_("a notation name must have only printable characters"
@@ -936,27 +946,31 @@
goto fail;
}
- i=s+1;
+ if(*s)
+ {
+ const char *i=s+1;
+ int highbit=0;
- /* we only support printable text - therefore we enforce the use of
- only printable characters (an empty value is valid) */
- for(s++; *s ; s++ )
- {
- if ( !isascii (*s) )
- highbit=1;
- else if (iscntrl(*s))
+ /* we only support printable text - therefore we enforce the use
+ of only printable characters (an empty value is valid) */
+ for(s++; *s ; s++ )
{
- log_error(_("a notation value must not use any"
- " control characters\n"));
- goto fail;
+ if ( !isascii (*s) )
+ highbit=1;
+ else if (iscntrl(*s))
+ {
+ log_error(_("a notation value must not use any"
+ " control characters\n"));
+ goto fail;
+ }
}
+
+ if(!highbit || is_utf8)
+ notation->value=xstrdup(i);
+ else
+ notation->value=native_to_utf8(i);
}
- if(!highbit || is_utf8)
- notation->value=xstrdup(i);
- else
- notation->value=native_to_utf8(i);
-
return notation;
fail:
Modified: trunk/g10/keyedit.c
===================================================================
--- trunk/g10/keyedit.c 2006-03-09 19:24:59 UTC (rev 4059)
+++ trunk/g10/keyedit.c 2006-03-09 19:43:29 UTC (rev 4060)
@@ -4178,7 +4178,8 @@
}
}
- if(ascii_strcasecmp(answer,"none")==0)
+ if(ascii_strcasecmp(answer,"none")==0
+ || ascii_strcasecmp(answer,"-")==0)
notation=NULL; /* delete them all */
else
{
@@ -4238,7 +4239,7 @@
{
tty_printf("Current notations for user ID \"%s\":\n",
user);
- tty_print_notations(-10,sig);
+ tty_print_notations(-9,sig);
}
else
{
@@ -4253,39 +4254,61 @@
if(notation)
{
- struct notation *n,*list=sig_to_notation(sig);
- notation->next=list;
+ struct notation *n;
+ int deleting=0;
- for(n=list;n;n=n->next)
+ notation->next=sig_to_notation(sig);
+
+ for(n=notation->next;n;n=n->next)
if(strcmp(n->name,notation->name)==0)
{
- if(strcmp(n->value,notation->value)==0)
+ if(notation->value)
{
- /* Adding the same notation twice, so
- don't add it at all. */
- skip=1;
- tty_printf("Skipping notation: %s=%s\n",
- notation->name,notation->value);
- notation->flags.ignore=1;
- break;
+ if(strcmp(n->value,notation->value)==0)
+ {
+ if(notation->flags.ignore)
+ {
+ /* Value match with a delete
+ flag. */
+ n->flags.ignore=1;
+ deleting=1;
+ }
+ else
+ {
+ /* Adding the same notation
+ twice, so don't add it at
+ all. */
+ skip=1;
+ tty_printf("Skipping notation:"
+ " %s=%s\n",
+ notation->name,
+ notation->value);
+ break;
+ }
+ }
}
- else if(notation->value[0]=='\0')
+ else
{
- /* No value, so we don't replace this
- notation with anything. */
+ /* No value, so it means delete. */
n->flags.ignore=1;
- notation->flags.ignore=1;
- addonly=0;
+ deleting=1;
}
if(n->flags.ignore)
- tty_printf("Removing notation: %s=%s\n",
- n->name,n->value);
+ {
+ tty_printf("Removing notation: %s=%s\n",
+ n->name,n->value);
+ addonly=0;
+ }
}
- if(!notation->flags.ignore)
+ if(!notation->flags.ignore && !skip)
tty_printf("Adding notation: %s=%s\n",
notation->name,notation->value);
+
+ /* We tried to delete, but had no matches */
+ if(notation->flags.ignore && !deleting)
+ continue;
}
else
{
More information about the Gnupg-commits
mailing list