コード例 #1
0
ファイル: rfc2045.c プロジェクト: Duncaen/mblaze
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;
}
コード例 #2
0
ファイル: search.c プロジェクト: 0xbad0c0d3/hexedit
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);
}
コード例 #3
0
ファイル: libbli.c プロジェクト: rroart/bliss
long ch$find_sub(int cn, char * cptr, int pn, char * pptr) {
  return mymemmem(cptr, pptr, cn, pn);
}