Commit Graph

911 Commits

Author SHA1 Message Date
Akira TAGOH 62b7d764ce Bump the cache version to 4 2013-02-06 19:14:51 +09:00
Akira TAGOH 4eab908c86 Update _FcMatchers definition logic
to make it easier to maintain. also added FC_HASH_OBJECT to be matched
in the pattern, prior to FC_FILE_OBJECT.
2013-02-06 19:02:07 +09:00
Akira TAGOH 95af7447db Bug 50733 - Add font-file hash?
Add "hash" object which contains SHA256 hash value (so far) computed from the font file.
2013-02-05 15:34:56 +09:00
Akira TAGOH da0946721a Use AM_MISSING_PROG instead of hardcoding missing 2013-02-04 17:57:00 +09:00
Akira TAGOH 20191810d1 Bug 23757 - Add mode="delete" to <edit>
Add two edit mode, "delete" and "delete_all".
what values are being deleted depends on <test> as documented.
if the target object is same to what is tested, matching value there
will be deleted. otherwise all of values in the object will be deleted.
so this would means both edit mode will not take any expressions.

e.g.

Given that the testing is always true here, the following rules:

  <match>
    <test name="foo" compare="eq">
      <string>bar</string>
    </test>
    <edit name="foo" mode="delete"/>
  </match>

will removes "bar" string from "foo" object. and:

  <match>
    <test name="foo" compare="eq">
      <string>foo</string>
    </test>
    <edit name="bar" mode="delete"/>
  </match>

will removes all of values in "bar" object.
2013-02-01 12:56:14 +09:00
Akira TAGOH d26fb23c41 Bug 59385 - Do the right thing for intermixed edit and test elements
This changes allows to have multiple mathcing rules in one <match> block
in the same order.
After this changes, the following thing will works as two matching rules:

	<match>
		<!-- rule 1 -->
		<test name="family" compare="eq">
			<string>foo</string>
		</test>
		<edit name="foo" mode="append">
			<string>foo</string>
		</edit>
		<!-- rule 2 -->
		<test name="foo" compare="eq">
			<string>foo</string>
		</test>
		<edit name="foo" mode="append">
			<string>bar</string>
		</edit>
	</match>
2013-01-31 19:55:21 +09:00
Akira TAGOH fb3b410998 remove the unnecessary code 2013-01-23 12:37:51 +09:00
Akira TAGOH 5400bb4fb4 Add another approach to FC_PRGNAME for Solaris 10 or before
Patch from Raimund Steger
2013-01-23 12:32:37 +09:00
Akira TAGOH 000ca9ccb0 Fix installation on MinGW32
Patch from LRN
2013-01-22 12:11:56 +09:00
Akira TAGOH 6363193a05 Fix mkstemp absence for some platform
Patch from LRN and modified to make more generic.
2013-01-22 12:11:02 +09:00
Akira TAGOH 9dbc282796 Add missing file descriptor to F_DUPFD_CLOEXEC
Patch from Matthieu Herrb
2013-01-22 10:26:41 +09:00
Behdad Esfahbod 6118781f7f Fix readlink failure
As reported by Raimund Steger.
2013-01-17 19:27:20 -06:00
Akira TAGOH 671bcb34e2 Better fix for 2fe5ddfd
Drop realpath() and fix breakage on Win32
2013-01-17 12:49:16 +09:00
Behdad Esfahbod 2fe5ddfdae Fix FC_PRGNAME default
As reported by Raimund Steger.
2013-01-16 21:01:28 -06:00
Behdad Esfahbod 55d39bcad0 Fix fc-cache crash caused by looking up NULL object incorrectly
We were returning a skiplist node when looking up NULL!
2013-01-16 07:31:15 -06:00
Behdad Esfahbod 106c4f7311 Minor 2013-01-16 07:05:07 -06:00
Akira TAGOH f9ac4c84c9 Improve FcGetPrgname() to work on BSD 2013-01-16 16:35:28 +09:00
Behdad Esfahbod ec5ca08c80 Bug 59379 - FC_PRGNAME
Can be used for per-application configuration.
2013-01-15 20:46:45 -06:00
Akira TAGOH 3f84695104 Bug 50497 - RFE: Add OpenType feature tags support
Add FC_FONT_FEATURES to store the feature tags to be enabled.
2013-01-15 19:40:26 -06:00
Akira TAGOH dffb69ed8c Fix the build fail on MinGW
Reported at http://lists.freedesktop.org/archives/fontconfig/2013-January/004601.html

just warn at the runtime instead of the compile time. it somewhat works
on even MinGW since FcMakeTempfile() isn't used on Win32 so far.
2013-01-15 17:27:12 +09:00
Behdad Esfahbod 8b8f0d2153 Minor 2013-01-14 14:39:12 -06:00
Behdad Esfahbod 8828fffd93 Copy all values from pattern to font if the font doesn't have the element
Bug 59376 - FcFontRenderPrepare enhancement
2013-01-14 14:36:38 -06:00
Behdad Esfahbod 98efed3bca Add atomic ops for Solaris
Patch from Raimund Steger.
2013-01-10 01:17:46 -06:00
Akira TAGOH 8e8a99ae8a Bug 29312 - RFE: feature to indicate which characters are missing to satisfy the language support
Add fc-validate to check the language coverage in a font.
2013-01-09 12:21:33 +09:00
Behdad Esfahbod dc21ed28d6 Fix memory corruption!
In FcStrListCreate() we were increasing reference count of set,
however, if set had a const reference (which is the case for list
of languages), and with multiple threads, the const ref (-1) was
getting up to 1 and then a decrease was destroying the set.  Ouch.

Here's the valgrind error, which took me quite a few hours of
running to catch:

==4464== Invalid read of size 4
==4464==    at 0x4E58FF3: FcStrListNext (fcstr.c:1256)
==4464==    by 0x4E3F11D: FcConfigSubstituteWithPat (fccfg.c:1508)
==4464==    by 0x4E3F8F4: FcConfigSubstitute (fccfg.c:1729)
==4464==    by 0x4009FA: test_match (simple-pthread-test.c:53)
==4464==    by 0x400A6E: run_test_in_thread (simple-pthread-test.c:68)
==4464==    by 0x507EE99: start_thread (pthread_create.c:308)
==4464==  Address 0x6bc0b44 is 4 bytes inside a block of size 24 free'd
==4464==    at 0x4C2A82E: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4464==    by 0x4E58F84: FcStrSetDestroy (fcstr.c:1236)
==4464==    by 0x4E3F0C6: FcConfigSubstituteWithPat (fccfg.c:1507)
==4464==    by 0x4E3F8F4: FcConfigSubstitute (fccfg.c:1729)
==4464==    by 0x4009FA: test_match (simple-pthread-test.c:53)
==4464==    by 0x400A6E: run_test_in_thread (simple-pthread-test.c:68)
==4464==    by 0x507EE99: start_thread (pthread_create.c:308)

Thread test is running happily now.  Will add the test in a moment.
2013-01-08 13:03:35 -06:00
Akira TAGOH 4e6c7d0827 Fix a build fail on mingw
Regarding the change of 596931c8b4
2013-01-08 16:20:40 +09:00
Akira TAGOH d837a7a584 missing header file to declare _mkdir 2013-01-08 16:18:32 +09:00
Akira TAGOH 596931c8b4 Bug 47705 - Using O_CLOEXEC 2013-01-08 15:34:09 +09:00
Akira TAGOH b6b678e71e Missing header file for _mkdir declaration 2013-01-04 11:29:50 +09:00
Behdad Esfahbod 8e143b4ec4 Minor 2013-01-03 04:19:12 -06:00
Behdad Esfahbod 86e3255118 Second try to make Sun CPP happy 2013-01-02 20:16:55 -06:00
Behdad Esfahbod 32c1d32cbd Work around Sun CPP
According to Raimund Steger:

> [...]
> diff --git a/src/Makefile.am b/src/Makefile.am
> index dc082b7..57c34a2 100644
> [...]
> +fcobjshash.gperf: fcobjshash.gperf.h fcobjs.h
> +    $(AM_V_GEN) $(CPP) -I$(top_srcdir) $< | $(GREP) '^[^#]' | awk ' \
> +    /CUT_OUT_BEGIN/ { no_write=1; next; }; \
> +    /CUT_OUT_END/ { no_write=0; next; }; \
> +    { if (!no_write) print; next; }; \
> +    ' - > $@.tmp && \
> +    mv -f $@.tmp $@

Sun Studio CPP seems to insert whitespace in a different way than GCC's CPP.

GCC generates in src/fcobjshash.gperf:

[...]
"family", FC_FAMILY_OBJECT
"familylang", FC_FAMILYLANG_OBJECT
[...]

Sun Studio generates:

[...]
 "family" , FC_FAMILY_OBJECT
 "familylang" , FC_FAMILYLANG_OBJECT
[...]

leading to:

[...]
Making all in src
gmake[2]: Entering directory `/home/rs/src/fontconfig-git/fontconfig/src'
  GEN    fcobjshash.gperf
  GEN    fcobjshash.h
Key link: " " = " ", with key set "".
1 input keys have identical hash values,
use option -D.
gmake[2]: *** [fcobjshash.h] Error 1
gmake[2]: Leaving directory `/home/rs/src/fontconfig-git/fontconfig/src'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/home/rs/src/fontconfig-git/fontconfig'
gmake: *** [all] Error 2

...maybe we could tuck in an additional sed to remove the whitespace, like:

[...]
fcobjshash.gperf: fcobjshash.gperf.h fcobjs.h
    $(AM_V_GEN) $(CPP) -I$(top_srcdir) $< | \
    $(SED) 's/^\s*//;s/\s*,\s*/,/;' | \
    $(GREP) '^[^#]' | \
    $(AWK) '/CUT_OUT_BEGIN/,/CUT_OUT_END/ { next; }; { print; };' \
    > $@.tmp && \
    mv -f $@.tmp $@
[...]

though I'm not sure what kind of guarantee CPP can give us/what easier option I might have missed...
2013-01-02 19:04:17 -06:00
Behdad Esfahbod b1510145e7 Fix build around true/false 2013-01-02 18:57:47 -06:00
Behdad Esfahbod 46ab96b8fa Fix more warnings.
Linux build and mingw32 cross build warning-free now.
2013-01-02 18:00:09 -06:00
Behdad Esfahbod ec8a40d238 Fix build and warnings on win32 2013-01-02 17:35:56 -06:00
Behdad Esfahbod 766bed901f Fix compiler warnings 2013-01-02 02:19:04 -06:00
Behdad Esfahbod 93fb1d4bab Remove FcSharedStr* 2013-01-02 02:18:02 -06:00
Behdad Esfahbod 6b14378107 Fixup fcobjs.c
Ouch!
2013-01-02 01:54:38 -06:00
Behdad Esfahbod 6047ce7b9f Warn about undefined/invalid attributes during config parsing 2013-01-02 01:31:34 -06:00
Behdad Esfahbod b604f10c0c Make fcobjs.c thread-safe
With this, the library should be threadsafe as far as my analysis goes!
2013-01-02 01:09:43 -06:00
Behdad Esfahbod 2ae07bbcd2 Make FcDirCacheDispose() threadsafe 2013-01-02 01:04:58 -06:00
Behdad Esfahbod 68b8ae9af8 Make cache hash threadsafe
This concludes my first pass at making fontconfig threadsafe.  Now to
testing and actually fixing it!
2013-01-02 01:04:47 -06:00
Behdad Esfahbod adb03b730d Make random-state initialization threadsafe 2013-01-02 01:04:03 -06:00
Behdad Esfahbod 91dd7d28ff Add a big cache lock
Not used yet.
2013-01-02 01:03:49 -06:00
Behdad Esfahbod 8d2bbb193a Make cache refcounting threadsafe 2013-01-02 01:03:22 -06:00
Behdad Esfahbod 31ee38e541 Minor 2013-01-02 01:03:18 -06:00
Behdad Esfahbod b8f238e49d Make FcCacheIsMmapSafe() threadsafe 2013-01-02 01:03:06 -06:00
Behdad Esfahbod b27a22aae9 Minor 2013-01-02 01:01:52 -06:00
Behdad Esfahbod 0552f26016 Make default-FcConfig threadsafe 2013-01-02 01:01:29 -06:00
Behdad Esfahbod e53f5da54f Minor 2013-01-02 00:58:52 -06:00
Behdad Esfahbod 7ae24b4554 Refactor; contain default config in fccfg.c 2013-01-02 00:58:31 -06:00
Behdad Esfahbod 32b0d88923 Make FcDefaultFini() threadsafe 2013-01-02 00:57:26 -06:00
Behdad Esfahbod 7019896c99 Make FcInitDebug() idempotent 2013-01-02 00:53:16 -06:00
Behdad Esfahbod b97ab0c949 Make FcGetDefaultLang and FcGetDefaultLangs thread-safe 2013-01-02 00:52:14 -06:00
Behdad Esfahbod 64af9e1917 Make refcounts, patterns, charsets, strings, and FcLang thread-safe 2013-01-02 00:51:00 -06:00
Behdad Esfahbod 814871b2aa Add thread-safety primitives 2013-01-02 00:38:36 -06:00
Behdad Esfahbod b53744383d Fix build stuff 2013-01-02 00:38:18 -06:00
Behdad Esfahbod db6d86a6c1 Remove shared-str pool
We used to have a shared-str pool.  Removed to make thread-safety
work easier.  My measurements show that the extra overhead is not
significant by any means.
2013-01-02 00:37:00 -06:00
Behdad Esfahbod ed41b23765 Switch .gitignore to git.mk 2013-01-02 00:36:12 -06:00
Behdad Esfahbod d58c31e6dc Use a static perfect hash table for object-name lookup
The hash table is generated by gperf.  For runtime element types, we use
a append-only linked list.

A bit clumsy, but I think I got it right.
2013-01-02 00:35:39 -06:00
Behdad Esfahbod 7c0f79c5fe Deprecate FcName(Un)RegisterObjectTypes / FcName(Un)RegisterConstants
These never worked as intended.  The problem is, if Fontconfig tries to
read config files when these new types / constants are not registered,
it errs.  As a result, no defined types / constants are usable from
config files.  Which makes these really useless.  Xft was the only user
of this API and even there it's not really used.  Just kill it.

One inch closer to thread-safety since we can fix the object-type hash
table at compile time.
2013-01-01 22:55:08 -06:00
Behdad Esfahbod a498f2f717 Minor 2013-01-01 20:27:54 -06:00
Behdad Esfahbod 8198127b25 Don't crash in FcPatternFormat() with NULL pattern 2013-01-01 20:20:31 -06:00
Behdad Esfahbod c9581b47c4 Don't crash in FcPatternDestroy with NULL pattern 2013-01-01 20:20:12 -06:00
Behdad Esfahbod e7d3e21632 Add NULL check 2013-01-01 20:19:57 -06:00
Behdad Esfahbod 5bb5da4c4a Refuse to set value to unsupported types during config too 2013-01-01 20:19:57 -06:00
Behdad Esfahbod 3878a12541 Make FC_DBG_OBJTYPES debug messages into warnings
And remove FC_DBG_OBJTYPES since it has no use now.
2013-01-01 20:19:53 -06:00
Behdad Esfahbod 209750a4e0 Warn if <name target="font"> appears in <match target="pattern"> 2012-12-31 20:11:12 -06:00
Behdad Esfahbod 31ce352bb3 Initialize matrix during name parsing
Before:
$ fc-match sans:matrix=2 -v | grep matrix
	matrix: [2 6.95183e-310; 0 0](s)

After:
$ fc-match sans:matrix=2 -v | grep matrix
	matrix: [2 0; 0 1](s)
2012-12-31 19:56:06 -06:00
Behdad Esfahbod b1630dc00e Enable fcarch assert checks even when FC_ARCHITECTURE is explicitly given
After all, if the asserts fail, the resulting library simply can't be
working correctly.
2012-12-31 17:20:29 -06:00
Behdad Esfahbod a603be89cd Unbreak build when FC_ARCHITECTURE is defined 2012-12-31 17:00:19 -06:00
Behdad Esfahbod 1fbb0b3b15 Don't warn if an unknown element is used in an expression
The type will be resolved at runtime...

For example, we can do this now without getting a warning:

<match target="font">
  <test name="scalable" compare="eq">
    <bool>false</bool>
  </test>
  <edit name="pixelsizefixupfactor" mode="assign">
    <divide>
      <name target="pattern">pixelsize</name>
      <name target="font"   >pixelsize</name>
    </divide>
  </edit>
  <edit name="matrix" mode="assign">
    <times>
      <name>matrix</name>
      <matrix>
        <name>pixelsizefixupfactor</name> <double>0</double>
        <double>0</double> <name>pixelsizefixupfactor</name>
       </matrix>
    </times>
  </edit>
  <edit name="size" mode="assign">
    <divide>
      <name>size</name>
      <name>pixelsizefixupfactor</name>
    </divide>
  </edit>
</match>

Previously the last edit was generating:

Fontconfig warning: "/home/behdad/.local/etc/fonts/conf.d/00-scale-bitmap-fonts.conf", line 29: saw unknown, expected number
2012-12-30 19:08:42 -06:00
Behdad Esfahbod 51b0044648 Allow target="font/pattern/default" in <name> elements
Based on idea from Raimund Steger.

For example, one can do something like this:

<match target="font">
  <test name="scalable" compare="eq">
    <bool>false</bool>
  </test>
  <edit name="pixelsizefixupfactor" mode="assign">
    <divide>
      <name target="pattern">pixelsize</name>
      <name target="font"   >pixelsize</name>
    </divide>
  </edit>
  <edit name="matrix" mode="assign">
    <times>
      <name>matrix</name>
      <matrix>
        <name>pixelsizefixupfactor</name> <double>0</double>
        <double>0</double> <name>pixelsizefixupfactor</name>
       </matrix>
    </times>
  </edit>
</match>

Part of work to make bitmap font scaling possible.  See thread
discussion:

http://lists.freedesktop.org/archives/fontconfig/2012-December/004498.html
2012-12-30 19:01:23 -06:00
Behdad Esfahbod d7e1965aa0 Remove memory accounting and reporting
That belongs in tools like cairo/util/malloc-stat.so
2012-12-29 23:12:07 -05:00
Behdad Esfahbod d823bb3cad Fixup from 4f6767470f 2012-12-29 22:57:53 -05:00
Behdad Esfahbod eb9ffac7e5 Fix more warnings 2012-12-29 22:56:14 -05:00
Behdad Esfahbod 1404af312a Fix warning 2012-12-29 22:55:36 -05:00
Behdad Esfahbod dd69d96e06 Fix sign-compare warnings 2012-12-29 22:47:49 -05:00
Behdad Esfahbod 4ad3a73691 Fix more warnings 2012-12-29 22:37:19 -05:00
Behdad Esfahbod 83d8019011 Fix unused-parameter warnings 2012-12-29 22:32:56 -05:00
Behdad Esfahbod 24cdcf52ab Fix compiler warnings 2012-12-29 22:24:24 -05:00
Behdad Esfahbod 4f6767470f Parse matrices of expressions
Previously a <matrix> element could only accept four <double> literals.
It now accepts full expressions, which can in turn poke into the
pattern, do math, etc.
2012-12-29 21:39:06 -05:00
Behdad Esfahbod 927dd3ddb5 Fix typo
Ouch, this has been wrong since 2004...  I guess no one uses <patelt>
stuff.
2012-12-29 20:14:07 -05:00
Akira TAGOH 9ce36f4bbe Check the system font to be initialized
config->fonts is an array and checking if config->fonts is a null
will not be useful.
2012-12-11 18:53:57 +09:00
Akira TAGOH 58040349e8 Fix a memory leak 2012-12-11 12:38:42 +09:00
Akira TAGOH 5ea3118ad6 Fix a typo that accessing to the out of array 2012-12-11 12:35:02 +09:00
Akira TAGOH cef2b50c66 clean up
ret won't be -1 if HAVE_STRUCT_DIRENT_D_TYPE isn't defined.
2012-12-11 12:30:05 +09:00
Akira TAGOH 608c5b590b Remove the duplicate null-check 2012-12-10 10:54:47 +09:00
Akira TAGOH e7954674eb Fix the wrong estimation for the memory usage information in fontconfig 2012-12-07 19:09:36 +09:00
Akira TAGOH 959442bca1 Fix a typo 2012-12-06 19:49:05 +09:00
Akira TAGOH 9231545c6b Do not show the deprecation warning if it is a symlink 2012-12-05 18:13:25 +09:00
Akira TAGOH 3d3629f86a Fix a potability issue about stdint.h 2012-11-27 18:25:11 +09:00
Akira TAGOH c20ac78b01 Bug 57114 - regression on FcFontMatch with namelang
After 7587d1c99d applied, family,
style, and fullname is localized against current locale or lang
if any though, the string in other languages were dropped from
the pattern. this caused unexpected mismatch on the target="font"
rules.

This fix adds other strings at the end of the list.
2012-11-15 16:37:32 +09:00
Akira TAGOH 8890f94438 Fix wrongly squashing for the network path on Win32.
Patch from Diego Santa Cruz
2012-10-09 11:03:03 +09:00
Akira TAGOH 535e0a37d6 Bug 54138 - X_OK permission is invalid for win32 access(..) calls
X_OK checking was added back in 8ae1e3d5dc
which was removed due to the same reason in
238489030a.
apparently the test case in Bug#18934 still works without it.
so I'm removing it again to get this working on Windows.
2012-08-31 12:39:38 +09:00
Akira TAGOH 375cdbce9d Bug 53585 - Two highly-visible typos in src/fcxml.c 2012-08-16 20:33:12 +09:00
Akira TAGOH da9400212d Fix a build fail with gcc 2.95, not supporting the flexible array members. 2012-07-09 14:46:51 +09:00
Marius Tolzmann e5a59eac90 Fix warning about deprecated, non-existent config includes
Fontconfig warning: "/etc/fonts/conf.d/50-user.conf", line 8: reading configurations from ~/.fonts.conf.d is deprecated.

Fontconfig warning: "/etc/fonts/conf.d/50-user.conf", line 9: reading configurations from ~/.fonts.conf is deprecated.

Be polite and do not issue the warning if deprecated config includes
(e.g. ~/.fonts.conf.d and/or ~/.fonts.conf) do not exist.
2012-06-22 13:58:46 +09:00
Marius Tolzmann 3a5e9bc75d Fix newline in warning about deprecated config includes 2012-06-22 13:57:13 +09:00
Akira TAGOH 4353df754f clean up the lock file properly on even hardlink-not-supported filesystem. 2012-06-18 10:52:21 +09:00
Akira TAGOH 997a64a67b Fix the fail of make install with --disable-shared on Win32 2012-06-14 11:27:31 +09:00
Akira TAGOH cd280f6532 Fix a build fail on MINGW 2012-06-13 20:01:30 +09:00
Akira TAGOH b447fc5d52 Bug 50835 - Deprecate FC_GLOBAL_ADVANCE
FC_GLOBAL_ADVANCE is deprecated. this flag is simply ignored on
freetype 2.4.5 or later.
2012-06-11 23:28:55 +09:00
Mark Brand 0b20bd0281 fix building for WIN32
8c255fb185 moved some code out of switch
but did not declare 'buffer'. Also, replacing the "break" with
"goto bail" neglected the WIN32 specific code.
2012-06-11 20:13:02 +09:00
Akira TAGOH cf70eaa3bf Bug 50525 - superfluous whitespace in the style 2012-06-08 19:41:59 +09:00
Akira TAGOH f4103bf708 fcdefault: Add the lang object at FcConfigSubstituteWithPat() only when kind is FcMatchPattern 2012-06-08 19:17:57 +09:00
Akira TAGOH 07e52eeb09 fcdefault: no need to set FC_LANG in FcDefaultSubstitute() anymore 2012-06-08 15:54:48 +09:00
Akira TAGOH 550fd49d4f Add the default language to the pattern prior to do build the substitution
the default language is referred from the FC_LANG environment variable
or the current locale
2012-06-08 15:48:30 +09:00
Akira TAGOH 2261a64ce1 fcdefault: fallback if the environment variables are empty
try to fallback if FC_LANG, LC_ALL, LC_CTYPE and LANG is empty
2012-06-08 15:47:52 +09:00
Akira TAGOH bbc8fb5ba7 Bug 32853 - Export API to get the default language
Add a new API FcGetDefaultLangs() to export the string sets of the default
languages.
2012-06-08 15:18:30 +09:00
Akira TAGOH 1b692d8ab9 Fix the wrong estimation for the memory usage information in fontconfig 2012-06-01 19:06:17 +09:00
Akira TAGOH 5254a6630f Fix a typo and polish the previous change 2012-05-31 13:07:29 +09:00
Akira TAGOH 4a741e9a0a Fix the build fail on Solaris
It's introduced by 0ac6c98294.
Use lstat() and S_ISDIR() to check if it's the directory or not
if there are no d_type in struct dirent.
2012-05-30 18:30:49 +09:00
Mikhail Gusarov 0ac6c98294 Fix cache aging for fonts on FAT filesystem under Linux
Windows does not update mtime of directory on FAT filesystem when
file is added to it or removed from it. Fontconfig uses mtime of
directory to check cache file aging and hence fails to detect
newly added or recently removed files.

This changeset detects FAT filesystem (currently implemented for
Linux) and adds generating checksum of directory entries instead
of using mtime which guarantees proper cache rebuild.

For non-FAT filesystems this patch adds single syscall per directory
which is negligeable overhead.

This fixes bug https://bugs.freedesktop.org/show_bug.cgi?id=25535

Signed-off-by: Mikhail Gusarov <dottedmag@dottedmag.net>
2012-05-28 16:46:04 +09:00
Akira TAGOH dc2da23e69 Move statfs/statvfs wrapper to fcstat.c and add a test for the mtime broken fs
just rework to share the efforts between FcIsFsMmapSafe() and FcIsFsMtimeBroken().
2012-05-28 16:46:01 +09:00
Mikhail Gusarov 6a83c1ad40 Move FcStat to separate compilation unit
FcStat() logic is quite complicated in presence of various semi-broken operating
systems and filesystems, split it out in order to make it a bit easier.

Signed-off-by: Mikhail Gusarov <dottedmag@dottedmag.net>
2012-05-28 16:01:00 +09:00
Akira TAGOH 26160366d7 fcatomic: fallback to create a directory with FcAtomicLock
link(2) might be failed on the filesystem that doesn't support
the hard link. e.g. FcAtomicLock() always fails on FAT filesystem
when link(2) is available.
So that may be a good idea to fallback if link(2) is failed.
2012-05-28 15:59:33 +09:00
Akira TAGOH 2837c63876 Bug 33644 - Fontconfig doesn't match correctly in <test>
Warn if the multiple values is set to <test>, including the case of
in <alias> because the behavior isn't intuitive since so many users
is asking for a help to get things working for their expectation.

Use multiple <match>s or <alias>es for OR operator and
multiple <test>s for AND operator.
2012-05-25 13:11:25 +09:00
Akira TAGOH 8c255fb185 Bug 20411 - fontconfig doesn't match FreeDesktop directories specs
Allows reading configuration files, fonts and cache files from
the directories where the XDG Base Directory Specification defines.

the old directories are still in the configuration files for
the backward compatibility.
2012-05-18 11:12:50 +09:00
Akira TAGOH bc4517d8e5 Bug 19128 - Handling whitespace in aliases
Add a new attribute `ignore-blanks' to <test>.
When this is set to "true", any blanks in the string will be ignored
on comparison.  This takes effects for compare="eq" or "not_eq" only.

Also changed the behavior of the comparison on <alias> too.
2012-05-14 12:06:12 +09:00
Akira TAGOH 5ac12c0e94 fcarch.c: get rid of the duplicate definition of FC_MAX
FC_MAX is also available in src/fcint.h
2012-05-10 16:47:09 +09:00
Keith Packard d81407611b Deal with architectures where ALIGNOF_DOUBLE < 4
This patch isn't really tested as I don't have such a machine, but I
have a bug report that on m68k machines, double values are aligned on
smaller than 4 byte boundaries. If ALIGNOF_DOUBLE < sizeof(int),
the "expected" sizeof of FcValue is miscomputed. Use the maximum of 4
(sizeof (int)) and ALIGNOF_DOUBLE when computing the expected size of
FcValue.

Signed-off-by: Keith Packard <keithp@keithp.com>
2012-05-02 12:01:38 +09:00
Akira TAGOH d2718257f9 Output more verbose debugging log to show where to insert the element into the value list 2012-05-01 20:22:17 +09:00
Akira TAGOH 7d65f9f514 Bug 39278 - make usage of mmap optional
Stop using mmap() if the cache file is stored on NFS.
also added FONTCONFIG_USE_MMAP environment variable to enforce the use of
or not the use of mmap(2) regardless of what the filesystem the cache files
are stored on.
2012-04-25 16:38:01 +09:00
Akira TAGOH 7587d1c99d Bug 27765 - FcMatch() returns style in wrong language
Add "namelang" object to obtain the localized name in the font regardless
of the lang object. it's applied to "familylang", "stylelang" and
"fullnamelang" alltogether. this would helps if one wants to enforce
selecting them in the specific language if any.  the default value for
the namelang object is determined from current locale.
2012-04-24 12:44:56 +09:00
Akira TAGOH 06d6b7c312 Create CACHEDIR.TAG when fc-cache is run or only when the cache directory is created at the runtime.
Also add FcCacheCreateTagFile() API to do create CACHEDIR.TAG on the cache
directory.
2012-04-23 11:26:32 +09:00
Akira TAGOH 22dc546090 Fix a build issue again when no regex functions available
Reported by Jon TURNEY
2012-04-20 20:12:24 +09:00
Akira TAGOH dd2a3d3520 Bug 25151 - Move cleanCacheDirectory() from fc-cache.c into
the library

Add FcDirCacheScan() API to clean up the cache files in the directory.
2012-04-18 12:55:23 +09:00
Keith Packard 9e62fcedfe Use posix_fadvise to speed startup
Given that fontconfig will scan all of the cache file data during the
first font search, ask the kernel to start reading the pages right away.

Signed-off-by: Keith Packard <keithp@keithp.com>
2012-04-17 12:20:25 +09:00
Akira TAGOH 470e92c9db Bug 27526 - Compatibility fix for old windows sytems
Patch from Gianluigi Tiesi
2012-04-12 14:01:25 +09:00
Akira TAGOH ac6271dbac Bug 48573 - platform without regex do not have also REG_XXX defines
Fix a build issue on the platforms where regex isn't available
2012-04-12 11:01:12 +09:00
Akira TAGOH 9231d79ad1 Bug 28491 - Allow matching on FC_FILE
Allow :file=/path/to/font/file on matching
2012-04-11 16:36:36 +09:00
Akira TAGOH 2589207cfd Bug 26830 - Add search for libiconv non-default directory
Add --with-libiconv, --with-libiconv-includes and --with-libiconv-lib
to specify the directory where libiconv might be installed.
2012-04-10 18:45:31 +09:00
Akira TAGOH ddefa5021f Bug 22862 - <alias> ignores <match> <test>s
Allow to use the test elements in the alias element.
2012-04-06 11:14:42 +09:00
Akira TAGOH e181ab4de5 Bug 29341 - Make some fontconfig paths configurable
Add configure options to set the directory to be installed:
  --with-templatedir for the configuration files a.k.a.
    /etc/fonts/conf.avail
  --with-baseconfigdir for fonts.conf etc a.k.a. /etc/fonts
  --with-configdir for the active configuration files a.k.a.
    /etc/fonts/conf.d
  --with-xmldir for fonts.dtd etc

and the default path for templatedir is changed to
${datadir}/fontconfig/conf.avail
2012-04-05 12:23:49 +09:00
Akira TAGOH 9fe7c986c6 Bug 48020 - Fix for src/makealias on Solaris 10
Use the command substitution `command` instead of $(command) for
Solaris 10.
2012-03-29 15:43:38 +09:00
Akira TAGOH becbdaebe3 Move workaround macros for fat binaries into the separate header file 2012-03-29 12:50:47 +09:00
Akira TAGOH 4a060729a1 fcpat: Increase the number of buckets in the shared string hash table
This is a reasonably conservative increase in the number of buckets in the hash
table to 251.  After FcInit(), there are 240 shared strings in use on my system
(from configuration files I assume).  The hash value is stored in each link in
the chains so comparison are actually not very expensive.  This change should
reduce the average length of chains by a factor of 8.  With the reference
counted strings, it should keep the average length of chains to about 2.  The
number of buckets is prime so as not to rely too much on the quality of the
hash function.

https://bugs.freedesktop.org/show_bug.cgi?id=17832#c5

Patch from Karl Tomlinson
2012-03-28 13:42:01 +09:00
Akira TAGOH d8dcff7b96 Bug 17832 - Memory leaks due to FcStrStaticName use for external patterns
Use the reference-counted strings instead of the static strings

Patch from Karl Tomlinson
2012-03-28 13:42:01 +09:00
Akira TAGOH ea1c6ea337 Fix a memory leak in FcDirScanConfig() 2012-03-27 21:06:36 +09:00
Akira TAGOH 92ac054ce5 fcmatch: Set FcResultMatch at the end if the return value is valid.
In the previous code, the result of 'result' in the argument for
FcFontSetSort() and FcFontSetMatch() wasn't predictable and not reliable to
check if the return value is valid or not. this change is to ensure if it's
performed successfully.
2012-03-22 19:15:27 +09:00
Jeremy Huddleston 8cc4498122 fcarch: Check for architecture signature at compile time rather than configure time
https://bugs.freedesktop.org/show_bug.cgi?id=20208

Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2012-03-21 11:59:01 +09:00
Akira TAGOH 93460f93e9 Fix a build issue due to the use of non-portable variables
$< isn't supported in BSD make say. $(RM) is pre-defined in GNU make
though, not in BSD make say. so changed to check on configure if it's
pre-defined by make, otherwise set the appropriate command to $(RM).

This would be a workaround until it has the certain pre-defined value.
2012-03-16 16:34:37 +09:00
Akira TAGOH a5b609196f Revert "Fix a build fail on some environment."
This reverts commit 0fdfddf2ac.

Conflicts:

	doc/Makefile.am
2012-03-16 11:55:30 +09:00
Akira TAGOH 0fdfddf2ac Fix a build fail on some environment. 2012-03-10 23:30:30 +09:00
Akira TAGOH 0ca752dd25 Check null value for given object to avoid possibly segfaulting 2012-03-07 17:56:39 +09:00
Akira TAGOH 1f01c4b60c Bug 23336 - unable to display bitmap-only (SFNT) TrueType or OpenType
Force to find out a size for bitmap-only ttf to avoid the blank glyphs
in the font.

Patch from Bug Fly
2012-03-07 17:32:14 +09:00
Akira TAGOH a13d518fdd Bug 41694 - FcCache functions have random-number-generator side effects
Use the own random number generator state if possible.
2012-02-28 12:52:25 +09:00
Akira TAGOH 5e4ea1104c Do not update stream->pos when seeking is failed. 2012-02-22 16:50:13 +09:00
Akira TAGOH 71b14d645f Bug 46169 - Pointer error in FcConfigGlobMatch
Fix possibly accessing the invalid memory and a crash in the worst case
when the glob string is longer than the string.
2012-02-22 16:30:05 +09:00