Ignore:
Timestamp:
Sep 7, 2012, 8:38:55 AM (9 years ago)
Author:
Silvan Scherrer
Message:

updated poppler to 0.20.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/poppler/mypoppler/goo/gfile.cc

    r461 r515  
    4040#    include <fcntl.h>
    4141#  endif
     42#  include <time.h>
    4243#  include <limits.h>
    4344#  include <string.h>
     
    124125}
    125126
    126 GooString *appendToPath(GooString *path, char *fileName) {
     127GooString *appendToPath(GooString *path, const char *fileName) {
    127128#if defined(VMS)
    128129  //---------- VMS ----------
     
    471472}
    472473
    473 GBool openTempFile(GooString **name, FILE **f, char *mode) {
     474GBool openTempFile(GooString **name, FILE **f, const char *mode) {
    474475#if defined(_WIN32)
    475476  //---------- Win32 ----------
     
    489490    s = new GooString();
    490491  }
    491   s->append("x");
     492  s->appendf("x_{0:d}_{1:d}_",
     493             (int)GetCurrentProcessId(), (int)GetCurrentThreadId());
    492494  t = (int)time(NULL);
    493495  for (i = 0; i < 1000; ++i) {
    494     sprintf(buf, "%d", t + i);
    495     s2 = s->copy()->append(buf);
     496    s2 = s->copy()->appendf("{0:d}", t + i);
    496497    if (!(f2 = fopen(s2->getCString(), "r"))) {
    497498      if (!(f2 = fopen(s2->getCString(), mode))) {
     
    525526  if (!(*f = fopen((*name)->getCString(), mode))) {
    526527    delete (*name);
     528    *name = NULL;
    527529    return gFalse;
    528530  }
     
    550552  if (fd < 0 || !(*f = fdopen(fd, mode))) {
    551553    delete *name;
     554    *name = NULL;
    552555    return gFalse;
    553556  }
     
    561564#else
    562565  return system(cmd) ? gFalse : gTrue;
     566#endif
     567}
     568
     569#ifdef WIN32
     570GooString *fileNameToUTF8(char *path) {
     571  GooString *s;
     572  char *p;
     573
     574  s = new GooString();
     575  for (p = path; *p; ++p) {
     576    if (*p & 0x80) {
     577      s->append((char)(0xc0 | ((*p >> 6) & 0x03)));
     578      s->append((char)(0x80 | (*p & 0x3f)));
     579    } else {
     580      s->append(*p);
     581    }
     582  }
     583  return s;
     584}
     585
     586GooString *fileNameToUTF8(wchar_t *path) {
     587  GooString *s;
     588  wchar_t *p;
     589
     590  s = new GooString();
     591  for (p = path; *p; ++p) {
     592    if (*p < 0x80) {
     593      s->append((char)*p);
     594    } else if (*p < 0x800) {
     595      s->append((char)(0xc0 | ((*p >> 6) & 0x1f)));
     596      s->append((char)(0x80 | (*p & 0x3f)));
     597    } else {
     598      s->append((char)(0xe0 | ((*p >> 12) & 0x0f)));
     599      s->append((char)(0x80 | ((*p >> 6) & 0x3f)));
     600      s->append((char)(0x80 | (*p & 0x3f)));
     601    }
     602  }
     603  return s;
     604}
     605#endif
     606
     607FILE *openFile(const char *path, const char *mode) {
     608#ifdef WIN32
     609  OSVERSIONINFO version;
     610  wchar_t wPath[_MAX_PATH + 1];
     611  char nPath[_MAX_PATH + 1];
     612  wchar_t wMode[8];
     613  const char *p;
     614  int i;
     615
     616  // NB: _wfopen is only available in NT
     617  version.dwOSVersionInfoSize = sizeof(version);
     618  GetVersionEx(&version);
     619  if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) {
     620    for (p = path, i = 0; *p && i < _MAX_PATH; ++i) {
     621      if ((p[0] & 0xe0) == 0xc0 &&
     622          p[1] && (p[1] & 0xc0) == 0x80) {
     623        wPath[i] = (wchar_t)(((p[0] & 0x1f) << 6) |
     624                             (p[1] & 0x3f));
     625        p += 2;
     626      } else if ((p[0] & 0xf0) == 0xe0 &&
     627                 p[1] && (p[1] & 0xc0) == 0x80 &&
     628                 p[2] && (p[2] & 0xc0) == 0x80) {
     629        wPath[i] = (wchar_t)(((p[0] & 0x0f) << 12) |
     630                             ((p[1] & 0x3f) << 6) |
     631                             (p[2] & 0x3f));
     632        p += 3;
     633      } else {
     634        wPath[i] = (wchar_t)(p[0] & 0xff);
     635        p += 1;
     636      }
     637    }
     638    wPath[i] = (wchar_t)0;
     639    for (i = 0; mode[i] && i < sizeof(mode) - 1; ++i) {
     640      wMode[i] = (wchar_t)(mode[i] & 0xff);
     641    }
     642    wMode[i] = (wchar_t)0;
     643    return _wfopen(wPath, wMode);
     644  } else {
     645    for (p = path, i = 0; *p && i < _MAX_PATH; ++i) {
     646      if ((p[0] & 0xe0) == 0xc0 &&
     647          p[1] && (p[1] & 0xc0) == 0x80) {
     648        nPath[i] = (char)(((p[0] & 0x1f) << 6) |
     649                          (p[1] & 0x3f));
     650        p += 2;
     651      } else if ((p[0] & 0xf0) == 0xe0 &&
     652                 p[1] && (p[1] & 0xc0) == 0x80 &&
     653                 p[2] && (p[2] & 0xc0) == 0x80) {
     654        nPath[i] = (char)(((p[1] & 0x3f) << 6) |
     655                          (p[2] & 0x3f));
     656        p += 3;
     657      } else {
     658        nPath[i] = p[0];
     659        p += 1;
     660      }
     661    }
     662    nPath[i] = '\0';
     663    return fopen(nPath, mode);
     664  }
     665#else
     666  return fopen(path, mode);
    563667#endif
    564668}
Note: See TracChangeset for help on using the changeset viewer.