⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftrfork.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 2 页
字号:
                                        magic, result_offset );  }  static FT_Error  raccess_guess_apple_single( FT_Library  library,                              FT_Stream   stream,                              char *      base_file_name,                              char      **result_file_name,                              FT_Long    *result_offset )  {    FT_Int32  magic = (0x00 << 24 | 0x05 << 16 | 0x16 << 8 | 0x00);    *result_file_name = NULL;    return raccess_guess_apple_generic( library, stream, base_file_name,                                        magic, result_offset );  }  static FT_Error  raccess_guess_darwin_ufs_export( FT_Library  library,                                   FT_Stream   stream,                                   char *      base_file_name,                                   char      **result_file_name,                                   FT_Long    *result_offset )  {    char*      newpath;    FT_Error   error;    FT_Memory  memory;    FT_UNUSED( stream );    memory  = library->memory;    newpath = raccess_make_file_name( memory, base_file_name, "._" );    if ( !newpath )      return FT_Err_Out_Of_Memory;    error = raccess_guess_linux_double_from_file_name( library, newpath,                                                       result_offset );    if ( !error )      *result_file_name = newpath;    else      FT_FREE( newpath );    return error;  }  static FT_Error  raccess_guess_darwin_hfsplus( FT_Library  library,                                FT_Stream   stream,                                char *      base_file_name,                                char      **result_file_name,                                FT_Long    *result_offset )  {    /*      Only meaningful on systems with hfs+ drivers (or Macs).     */    FT_Error   error;    char*      newpath;    FT_Memory  memory;    FT_Long    base_file_len = ft_strlen( base_file_name );    FT_UNUSED( stream );    memory = library->memory;    if ( base_file_len > FT_INT_MAX )      return FT_Err_Array_Too_Large;    if ( FT_ALLOC( newpath, base_file_len + 6 ) )      return error;    FT_MEM_COPY( newpath, base_file_name, base_file_len );    FT_MEM_COPY( newpath + base_file_len, "/rsrc", 6 );    *result_file_name = newpath;    *result_offset    = 0;    return FT_Err_Ok;  }  static FT_Error  raccess_guess_vfat( FT_Library  library,                      FT_Stream   stream,                      char *      base_file_name,                      char      **result_file_name,                      FT_Long    *result_offset )  {    char*      newpath;    FT_Memory  memory;    FT_UNUSED( stream );    memory = library->memory;    newpath = raccess_make_file_name( memory, base_file_name,                                      "resource.frk/" );    if ( !newpath )      return FT_Err_Out_Of_Memory;    *result_file_name = newpath;    *result_offset    = 0;    return FT_Err_Ok;  }  static FT_Error  raccess_guess_linux_cap( FT_Library  library,                           FT_Stream   stream,                           char *      base_file_name,                           char      **result_file_name,                           FT_Long    *result_offset )  {    char*      newpath;    FT_Memory  memory;    FT_UNUSED( stream );    memory = library->memory;    newpath = raccess_make_file_name( memory, base_file_name, ".resource/" );    if ( !newpath )      return FT_Err_Out_Of_Memory;    *result_file_name = newpath;    *result_offset    = 0;    return FT_Err_Ok;  }  static FT_Error  raccess_guess_linux_double( FT_Library  library,                              FT_Stream   stream,                              char *      base_file_name,                              char      **result_file_name,                              FT_Long    *result_offset )  {    char*      newpath;    FT_Error   error;    FT_Memory  memory;    FT_UNUSED( stream );    memory = library->memory;    newpath = raccess_make_file_name( memory, base_file_name, "%" );    if ( !newpath )      return FT_Err_Out_Of_Memory;    error = raccess_guess_linux_double_from_file_name( library, newpath,                                                       result_offset );    if ( !error )      *result_file_name = newpath;    else      FT_FREE( newpath );    return error;  }  static FT_Error  raccess_guess_linux_netatalk( FT_Library  library,                                FT_Stream   stream,                                char *      base_file_name,                                char      **result_file_name,                                FT_Long    *result_offset )  {    char*      newpath;    FT_Error   error;    FT_Memory  memory;    FT_UNUSED( stream );    memory = library->memory;    newpath = raccess_make_file_name( memory, base_file_name,                                      ".AppleDouble/" );    if ( !newpath )      return FT_Err_Out_Of_Memory;    error = raccess_guess_linux_double_from_file_name( library, newpath,                                                       result_offset );    if ( !error )      *result_file_name = newpath;    else      FT_FREE( newpath );    return error;  }  static FT_Error  raccess_guess_apple_generic( FT_Library  library,                               FT_Stream   stream,                               char *      base_file_name,                               FT_Int32    magic,                               FT_Long    *result_offset )  {    FT_Int32   magic_from_stream;    FT_Error   error;    FT_Int32   version_number = 0;    FT_UShort  n_of_entries;    int        i;    FT_UInt32  entry_id, entry_offset, entry_length = 0;    const FT_UInt32  resource_fork_entry_id = 0x2;    FT_UNUSED( library );    FT_UNUSED( base_file_name );    FT_UNUSED( version_number );    FT_UNUSED( entry_length   );    if ( FT_READ_LONG( magic_from_stream ) )      return error;    if ( magic_from_stream != magic )      return FT_Err_Unknown_File_Format;    if ( FT_READ_LONG( version_number ) )      return error;    /* filler */    error = FT_Stream_Skip( stream, 16 );    if ( error )      return error;    if ( FT_READ_USHORT( n_of_entries ) )      return error;    if ( n_of_entries == 0 )      return FT_Err_Unknown_File_Format;    for ( i = 0; i < n_of_entries; i++ )    {      if ( FT_READ_LONG( entry_id ) )        return error;      if ( entry_id == resource_fork_entry_id )      {        if ( FT_READ_LONG( entry_offset ) ||             FT_READ_LONG( entry_length ) )          continue;        *result_offset = entry_offset;        return FT_Err_Ok;      }      else        FT_Stream_Skip( stream, 4 + 4 );    /* offset + length */      }    return FT_Err_Unknown_File_Format;  }  static FT_Error  raccess_guess_linux_double_from_file_name( FT_Library  library,                                             char *      file_name,                                             FT_Long    *result_offset )  {    FT_Open_Args  args2;    FT_Stream     stream2;    char *        nouse = NULL;    FT_Error      error;    args2.flags    = FT_OPEN_PATHNAME;    args2.pathname = file_name;    error = FT_Stream_New( library, &args2, &stream2 );    if ( error )      return error;    error = raccess_guess_apple_double( library, stream2, file_name,                                        &nouse, result_offset );    FT_Stream_Free( stream2, 0 );    return error;  }  static char*  raccess_make_file_name( FT_Memory    memory,                          const char  *original_name,                          const char  *insertion )  {    char*        new_name;    char*        tmp;    const char*  slash;    unsigned     new_length;    FT_Error     error = FT_Err_Ok;    FT_UNUSED( error );    new_length = ft_strlen( original_name ) + ft_strlen( insertion );    if ( FT_ALLOC( new_name, new_length + 1 ) )      return NULL;    tmp = ft_strrchr( original_name, '/' );    if ( tmp )    {      ft_strncpy( new_name, original_name, tmp - original_name + 1 );      new_name[tmp - original_name + 1] = '\0';      slash = tmp + 1;    }    else    {      slash       = original_name;      new_name[0] = '\0';    }    ft_strcat( new_name, insertion );    ft_strcat( new_name, slash );    return new_name;  }#else   /* !FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */  /*************************************************************************/  /*                  Dummy function; just sets errors                     */  /*************************************************************************/  FT_BASE_DEF( void )  FT_Raccess_Guess( FT_Library  library,                    FT_Stream   stream,                    char*       base_name,                    char      **new_names,                    FT_Long    *offsets,                    FT_Error   *errors )  {    int  i;    FT_UNUSED( library );    FT_UNUSED( stream );    FT_UNUSED( base_name );    for ( i = 0; i < FT_RACCESS_N_RULES; i++ )    {      new_names[i] = NULL;      offsets[i]   = 0;      errors[i]    = FT_Err_Unimplemented_Feature;    }  }#endif  /* !FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK *//* END */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -