X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=rfc2047e.c;h=e6f8f32bcc4913b5d0d1800dd69197f273f11699;hb=33cddbff323efcbae1503e91e6e65b2733da80c7;hp=44f1ad0c6a65d43e2a8e4b3e8bfd7c264e638260;hpb=65f9c5e8d026830b0fbd2583007c507e5e6e2b78;p=~andy%2Ffetchmail diff --git a/rfc2047e.c b/rfc2047e.c index 44f1ad0c..e6f8f32b 100644 --- a/rfc2047e.c +++ b/rfc2047e.c @@ -17,7 +17,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#ifndef _GNU_SOURCE #define _GNU_SOURCE +#endif #include "fetchmail.h" #include @@ -52,7 +54,7 @@ static char *encode_words(char *const *words, int nwords, const char *charset) l += strlen(words[i]) * 3; /* worst case, encode everything */ l += (strlen(charset) + 8) * (l/60 + 1); - out = v = xmalloc(l); + out = v = (char *)xmalloc(l); t = stpcpy(out, "=?"); t = stpcpy(t, charset); t = stpcpy(t, "?Q?"); @@ -67,7 +69,7 @@ static char *encode_words(char *const *words, int nwords, const char *charset) } if (*u == ' ') { *t++ = '_'; continue; } if (strchr(encchars, *u)) { *t++ = *u; continue; } - sprintf(t, "=%02X", (unsigned char)*u); + sprintf(t, "=%02X", (unsigned int)((unsigned char)*u)); t += 3; } } @@ -104,22 +106,22 @@ char *rfc2047e(const char *string, const char *charset) { count++; r += strspn(r, ws); } - words = xmalloc(sizeof(char *) * (count + 1)); + words = (char **)xmalloc(sizeof(char *) * (count + 1)); idx = 0; r = string; while (*r) { l = strcspn(r, ws); - words[idx] = xmalloc(l+1); + words[idx] = (char *)xmalloc(l+1); memcpy(words[idx], r, l); - words[idx][l] = 0; + words[idx][l] = '\0'; idx++; r += l; if (!*r) break; l = strspn(r, ws); - words[idx] = xmalloc(l+1); + words[idx] = (char *)xmalloc(l+1); memcpy(words[idx], r, l); - words[idx][l] = 0; + words[idx][l] = '\0'; idx++; r += l; } @@ -145,18 +147,19 @@ char *rfc2047e(const char *string, const char *charset) { free(words[idx]); words[idx] = tmp; for (i = idx + 1; i <= end; i++) - words[i][0] = 0; + words[i][0] = '\0'; idx = end + 2; } - for (idx = l = 0; idx < count; idx++) { + l = 0; + for (idx = 0; idx < count; idx++) { l += strlen(words[idx]); } /* phase 3: limit lengths */ minlen = strlen(charset) + 7; /* allocate ample memory */ - out = xmalloc(l + (l / (72 - minlen) + 1) * (minlen + 2) + 1); + out = (char *)xmalloc(l + (l / (72 - minlen) + 1) * (minlen + 2) + 1); if (count) t = stpcpy(out, words[0]); @@ -173,13 +176,16 @@ char *rfc2047e(const char *string, const char *charset) { if (i + 1 < count) m += strcspn(words[i+1], "\r\n"); if (l + m > 74) - l = 0, t = stpcpy(t, "\r\n"); + t = stpcpy(t, "\r\n"); t = stpcpy(t, words[i]); if (i + 1 < count) { t = stpcpy(t, words[i+1]); } tmp = strrchr(out, '\n'); - if (!tmp) tmp = out; else tmp++; + if (tmp == NULL) + tmp = out; + else + tmp++; l = strlen(tmp); }