summaryrefslogtreecommitdiff
path: root/hwpfilter/source/hiodev.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2011-06-13 23:20:18 +0100
committerCaolán McNamara <caolanm@redhat.com>2011-06-13 23:20:18 +0100
commitb879a95c1d1b6241e7bc1b6fb6349e91e4baf5f1 (patch)
treecba640a6241b00fc7db443b40cc91c769da667b0 /hwpfilter/source/hiodev.cxx
parentbfd0bbab201d574d3387dacf1c74e80a3ed157bb (diff)
gbuildize hwpfilter
Diffstat (limited to 'hwpfilter/source/hiodev.cxx')
-rw-r--r--hwpfilter/source/hiodev.cxx366
1 files changed, 366 insertions, 0 deletions
diff --git a/hwpfilter/source/hiodev.cxx b/hwpfilter/source/hiodev.cxx
new file mode 100644
index 000000000000..0416a96c7091
--- /dev/null
+++ b/hwpfilter/source/hiodev.cxx
@@ -0,0 +1,366 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifdef __GNUG__
+#pragma implementation "hiodev.h"
+#endif
+
+#include <stdio.h>
+#include <errno.h>
+// DVO: add zlib/ prefix
+#ifdef SYSTEM_ZLIB
+#include <zlib.h>
+#else
+#include <zlib/zlib.h>
+#endif
+#ifdef WIN32
+# include <io.h>
+#else
+# include <unistd.h>
+#endif
+
+#include "hwplib.h"
+#include "hgzip.h"
+#include "hiodev.h"
+#include "hwpfile.h"
+#include "hstream.h"
+
+const int BUFSIZE = 1024;
+static uchar rBuf[BUFSIZE];
+
+// HIODev abstract class
+HIODev::HIODev()
+{
+ init();
+}
+
+
+HIODev::~HIODev()
+{
+}
+
+
+void HIODev::init()
+{
+ compressed = false;
+}
+
+
+int HIODev::read1b(void *ptr, int nmemb)
+{
+ uchar *p = (uchar *) ptr;
+ int ii;
+
+ if (state())
+ return -1;
+ for (ii = 0; ii < nmemb; ii++)
+ {
+ p[ii] = sal::static_int_cast<uchar>(read1b());
+ if (state())
+ break;
+ }
+ return ii;
+}
+
+
+int HIODev::read2b(void *ptr, int nmemb)
+{
+ ushort *p = (ushort *) ptr;
+ int ii;
+
+ if (state())
+ return -1;
+ for (ii = 0; ii < nmemb; ii++)
+ {
+ p[ii] = sal::static_int_cast<uchar>(read2b());
+ if (state())
+ break;
+ }
+ return ii;
+}
+
+
+int HIODev::read4b(void *ptr, int nmemb)
+{
+ ulong *p = (ulong *) ptr;
+ int ii;
+
+ if (state())
+ return -1;
+ for (ii = 0; ii < nmemb; ii++)
+ {
+ p[ii] = read4b();
+ if (state())
+ break;
+ }
+ return ii;
+}
+
+
+// hfileiodev class
+HStreamIODev::HStreamIODev(HStream & stream):_stream(stream)
+{
+ init();
+}
+
+
+HStreamIODev::~HStreamIODev()
+{
+ close();
+}
+
+
+void HStreamIODev::init()
+{
+ _gzfp = NULL;
+ compressed = false;
+}
+
+
+bool HStreamIODev::open()
+{
+ if (!(_stream.available()))
+ return false;
+ return true;
+}
+
+
+void HStreamIODev::flush(void)
+{
+ if (_gzfp)
+ gz_flush(_gzfp, Z_FINISH);
+}
+
+
+void HStreamIODev::close(void)
+{
+/* Ç÷¯½ÃÇÑ ÈÄ ´Ý´Â´Ù. */
+ this->flush();
+ if (_gzfp)
+ gz_close(_gzfp); /* gz_close() calls stream_closeInput() */
+ else
+ _stream.closeInput();
+ _gzfp = NULL;
+}
+
+
+int HStreamIODev::state(void) const
+{
+ return 0;
+}
+
+
+/* zlib °ü·Ã ºÎºÐ */
+bool HStreamIODev::setCompressed(bool flag)
+{
+ compressed = flag;
+ if (flag == true)
+ return 0 != (_gzfp = gz_open(_stream));
+ else if (_gzfp)
+ {
+ gz_flush(_gzfp, Z_FINISH);
+ gz_close(_gzfp);
+ _gzfp = 0;
+ }
+ return true;
+}
+
+
+// IO routines
+
+#define GZREAD(ptr,len) (_gzfp?gz_read(_gzfp,ptr,len):0)
+
+int HStreamIODev::read1b()
+{
+ int res = (compressed) ? GZREAD(rBuf, 1) : _stream.readBytes(rBuf, 1);
+
+ if (res <= 0)
+ return -1;
+ else
+ return (unsigned char) rBuf[0];
+}
+
+
+int HStreamIODev::read2b()
+{
+ int res = (compressed) ? GZREAD(rBuf, 2) : _stream.readBytes(rBuf, 2);
+
+ if (res <= 0)
+ return -1;
+ else
+ return ((unsigned char) rBuf[1] << 8 | (unsigned char) rBuf[0]);
+}
+
+
+long HStreamIODev::read4b()
+{
+ int res = (compressed) ? GZREAD(rBuf, 4) : _stream.readBytes(rBuf, 4);
+
+ if (res <= 0)
+ return -1;
+ else
+ return ((unsigned char) rBuf[3] << 24 | (unsigned char) rBuf[2] << 16 |
+ (unsigned char) rBuf[1] << 8 | (unsigned char) rBuf[0]);
+}
+
+
+int HStreamIODev::readBlock(void *ptr, int size)
+{
+ int count =
+ (compressed) ? GZREAD(ptr, size) : _stream.readBytes((byte *) ptr,
+
+ size);
+
+ return count;
+}
+
+
+int HStreamIODev::skipBlock(int size)
+{
+ if (compressed){
+ if( size <= BUFSIZE )
+ return GZREAD(rBuf, size);
+ else{
+ int remain = size;
+ while(remain){
+ if( remain > BUFSIZE )
+ remain -= GZREAD(rBuf, BUFSIZE);
+ else{
+ remain -= GZREAD(rBuf, remain);
+ break;
+ }
+ }
+ return size - remain;
+ }
+ }
+ return _stream.skipBytes(size);
+}
+
+
+HMemIODev::HMemIODev(char *s, int len)
+{
+ init();
+ ptr = (uchar *) s;
+ length = len;
+}
+
+
+HMemIODev::~HMemIODev()
+{
+ close();
+}
+
+
+void HMemIODev::init()
+{
+ ptr = 0;
+ length = 0;
+ pos = 0;
+}
+
+
+bool HMemIODev::open()
+{
+ return true;
+}
+
+
+void HMemIODev::flush(void)
+{
+}
+
+
+void HMemIODev::close(void)
+{
+}
+
+
+int HMemIODev::state(void) const
+{
+ if (pos <= length)
+ return 0;
+ else
+ return -1;
+}
+
+
+bool HMemIODev::setCompressed(bool )
+{
+ return false;
+}
+
+
+int HMemIODev::read1b()
+{
+ if (pos <= length)
+ return ptr[pos++];
+ else
+ return 0;
+}
+
+
+int HMemIODev::read2b()
+{
+ pos += 2;
+ if (pos <= length)
+ return ptr[pos - 1] << 8 | ptr[pos - 2];
+ else
+ return 0;
+}
+
+
+long HMemIODev::read4b()
+{
+ pos += 4;
+ if (pos <= length)
+ return DWORD(ptr[pos - 1] << 24 | ptr[pos - 2] << 16 |
+ ptr[pos - 3] << 8 | ptr[pos - 4]);
+ else
+ return 0;
+}
+
+
+int HMemIODev::readBlock(void *p, int size)
+{
+ if (length < pos + size)
+ size = length - pos;
+ memcpy(p, ptr + pos, size);
+ pos += size;
+ return size;
+}
+
+
+int HMemIODev::skipBlock(int size)
+{
+ if (length < pos + size)
+ return 0;
+ pos += size;
+ return size;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */