コード例 #1
0
ファイル: analyze.c プロジェクト: daftano/catdoc
/********************************************************************* 
 * Determines format of input file and calls parse_word_header or 
 * process_file if
 * it is word processor file or copy_out if it is plain text file
 * return not 0 when error
 ********************************************************************/ 
int analyze_format(FILE *f) {
	unsigned char buffer[129];
	long offset=0;
	FILE *new_file, *ole_file;
	int ret_code=69;

	if (!signature_check) {
		/* forced parsing */
		/* no autodetect possible. Assume 8-bit if not overriden on
		 * command line */ 
		if (!get_unicode_char) 
			get_unicode_char=get_8bit_char;
		return process_file(f,LONG_MAX);
	}
	catdoc_read(buffer,4,1,f);
	buffer[4]=0;
	if (strncmp((char *)&buffer,write_sign,2)==0) {
		printf("[Windows Write file. Some garbage expected]\n");
		get_unicode_char=get_8bit_char;
		return process_file(f,LONG_MAX);
	} else if (strncmp((char *)&buffer,rtf_sign,4)==0) {
		return parse_rtf(f);
	} else if (strncmp((char *)&buffer, zip_sign,4) == 0) {
		fprintf(stderr,"This file looks like ZIP archive or Office 2007 "
		"or later file.\nNot supported by catdoc\n");
		exit(1);
	} else if (strncmp((char *)&buffer,old_word_sign,2)==0) {
	   fread(buffer+4,1,124,f);	
	   return parse_word_header(buffer,f,128,0);
	}	
	fread(buffer+4,1,4,f);
	if (strncmp((char *)&buffer,ole_sign,8)==0) {
		if ((new_file=ole_init(f, buffer, 8)) != NULL) {
			set_ole_func();
			while((ole_file=ole_readdir(new_file)) != NULL) {
				int res=ole_open(ole_file);
				if (res >= 0) {
					if (strcmp(((oleEntry*)ole_file)->name , "WordDocument") == 0) {
						offset=catdoc_read(buffer, 1, 128, ole_file);
						ret_code=parse_word_header(buffer,ole_file,-offset,offset);
					}
				} 
				ole_close(ole_file);
			}
			set_std_func();
			ole_finish();
		} else {
			fprintf(stderr,"Broken OLE file. Try using -b switch\n");
			exit(1);
		}	
	} else {

		copy_out(f,(char *)&buffer);
		return 0;
	}
	
	return ret_code;
}   
コード例 #2
0
ファイル: pagetable.c プロジェクト: KGG814/AOS
void copy_out_cb (int pid, seL4_CPtr reply_cap, void *args, int err) {
    if (SOS_DEBUG) printf("copy_out_cb\n");
    copy_out_args *copy_args = args;
    int to_copy = copy_args->nbyte - copy_args->count;
    if ((copy_args->usr_ptr & ~PAGE_MASK) + to_copy > PAGE_SIZE) {
        to_copy = PAGE_SIZE - (copy_args->usr_ptr & ~PAGE_MASK);
    }
    copy_args->count += to_copy;
    copy_out(pid, reply_cap, args, err);
    if (SOS_DEBUG) printf("copy_out_cb ended\n");
}
コード例 #3
0
ファイル: mdx_hash.cpp プロジェクト: fxdupont/botan
/*
* Finalize a hash
*/
void MDx_HashFunction::final_result(uint8_t output[])
   {
   m_buffer[m_position] = (BIG_BIT_ENDIAN ? 0x80 : 0x01);
   for(size_t i = m_position+1; i != m_buffer.size(); ++i)
      m_buffer[i] = 0;

   if(m_position >= m_buffer.size() - COUNT_SIZE)
      {
      compress_n(m_buffer.data(), 1);
      zeroise(m_buffer);
      }

   write_count(&m_buffer[m_buffer.size() - COUNT_SIZE]);

   compress_n(m_buffer.data(), 1);
   copy_out(output);
   clear();
   }
コード例 #4
0
ファイル: checkout.c プロジェクト: kevinwang/troll
int cmd_checkout(int argc, const char *argv[]) {
    new_index((char *)(argv[1]));
    copy_out();
    return 0;
}