Lines 40-46
Link Here
|
40 |
#include <fnmatch.h> |
40 |
#include <fnmatch.h> |
41 |
|
41 |
|
42 |
#define LIB_MAJOR_VERSION 1 |
42 |
#define LIB_MAJOR_VERSION 1 |
43 |
#define LIB_MAX_MINOR_VERSION 1 |
43 |
/* FIXME: since mime-cache 1.2, weight is splitted into three parts |
|
|
44 |
* only lower 8 bit contains weight, and higher bits are flags and case-sensitivity. |
45 |
* anyway, since we don't support weight at all, it'll be fixed later. |
46 |
* We claimed that we support 1.2 to cheat pcmanfm as a temporary quick dirty fix |
47 |
* for the broken file manager, but this should be correctly done in the future. |
48 |
* Weight and case-sensitivity are not handled now. */ |
49 |
#define LIB_MAX_MINOR_VERSION 2 |
44 |
#define LIB_MIN_MINOR_VERSION 0 |
50 |
#define LIB_MIN_MINOR_VERSION 0 |
45 |
|
51 |
|
46 |
/* handle byte order here */ |
52 |
/* handle byte order here */ |
Lines 57-63
Link Here
|
57 |
#define GLOB_LIST 20 |
63 |
#define GLOB_LIST 20 |
58 |
#define MAGIC_LIST 24 |
64 |
#define MAGIC_LIST 24 |
59 |
#define NAMESPACE_LIST 28 |
65 |
#define NAMESPACE_LIST 28 |
60 |
#define HEADER_SIZE 32 |
|
|
61 |
|
66 |
|
62 |
MimeCache* mime_cache_new( const char* file_path ) |
67 |
MimeCache* mime_cache_new( const char* file_path ) |
63 |
{ |
68 |
{ |
Lines 111-117
Link Here
|
111 |
if ( fd < 0 ) |
116 |
if ( fd < 0 ) |
112 |
return FALSE; |
117 |
return FALSE; |
113 |
|
118 |
|
114 |
if( fstat ( fd, &statbuf ) < 0 || statbuf.st_size < HEADER_SIZE ) |
119 |
if( fstat ( fd, &statbuf ) < 0 ) |
115 |
{ |
120 |
{ |
116 |
close( fd ); |
121 |
close( fd ); |
117 |
return FALSE; |
122 |
return FALSE; |
Lines 346-352
Link Here
|
346 |
const char* node =nodes + i * 12; |
351 |
const char* node =nodes + i * 12; |
347 |
guint32 ch = VAL32(node, 0); |
352 |
guint32 ch = VAL32(node, 0); |
348 |
_suffix_pos = suffix; |
353 |
_suffix_pos = suffix; |
349 |
|
|
|
350 |
if( G_LIKELY( ch ) ) |
354 |
if( G_LIKELY( ch ) ) |
351 |
{ |
355 |
{ |
352 |
if( ch == uchar ) |
356 |
if( ch == uchar ) |
Lines 391-404
Link Here
|
391 |
|
395 |
|
392 |
if( G_UNLIKELY( ! filename || ! *filename || 0 == n ) ) |
396 |
if( G_UNLIKELY( ! filename || ! *filename || 0 == n ) ) |
393 |
return NULL; |
397 |
return NULL; |
394 |
|
|
|
395 |
if( cache->has_reverse_suffix ) /* since mime.cache ver: 1.1 */ |
398 |
if( cache->has_reverse_suffix ) /* since mime.cache ver: 1.1 */ |
396 |
{ |
399 |
{ |
397 |
const char *suffix, *leaf_node, *_suffix_pos = (const char*)-1; |
400 |
const char *suffix, *leaf_node, *_suffix_pos = (const char*)-1; |
398 |
fn_len = strlen( filename ); |
401 |
fn_len = strlen( filename ); |
399 |
suffix = g_utf8_find_prev_char( filename, filename + fn_len ); |
402 |
suffix = g_utf8_find_prev_char( filename, filename + fn_len ); |
400 |
leaf_node = lookup_reverse_suffix_nodes( cache->buffer, root, n, filename, suffix, &_suffix_pos ); |
403 |
leaf_node = lookup_reverse_suffix_nodes( cache->buffer, root, n, filename, suffix, &_suffix_pos ); |
401 |
|
|
|
402 |
if( leaf_node ) |
404 |
if( leaf_node ) |
403 |
{ |
405 |
{ |
404 |
mime_type = cache->buffer + VAL32( leaf_node, 4 ); |
406 |
mime_type = cache->buffer + VAL32( leaf_node, 4 ); |