int blaze822_multipart(struct message *msg, struct message **imsg) { char *s = blaze822_hdr(msg, "content-type"); if (!s) return 0; while (*s && *s != ';') s++; if (!*s) return 0; char *boundary, *boundaryend; if (!blaze822_mime_parameter(s, "boundary", &boundary, &boundaryend)) return 0; char mboundary[256]; size_t boundarylen = boundaryend-boundary+2; if (boundarylen >= 256) return 0; mboundary[0] = '-'; mboundary[1] = '-'; memcpy(mboundary+2, boundary, boundarylen-2); mboundary[boundarylen] = 0; char *prevpart; if (*imsg) prevpart = (*imsg)->bodyend; else prevpart = msg->body; char *part = mymemmem(prevpart, msg->bodyend - prevpart, mboundary, boundarylen); if (!part) return 0; part += boundarylen; if (*part == '\r') part++; if (*part == '\n') part++; else if (*part == '-' && part < msg->bodyend && *(part+1) == '-') return 0; else return 0; // XXX error condition? char *nextpart = mymemmem(part, msg->bodyend - part, mboundary, boundarylen); if (!nextpart) return 0; // XXX error condition if (nextpart == part) // invalid empty MIME part return 0; // XXX error condition if (*(nextpart-1) == '\n') nextpart--; if (*(nextpart-1) == '\r') nextpart--; *imsg = blaze822_mem(part, nextpart-part); return 1; }
void search_forward(void) { char *p, *string, tmp[BLOCK_SEARCH_SIZE], tmpstr[BLOCK_SEARCH_SIZE]; int quit, sizea, sizeb; INT blockstart; if (!searchA(&string, &sizea, tmp, sizeof(tmp))) return; quit = -1; blockstart = base + cursor - BLOCK_SEARCH_SIZE + sizea; do { blockstart += BLOCK_SEARCH_SIZE - sizea + 1; if (LSEEK_(fd, blockstart) == -1) { quit = -3; break; } if ((sizeb = read(fd, tmp, BLOCK_SEARCH_SIZE)) < sizea) quit = -3; else if (getch() != ERR) quit = -2; else if ((p = mymemmem(tmp, sizeb, string, sizea))) quit = p - tmp; sprintf(tmpstr,"searching... 0x%08llX", (long long) blockstart); nodelay(stdscr, TRUE); displayTwoLineMessage(tmpstr, "(press any key to cancel)"); } while (quit == -1); searchB(quit + (quit >= 0 ? blockstart : 0), string); }
long ch$find_sub(int cn, char * cptr, int pn, char * pptr) { return mymemmem(cptr, pptr, cn, pn); }