new->value = str_dup (buffer);
- debug_print (2, ("`%s' = `%s'\n", new->attribute ? new->attribute : "",
+ debug_print (2, ("`%s' = `%s'\n", new->attribute ? new->attribute : "",
new->value ? new->value : ""));
/* Add this parameter to the list */
char *line = mem_malloc (LONG_STRING);
size_t linelen = LONG_STRING;
- p->hdr_offset = ftell (fp);
+ p->hdr_offset = ftello (fp);
p->encoding = ENC7BIT; /* default from RFC1521 */
p->type = digest ? TYPEMESSAGE : TYPETEXT;
}
#endif
}
- p->offset = ftell (fp); /* Mark the start of the real data */
+ p->offset = ftello (fp); /* Mark the start of the real data */
if (p->type == TYPETEXT && !p->subtype)
p->subtype = str_dup ("plain");
else if (p->type == TYPEMESSAGE && !p->subtype)
#endif
bound = mutt_get_parameter ("boundary", b->parameter);
- fseek (fp, b->offset, SEEK_SET);
+ fseeko (fp, b->offset, SEEK_SET);
b->parts = mutt_parse_multipart (fp, bound,
b->offset + b->length,
ascii_strcasecmp ("digest",
case TYPEMESSAGE:
if (b->subtype) {
- fseek (fp, b->offset, SEEK_SET);
+ fseeko (fp, b->offset, SEEK_SET);
if (mutt_is_message_type (b->type, b->subtype))
b->parts = mutt_parse_messageRFC822 (fp, b);
else if (ascii_strcasecmp (b->subtype, "external-body") == 0)
BODY *msg;
parent->hdr = mutt_new_header ();
- parent->hdr->offset = ftell (fp);
+ parent->hdr->offset = ftello (fp);
parent->hdr->env = mutt_read_rfc822_header (fp, parent->hdr, 0, 0);
msg = parent->hdr->content;
* digest 1 if reading a multipart/digest, 0 otherwise
*/
-BODY *mutt_parse_multipart (FILE * fp, const char *boundary, long end_off,
+BODY *mutt_parse_multipart (FILE * fp, const char *boundary, off_t end_off,
int digest)
{
#ifdef SUN_ATTACHMENT
}
blen = str_len (boundary);
- while (ftell (fp) < end_off && fgets (buffer, LONG_STRING, fp) != NULL) {
+ while (ftello (fp) < end_off && fgets (buffer, LONG_STRING, fp) != NULL) {
len = str_len (buffer);
crlf = (len > 1 && buffer[len - 2] == '\r') ? 1 : 0;
if (buffer[0] == '-' && buffer[1] == '-' &&
str_ncmp (buffer + 2, boundary, blen) == 0) {
if (last) {
- last->length = ftell (fp) - last->offset - len - 1 - crlf;
+ last->length = ftello (fp) - last->offset - len - 1 - crlf;
if (last->parts && last->parts->length == 0)
last->parts->length =
- ftell (fp) - last->parts->offset - len - 1 - crlf;
+ ftello (fp) - last->parts->offset - len - 1 - crlf;
/* if the body is empty, we can end up with a -1 length */
if (last->length < 0)
last->length = 0;
for (lines =
atoi (mutt_get_parameter ("content-lines", new->parameter));
lines; lines--)
- if (ftell (fp) >= end_off
+ if (ftello (fp) >= end_off
|| fgets (buffer, LONG_STRING, fp) == NULL)
break;
}
char scratch[SHORT_STRING];
/* Don't modify our argument. Fixed-size buffer is ok here since
- * the date format imposes a natural limit.
+ * the date format imposes a natural limit.
*/
strfcpy (scratch, s, sizeof (scratch));
if (hdr) {
hdr->lines = atoi (p);
- /*
+ /*
* HACK - mutt has, for a very short time, produced negative
- * Lines header values. Ignore them.
+ * Lines header values. Ignore them.
*/
if (hdr->lines < 0)
hdr->lines = 0;
* f stream to read from
*
* hdr header structure of current message (optional).
- *
+ *
* user_hdrs If set, store user headers. Used for recall-message and
* postpone modes.
- *
+ *
* weed If this parameter is set and the user has activated the
* $weed option, honor the header weed list for user headers.
* Used for recall-message.
- *
+ *
* Returns: newly allocated envelope structure. You should free it by
* mutt_free_envelope() when envelope stay unneeded.
*/
LIST *last = NULL;
char *line = mem_malloc (LONG_STRING);
char *p;
- long loc;
+ off_t loc;
int matched;
size_t linelen = LONG_STRING;
char buf[LONG_STRING + 1];
}
}
- while ((loc = ftell (f)),
+ while ((loc = ftello (f)),
*(line = mutt_read_rfc822_line (f, line, &linelen)) != 0) {
matched = 0;
continue;
}
- fseek (f, loc, 0);
+ fseeko (f, loc, 0);
break; /* end of header */
}
if (hdr) {
hdr->content->hdr_offset = hdr->offset;
- hdr->content->offset = ftell (f);
+ hdr->content->offset = ftello (f);
rfc2047_decode_envelope (e);
/* check for missing or invalid date */
if (hdr->date_sent <= 0) {
int count_body_parts_check(LIST **checklist, BODY *b, int dflt) {
LIST *type;
ATTACH_MATCH *a;
-
+
/* If list is null, use default behavior. */
if (! *checklist) {
/*return dflt;*/
return 0;
}
-
+
for (type = *checklist; type; type = type->next) {
a = (ATTACH_MATCH *)type->data;
debug_print(5, ("cbpc: %s %d/%s ?? %s/%s [%d]... ",
#define AT_COUNT(why) { shallcount = 1; }
#define AT_NOCOUNT(why) { shallcount = 0; }
-int count_body_parts (BODY *body, int flags) {
+int count_body_parts (BODY *body, int flags) {
int count = 0;
int shallcount, shallrecurse;
BODY *bp;
-
+
if (body == NULL)
return 0;
-
+
for (bp = body; bp != NULL; bp = bp->next) {
/* Initial disposition is to count and not to recurse this part. */
AT_COUNT("default");
shallrecurse = 0;
-
+
debug_print(5, ("bp: desc=\"%s\"; fn=\"%s\", type=\"%d/%s\"\n",
bp->description ? bp->description : ("none"),
bp->filename ? bp->filename :
bp->d_filename ? bp->d_filename : "(none)",
bp->type, bp->subtype ? bp->subtype : "*"));
-
+
if (bp->type == TYPEMESSAGE) {
shallrecurse = 1;
-
+
/* If it's an external body pointer, don't recurse it. */
if (!ascii_strcasecmp (bp->subtype, "external-body"))
shallrecurse = 0;
-
+
/* Don't count containers if they're top-level. */
if (flags & M_PARTS_TOPLEVEL)
AT_NOCOUNT("top-level message/*");
shallrecurse = 1;
if (!str_casecmp(bp->subtype, "alternative"))
shallrecurse = 0;
-
+
/* Don't count containers if they're top-level. */
if (flags & M_PARTS_TOPLEVEL)
AT_NOCOUNT("top-level multipart");
}
-
+
if (bp->disposition == DISPINLINE &&
bp->type != TYPEMULTIPART && bp->type != TYPEMESSAGE && bp == body)
AT_NOCOUNT("ignore fundamental inlines");
-
+
/* If this body isn't scheduled for enumeration already, don't bother
* profiling it further. */
-
+
if (shallcount) {
/* Turn off shallcount if message type is not in ok list,
* or if it is in except list. Check is done separately for
AT_NOCOUNT("excluded");
}
}
-
+
if (shallcount)
count++;
bp->attach_qualifies = shallcount ? 1 : 0;
-
- debug_print(5, ("cbp: %08x shallcount = %d\n", (unsigned int)bp, shallcount));
-
+
+ debug_print(5, ("cbp: %p shallcount = %d\n", bp, shallcount));
+
if (shallrecurse) {
- debug_print(5, ("cbp: %08x pre count = %d\n", (unsigned int)bp, count));
+ debug_print(5, ("cbp: %p pre count = %d\n", bp, count));
bp->attach_count = count_body_parts(bp->parts, flags & ~M_PARTS_TOPLEVEL);
count += bp->attach_count;
- debug_print(5, ("cbp: %08x post count = %d\n", (unsigned int)bp, count));
+ debug_print(5, ("cbp: %p post count = %d\n", bp, count));
}
}
-
+
debug_print(5, ("bp: return %d\n", count < 0 ? 0 : count));
return count < 0 ? 0 : count;
}
int mutt_count_body_parts (HEADER *hdr, int flags) {
+ if (!option (OPTCOUNTATTACH))
+ return (0);
if (hdr->attach_valid && !(flags & M_PARTS_RECOUNT))
return hdr->attach_total;
-
+
if (AttachAllow || AttachExclude || InlineAllow || InlineExclude)
hdr->attach_total = count_body_parts(hdr->content, flags | M_PARTS_TOPLEVEL);
else
hdr->attach_total = 0;
-
+
hdr->attach_valid = 1;
return hdr->attach_total;
}