]> git.wh0rd.org Git - fontconfig.git/commit
Add functionality to allow fontconfig data structure serialization.
authorPatrick Lam <plam@MIT.EDU>
Tue, 28 Jun 2005 03:41:02 +0000 (03:41 +0000)
committerPatrick Lam <plam@MIT.EDU>
Tue, 28 Jun 2005 03:41:02 +0000 (03:41 +0000)
commitcd2ec1a940888ebcbd323a8000d2fcced41ddf9e
tree841e371cb0e28b003cdfbab8d109e30d84b2a3db
parentf1a42f6b5f9bcd774d09002509b2872c04025c1b
Add functionality to allow fontconfig data structure serialization.
This patch allows the fundamental fontconfig data structures to be
    serialized. I've converted everything from FcPattern down to be able to
    use *Ptr objects, which can be either static or dynamic (using a union
    which either contains a pointer or an index) and replaced storage of
    pointers in the heap with the appropriate *Ptr object. I then changed
    all writes of pointers to the heap with a *CreateDynamic call, which
    creates a dynamic Ptr object pointing to the same object as before.
    This way, the fundamental fontconfig semantics should be unchanged; I
    did not have to change external signatures this way, although I did
    change some internal signatures. When given a *Ptr object, just run *U
    to get back to a normal pointer; it gives the right answer regardless
    of whether we're using static or dynamic storage.
I've also implemented a Fc*Serialize call. Calling FcFontSetSerialize
    converts the dynamic FcFontSets contained in the config object to
    static FcFontSets and also converts its dependencies (e.g. everything
    you'd need to write to disk) to static objects. Note that you have to
    call Fc*PrepareSerialize first; this call will count the number of
    objects that actually needs to be allocated, so that we can avoid
    realloc. The Fc*Serialize calls then check the static pointers for
    nullness, and allocate the buffers if necessary. I've tested the
    execution of fc-list and fc-match after Fc*Serialize and they appear to
    work the same way.
17 files changed:
fc-lang/fc-lang.c
fontconfig/fcprivate.h
fontconfig/fontconfig.h
src/fccache.c
src/fccfg.c
src/fccharset.c
src/fcdbg.c
src/fcfs.c
src/fcint.h
src/fclang.c
src/fclist.c
src/fcmatch.c
src/fcmatrix.c
src/fcname.c
src/fcpat.c
src/fcstr.c
src/fcxml.c