34#define FT_COMPONENT raccess
57 unsigned char head[16], head2[16];
58 FT_Long map_pos, map_len, rdata_len;
59 int allzeros, allmatch,
i;
74 if (
head[0] >= 0x80 ||
78 return FT_THROW( Unknown_File_Format );
80 *rdata_pos = (
head[ 0] << 24 ) |
84 map_pos = (
head[ 4] << 24 ) |
88 rdata_len = (
head[ 8] << 24 ) |
92 map_len = (
head[12] << 24 ) |
99 return FT_THROW( Unknown_File_Format );
102 if ( *rdata_pos < map_pos )
104 if ( *rdata_pos > map_pos - rdata_len )
105 return FT_THROW( Unknown_File_Format );
109 if ( map_pos > *rdata_pos - map_len )
110 return FT_THROW( Unknown_File_Format );
117 FT_LONG_MAX - ( *rdata_pos + rdata_len ) < rfork_offset ||
118 FT_LONG_MAX - ( map_pos + map_len ) < rfork_offset ||
122 return FT_THROW( Unknown_File_Format );
124 *rdata_pos += rfork_offset;
125 map_pos += rfork_offset;
139 for (
i = 0;
i < 16;
i++ )
143 if ( head2[
i] !=
head[
i] )
146 if ( !allzeros && !allmatch )
147 return FT_THROW( Unknown_File_Format );
159 return FT_THROW( Unknown_File_Format );
165 *map_offset = map_pos + type_list;
174 if (
a->res_id <
b->res_id )
176 else if (
a->res_id >
b->res_id )
194 int i,
j,
cnt, subcnt;
230 for (
i = 0;
i <
cnt;
i++ )
238 (
char)( 0xFF & ( tag_internal >> 24 ) ),
239 (
char)( 0xFF & ( tag_internal >> 16 ) ),
240 (
char)( 0xFF & ( tag_internal >> 8 ) ),
241 (
char)( 0xFF & ( tag_internal >> 0 ) ) ));
242 FT_TRACE3((
" : subcount=%d, suboffset=0x%04lx\n",
245 if ( tag_internal ==
tag )
252 if ( *count < 1 || *count > 2727 )
288 " resource_id=0x%04x, offset=0x%08lx\n",
292 if ( sort_by_res_id )
297 (
int(*)(
const void*,
300 FT_TRACE3((
" -- sort resources by their ids --\n" ));
304 " resource_id=0x%04x, offset=0x%08lx\n",
327 return FT_THROW( Cannot_Open_Resource );
331#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
350 char *base_file_name,
351 char **result_file_name,
357 char *base_file_name,
358 char **result_file_name,
364 char *base_file_name,
365 char **result_file_name,
371 char *base_file_name,
372 char **result_file_name,
378 char *base_file_name,
379 char **result_file_name,
385 char *base_file_name,
386 char **result_file_name,
392 char *base_file_name,
393 char **result_file_name,
399 char *base_file_name,
400 char **result_file_name,
406 char *base_file_name,
407 char **result_file_name,
411 CONST_FT_RFORK_RULE_ARRAY_BEGIN(ft_raccess_guess_table,
412 ft_raccess_guess_rec)
413 CONST_FT_RFORK_RULE_ARRAY_ENTRY(apple_double, apple_double)
414 CONST_FT_RFORK_RULE_ARRAY_ENTRY(apple_single, apple_single)
415 CONST_FT_RFORK_RULE_ARRAY_ENTRY(darwin_ufs_export, darwin_ufs_export)
416 CONST_FT_RFORK_RULE_ARRAY_ENTRY(darwin_newvfs, darwin_newvfs)
417 CONST_FT_RFORK_RULE_ARRAY_ENTRY(darwin_hfsplus, darwin_hfsplus)
418 CONST_FT_RFORK_RULE_ARRAY_ENTRY(vfat, vfat)
419 CONST_FT_RFORK_RULE_ARRAY_ENTRY(linux_cap, linux_cap)
420 CONST_FT_RFORK_RULE_ARRAY_ENTRY(linux_double, linux_double)
421 CONST_FT_RFORK_RULE_ARRAY_ENTRY(linux_netatalk, linux_netatalk)
422 CONST_FT_RFORK_RULE_ARRAY_END
434 char *base_file_name,
445 const char *original_name,
446 const char *insertion );
470 errors[
i] = ft_raccess_guess_table[
i].func(
library,
480#if defined( FT_CONFIG_OPTION_MAC_FONTS ) && !defined( FT_MACINTOSH )
488 return FT_RFork_Rule_invalid;
490 return ft_raccess_guess_table[rule_index].type;
501 switch( raccess_get_rule_type_from_rule_index(
library, rule_index ) )
503 case FT_RFork_Rule_darwin_newvfs:
504 case FT_RFork_Rule_darwin_hfsplus:
517 char *base_file_name,
518 char **result_file_name,
521 FT_Int32 magic = ( 0x00 << 24 ) |
527 *result_file_name =
NULL;
529 return FT_THROW( Cannot_Open_Stream );
531 return raccess_guess_apple_generic(
library,
stream, base_file_name,
532 magic, result_offset );
539 char *base_file_name,
540 char **result_file_name,
543 FT_Int32 magic = ( 0x00 << 24 ) |
549 *result_file_name =
NULL;
551 return FT_THROW( Cannot_Open_Stream );
553 return raccess_guess_apple_generic(
library,
stream, base_file_name,
554 magic, result_offset );
561 char *base_file_name,
562 char **result_file_name,
573 newpath = raccess_make_file_name(
memory, base_file_name,
"._" );
577 error = raccess_guess_linux_double_from_file_name(
library, newpath,
580 *result_file_name = newpath;
591 char *base_file_name,
592 char **result_file_name,
599 char* newpath =
NULL;
611 if (
FT_ALLOC( newpath, base_file_len + 6 ) )
614 FT_MEM_COPY( newpath, base_file_name, base_file_len );
615 FT_MEM_COPY( newpath + base_file_len,
"/rsrc", 6 );
617 *result_file_name = newpath;
627 char *base_file_name,
628 char **result_file_name,
635 char* newpath =
NULL;
647 if (
FT_ALLOC( newpath, base_file_len + 18 ) )
650 FT_MEM_COPY( newpath, base_file_name, base_file_len );
651 FT_MEM_COPY( newpath + base_file_len,
"/..namedfork/rsrc", 18 );
653 *result_file_name = newpath;
663 char *base_file_name,
664 char **result_file_name,
675 newpath = raccess_make_file_name(
memory, base_file_name,
680 *result_file_name = newpath;
690 char *base_file_name,
691 char **result_file_name,
702 newpath = raccess_make_file_name(
memory, base_file_name,
".resource/" );
706 *result_file_name = newpath;
716 char *base_file_name,
717 char **result_file_name,
729 newpath = raccess_make_file_name(
memory, base_file_name,
"%" );
733 error = raccess_guess_linux_double_from_file_name(
library, newpath,
736 *result_file_name = newpath;
747 char *base_file_name,
748 char **result_file_name,
760 newpath = raccess_make_file_name(
memory, base_file_name,
765 error = raccess_guess_linux_double_from_file_name(
library, newpath,
768 *result_file_name = newpath;
779 char *base_file_name,
783 FT_Int32 magic_from_stream;
785 FT_Int32 version_number = 0;
789 FT_Int32 entry_id, entry_offset, entry_length = 0;
791 const FT_Int32 resource_fork_entry_id = 0x2;
801 if ( magic_from_stream != magic )
802 return FT_THROW( Unknown_File_Format );
814 if ( n_of_entries == 0 )
815 return FT_THROW( Unknown_File_Format );
817 for (
i = 0;
i < n_of_entries;
i++ )
821 if ( entry_id == resource_fork_entry_id )
826 *result_offset = entry_offset;
838 return FT_THROW( Unknown_File_Format );
860 &nouse, result_offset );
870 const char *original_name,
871 const char *insertion )
873 char* new_name =
NULL;
883 if (
FT_ALLOC( new_name, new_length + 1 ) )
891 (
size_t)( tmp - original_name + 1 ) );
892 new_name[tmp - original_name + 1] =
'\0';
897 slash = original_name;
934 errors[
i] =
FT_ERR( Unimplemented_Feature );
struct outqueuenode * head
#define FT_TRACE3(varformat)
#define FT_TRACE2(varformat)
#define FT_NEW_ARRAY(ptr, count)
#define FT_ALLOC(ptr, size)
#define FT_MEM_COPY(dest, source, count)
FT_Raccess_Guess(FT_Library library, FT_Stream stream, char *base_name, char **new_names, FT_Long *offsets, FT_Error *errors)
FT_Raccess_Get_HeaderInfo(FT_Library library, FT_Stream stream, FT_Long rfork_offset, FT_Long *map_offset, FT_Long *rdata_pos)
FT_Raccess_Get_DataOffsets(FT_Library library, FT_Stream stream, FT_Long map_offset, FT_Long rdata_pos, FT_Long tag, FT_Bool sort_by_res_id, FT_Long **offsets, FT_Long *count)
static int ft_raccess_sort_ref_by_id(FT_RFork_Ref *a, FT_RFork_Ref *b)
#define FT_RACCESS_N_RULES
#define FT_READ_USHORT(var)
#define FT_READ_LONG(var)
#define FT_STREAM_SKIP(distance)
FT_Stream_New(FT_Library library, const FT_Open_Args *args, FT_Stream *astream)
FT_Stream_Read(FT_Stream stream, FT_Byte *buffer, FT_ULong count)
FT_Stream_Free(FT_Stream stream, FT_Int external)
FT_Stream_Seek(FT_Stream stream, FT_ULong pos)
#define FT_READ_SHORT(var)
FT_Stream_Skip(FT_Stream stream, FT_Long distance)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
FT_BEGIN_HEADER typedef unsigned char FT_Bool
static const FxOffsetAndName offsets[]
GLuint GLuint GLsizei count
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
static char memory[1024 *256]