+2002-03-08 Steffen Hansen <steffen@hrhansen.dk>
+
+ * A little better address-parsing. Not real rfc822 yet, but at least it fetches
+ the address between '<' and '>' now if they are present.
+
2002-03-07 Steffen Hansen <steffen@klaralvdalens-datakonsult.se>
* gpgmeplug.c (encryptMessage): Made the function accept multiple
const char* ciphertext ){ return true; }
-/* returns the next address in a comma-separated list
- or NULL if the list is empty. The function honors double quotes
- and '(' ')' comments.
- A non-NULL return value should be deleted with free().
-*/
+/* returns address if address doesn't contain a <xxx> part
+ * else it returns a new string xxx and frees address
+ */
+static char* parseAddress( char* address )
+{
+ char* result = address;
+ char* i;
+ char* j;
+ if( !result ) return result;
+ i = index( address, '<' );
+ if( i ) {
+ j = index( i+1, '>' );
+ if( j == NULL ) j = address+strlen(address);
+ result = malloc( j-i );
+ strncpy( result, i+1, j-i-1 );
+ result[j-i-1] = '\0';
+ free( address );
+ } else {
+ i = address;
+ j = i+strlen(address);
+ }
+ {
+ /* remove surrounding whitespace */
+ char* k = result+(j-i-1);
+ char* l = result;
+ while( isspace( *l ) ) ++l;
+ while( isspace( *k ) ) --k;
+ if( l != result || k != result+(j-i-1) ) {
+ char* result2 = malloc( k-l+2 );
+ strncpy( result2, l, k-l+1 );
+ result2[k-l+1] = '\0';
+ free(result);
+ result = result2;
+ }
+ }
+ return result;
+}
+
static char* nextAddress( const char** address )
{
const char *start = *address;
int found = 0;
if( *address == NULL ) return NULL;
while( **address ) {
-
+
switch( **address ) {
case '\\': /* escaped character */
++(*address);
}
if( found || **address == 0 ) {
size_t len;
- while( isspace( *start ) ) ++start;
len = *address - start;
if( len > 0 ) {
if( **address != 0 ) --len;
result[len] = '\0';
}
}
- return result;
+ return parseAddress(result);
}
bool encryptMessage( const char* cleartext,