else if (data->file_buffer_name)
else if (data->file_buffer_spec)
MimePartBufferRead (MimePartBufferData *data,					int (*read_fn) (char *buf, PRInt32 size, void *closure),					void *closure){  int status = 0;  NS_ASSERTION(data, "no data");  if (!data) return -1;  if (data->part_buffer)	{	  /* Read it out of memory.	   */	  NS_ASSERTION(!data->file_buffer_name && !data->file_stream, "no file_buffer_name or file_stream");	  status = read_fn(data->part_buffer, data->part_buffer_fp, closure);	}  else if (data->file_buffer_name)	{	  /* Read it off disk.	   */	  char *buf;	  PRInt32 buf_size = DISK_BUFFER_SIZE;	  NS_ASSERTION(data->part_buffer_size == 0 && data->part_buffer_fp == 0, "buffer size is not null");	  NS_ASSERTION(!data->file_stream, "have a filestream when we shouldn't");	  NS_ASSERTION(data->file_buffer_name, "no file buffer name");	  if (!data->file_buffer_name) return -1;	  buf = (char *) PR_MALLOC(buf_size);	  if (!buf) return MIME_OUT_OF_MEMORY;	  if (data->file_stream)		PR_Close(data->file_stream);	  data->file_stream = PR_Open(data->file_buffer_name, PR_RDONLY, 0);	  if (!data->file_stream)		{		  PR_Free(buf);		  return MIME_UNABLE_TO_OPEN_TMP_FILE;		}	  while(1)		{		  PRInt32 rstatus = PR_Read(data->file_stream, buf, buf_size - 1);		  if (rstatus <= 0)			{			  status = rstatus;			  break;			}		  else			{			  /* It would be really nice to be able to yield here, and let				 some user events and other input sources get processed.				 Oh well. */			  status = read_fn (buf, rstatus, closure);			  if (status < 0) break;			}		}	  PR_Free(buf);	}  return 0;}