1 //========================================================================
2 //
3 // SplashFontFile.cc
4 //
5 // Copyright 2003-2013 Glyph & Cog, LLC
6 //
7 //========================================================================
8 
9 #include <aconf.h>
10 
11 #ifdef USE_GCC_PRAGMAS
12 #pragma implementation
13 #endif
14 
15 #include <stdio.h>
16 #ifndef _WIN32
17 #  include <unistd.h>
18 #endif
19 #include "gmempp.h"
20 #include "GString.h"
21 #include "SplashFontFile.h"
22 #include "SplashFontFileID.h"
23 
24 #ifdef VMS
25 #if (__VMS_VER < 70000000)
26 extern "C" int unlink(char *filename);
27 #endif
28 #endif
29 
30 //------------------------------------------------------------------------
31 // SplashFontFile
32 //------------------------------------------------------------------------
33 
SplashFontFile(SplashFontFileID * idA,SplashFontType fontTypeA,GString * fontBufA)34 SplashFontFile::SplashFontFile(SplashFontFileID *idA,
35 			       SplashFontType fontTypeA,
36 #if LOAD_FONTS_FROM_MEM
37 			       GString *fontBufA
38 #else
39 			       char *fileNameA, GBool deleteFileA
40 #endif
41 			       ) {
42   id = idA;
43   fontType = fontTypeA;
44 #if LOAD_FONTS_FROM_MEM
45   fontBuf = fontBufA;
46 #else
47   fileName = new GString(fileNameA);
48   deleteFile = deleteFileA;
49 #endif
50   refCnt = 0;
51 }
52 
~SplashFontFile()53 SplashFontFile::~SplashFontFile() {
54 #if LOAD_FONTS_FROM_MEM
55   delete fontBuf;
56 #else
57   if (deleteFile) {
58     unlink(fileName->getCString());
59   }
60   delete fileName;
61 #endif
62   delete id;
63 }
64 
incRefCnt()65 void SplashFontFile::incRefCnt() {
66 #if MULTITHREADED
67   gAtomicIncrement(&refCnt);
68 #else
69   ++refCnt;
70 #endif
71 }
72 
decRefCnt()73 void SplashFontFile::decRefCnt() {
74   GBool done;
75 
76 #if MULTITHREADED
77   done = gAtomicDecrement(&refCnt) == 0;
78 #else
79   done = --refCnt == 0;
80 #endif
81   if (done) {
82     delete this;
83   }
84 }
85