pwent = getpwnam(username);
- if( (tmp = (char *)malloc(strlen(pwent->pw_gecos) +1)) == NULL)
+ if((tmp = strdup(pwent->pw_gecos)) == NULL)
return strdup(username);
rtn = sscanf(pwent->pw_gecos, "%[^,]", tmp);
}
if(*line != ' ') {
- fseek(in, pos, SEEK_SET);
+ fseek(in, pos, SEEK_SET); /* fixme ! */
free(line);
break;
}
mutt_read_line(FILE *in, char **alias, char **rest)
{
char *line, *ptr, *tmp;
+ size_t alias_len;
if( !(line = ptr = getaline(in)) )
return 1; /* error / EOF */
while( ! ISSPACE(*ptr) )
ptr++;
- if( (*alias = (char *)malloc(ptr-tmp+1)) == NULL) {
+ /* includes also the trailing zero */
+ alias_len = (size_t)(ptr - tmp + 1);
+
+ if( (*alias = (char *)malloc(alias_len)) == NULL) {
free(line);
return 1;
}
- strncpy(*alias, tmp, ptr-tmp);
- *(*alias + (ptr - tmp)) = 0;
+ strncpy(*alias, tmp, alias_len - 1);
+ *(*alias + alias_len - 1) = 0;
- while( ISSPACE(*ptr) )
+ while(ISSPACE(*ptr))
ptr++;
*rest = strdup(ptr);
return 0;
}
+static void
+mutt_fix_quoting(char *p)
+{
+ char *escape = 0;
+
+ for(; *p; p++) {
+ switch(*p) {
+ case '\"':
+ if(escape)
+ *escape = ' ';
+ break;
+ case '\\':
+ escape = p;
+ break;
+ default:
+ escape = 0;
+ }
+ }
+}
+
static void
mutt_parse_email(list_item item)
{
char *line = item[NAME];
- char *start = line, *tmp;
+ char *tmp;
char *name, *email;
+#if 0
+ char *start = line;
int i = 0;
+#endif
+ mutt_fix_quoting(line);
tmp = strconcat("From: ", line, NULL);
getname(tmp, &name, &email);
free(tmp);
else
return;
+ /*
+ * this is completely broken
+ */
+#if 0
while( (start = strchr(start, ',')) && i++ < MAX_EMAILS - 1) {
tmp = strconcat("From: ", ++start, NULL);
getname(tmp, &name, &email);
}
}
}
+#endif
}
static int
&& pine_conv_table[i] >= 0) {
strncpy(tmp, start, len);
tmp[len] = 0;
- item[pine_conv_table[i]] = strdup(tmp);
+ if(*tmp)
+ item[pine_conv_table[i]] = strdup(tmp);
}
start = end + 1;
}
fprintf(out,
"-----------------------------------------\n\n");
fprintf(out, "%s", database[e.item][NAME]);
- if (database[e.item][NICK])
+ if (database[e.item][NICK] && *database[e.item][NICK])
fprintf(out, "\n(%s)", database[e.item][NICK]);
fprintf(out, "\n");