User: vg      
Date: 05/02/16 07:51:05

Modified:
 /dba/connectivity/source/drivers/hsqldb/
  HStorageAccess.cxx

Log:
 INTEGRATION: CWS hsqldb2 (1.2.20); FILE MERGED
 2005/01/28 12:21:54 oj 1.2.20.3: #i39922# new interfaces in hsqldb and some 
debug info
 2005/01/25 08:42:51 oj 1.2.20.2: #i39922# correct stream handling
 2005/01/19 07:03:27 oj 1.2.20.1: #i39922# remove db from stream name

File Changes:

Directory: /dba/connectivity/source/drivers/hsqldb/
===================================================

File [changed]: HStorageAccess.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/connectivity/source/drivers/hsqldb/HStorageAccess.cxx?r1=1.3&r2=1.4
Delta lines:  +207 -60
----------------------
--- HStorageAccess.cxx  21 Jan 2005 16:39:57 -0000      1.3
+++ HStorageAccess.cxx  16 Feb 2005 15:51:02 -0000      1.4
@@ -75,6 +75,7 @@
 #include "hsqldb/HStorageMap.hxx"
 #include "hsqldb/StorageNativeInputStream.h"
 
+
 using namespace ::com::sun::star::container;
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::embed;
@@ -94,6 +95,15 @@
 JNIEXPORT void JNICALL 
Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_openStream
   (JNIEnv * env, jobject obj_this,jstring name, jstring key, jint mode)
 {
+#if OSL_DEBUG_LEVEL > 1
+    {
+        ::rtl::OUString sOrgName = StorageContainer::jstring2ustring(env,name);
+        sOrgName += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"));
+        ::rtl::OString sName = 
::rtl::OUStringToOString(sOrgName,RTL_TEXTENCODING_ASCII_US);
+        getStreams()[sOrgName] = fopen( sName.getStr(), "a+" );
+    }
+#endif
+
        StorageContainer::registerStream(env,name,key,mode);
 }
 // 
-----------------------------------------------------------------------------
@@ -105,6 +115,24 @@
 JNIEXPORT void JNICALL 
Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_close
   (JNIEnv * env, jobject obj_this,jstring name, jstring key)
 {
+    ::boost::shared_ptr<StreamHelper> pHelper = 
StorageContainer::getRegisteredStream(env,name,key);
+    Reference< XOutputStream> xFlush = pHelper.get() ? 
pHelper->getOutputStream() : Reference< XOutputStream>();
+    if ( xFlush.is() )
+        try
+        {
+            xFlush->flush();
+        }
+        catch(Exception&)
+        {}
+#if OSL_DEBUG_LEVEL > 1
+    {
+        ::rtl::OUString sOrgName = StorageContainer::jstring2ustring(env,name);
+        sOrgName += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"));
+        fclose( getStreams()[sOrgName] );
+        getStreams().erase(sOrgName);
+    }
+#endif
+
        StorageContainer::revokeStream(env,name,key);
 }
 // 
-----------------------------------------------------------------------------
@@ -145,11 +173,24 @@
   (JNIEnv * env, jobject obj_this,jstring name, jstring key)
 {
        ::boost::shared_ptr<StreamHelper> pHelper = 
StorageContainer::getRegisteredStream(env,name,key);
-       OSL_ENSURE(pHelper.get(),"No stream helper!");
-       if ( pHelper.get() )
+    Reference< XInputStream> xIn = pHelper.get() ? pHelper->getInputStream() : 
Reference< XInputStream>();
+       OSL_ENSURE(xIn.is(),"Input stream is NULL!");
+       if ( xIn.is() )
+       {
+               sal_Bool bRead = sal_False;
+               Reference< XSeekable> xSeek = pHelper->getSeek();
+               if ( xSeek.is() )
+               {
+                       sal_Int64 nStreamLen = xSeek->getLength();
+                       sal_Int64 nPos = xSeek->getPosition();
+                       bRead = (nPos + 1) <= nStreamLen;
+               }
+               else
+                       bRead = xIn->available() > 0;
+               if ( bRead )
        {
                Sequence< ::sal_Int8 > aData(1);
-               sal_Int32 nBytesRead = 
pHelper->getInputStream()->readBytes(aData,1);
+                       sal_Int32 nBytesRead = xIn->readBytes(aData,1);
                if (nBytesRead <= 0) {
                        return (-1);
                } else {
@@ -157,9 +198,18 @@
                        if (tmpInt < 0 ){
                                tmpInt = 256 +tmpInt;
                        }
+#if OSL_DEBUG_LEVEL > 1
+                               ::rtl::OUString sOrgName = 
StorageContainer::jstring2ustring(env,name);
+                if ( getStreams().find(sOrgName + 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"))) != getStreams().end() )
+                    sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"));
+                else
+                    sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".input"));
+                               fputc(tmpInt,getStreams()[sOrgName]);
+#endif
                        return(tmpInt);
                }
        }
+       }
        return -1;
 }
 // 
-----------------------------------------------------------------------------
@@ -167,9 +217,9 @@
 /*
  * Class:     com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess
  * Method:    read
- * Signature: (Ljava/lang/String;Ljava/lang/String;[BII)V
+ * Signature: (Ljava/lang/String;Ljava/lang/String;[BII)I
  */
-JNIEXPORT void JNICALL 
Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_read__Ljava_lang_String_2Ljava_lang_String_2_3BII
+JNIEXPORT jint JNICALL 
Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_read__Ljava_lang_String_2Ljava_lang_String_2_3BII
   (JNIEnv * env, jobject obj_this,jstring name, jstring key, jbyteArray 
buffer, jint off, jint len)
 {
        ::boost::shared_ptr<StreamHelper> pHelper = 
StorageContainer::getRegisteredStream(env,name,key);
@@ -177,34 +227,56 @@
        OSL_ENSURE(xIn.is(),"Input stream is NULL!");
        if ( xIn.is() )
        {
-               sal_Int32 nBytesRead = 0;
-
                jsize nLen = env->GetArrayLength(buffer);
-               Sequence< ::sal_Int8 > aData(nLen);
-               
-               sal_Int32 av = xIn->available();
-               if ( av != 0 && nLen > av)
-                       nBytesRead = xIn->readBytes(aData, av);
+        if ( nLen < len )
+        {
+            ThrowException(    env,
+                                       "java/io/IOException",
+                                       "Stream is not valid");
+               return -1;
+        }
+               sal_Int32 nBytesRead = -1;
+               Reference< XSeekable> xSeek = pHelper->getSeek();
+               if ( xSeek.is() )
+               {
+                       sal_Int64 nStreamLen = xSeek->getLength();
+                       sal_Int64 nPos = xSeek->getPosition();
+                       nBytesRead = ((nPos + len) <= nStreamLen) ? len : 
(nStreamLen - nPos);
+               }
                else
-                       nBytesRead = xIn->readBytes(aData,nLen);
+               {
+                       sal_Int32 av = xIn->available();
+                       nBytesRead = len <= av ? len : av;
+               }
            
-               // Casting bytesRead to an int is okay, since the user can
-               // only pass in an integer length to read, so the bytesRead 
-               // must <= len.
-               //
-               if (nBytesRead <= 0) {
-                       return ;
-               } else if (nBytesRead < len) {
+               if ( nBytesRead > 0 )
+               {
+                       Sequence< ::sal_Int8 > aData(nBytesRead);
+                       nBytesRead = xIn->readBytes(aData, nBytesRead);
+               
+                       if (nBytesRead <= 0)
+                               return -1;
+                       OSL_ENSURE(nLen >= (off + nBytesRead),"Buffer is too 
small!");
+                       OSL_ENSURE(aData.getLength() >= nBytesRead,"Buffer is 
too small!");
                        
env->SetByteArrayRegion(buffer,off,nBytesRead,&aData[0]);
-               } else {
-                       env->SetByteArrayRegion(buffer,off,len,&aData[0]);
+
+#if OSL_DEBUG_LEVEL > 1
+                       ::rtl::OUString sOrgName = 
StorageContainer::jstring2ustring(env,name);
+            if ( getStreams().find(sOrgName + 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"))) != getStreams().end() )
+                sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"));
+            else
+                sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".input"));
+                       
fwrite(&aData[0],sizeof(sal_Int8),nBytesRead,getStreams()[sOrgName]);
+#endif
                }
-               return ;
+               else
+                       return -1;
+               return nBytesRead;
        }
        ThrowException( env,
                                        "java/io/IOException",
                                        "Stream is not valid");
-       return;
+       return -1;
 }
 // 
-----------------------------------------------------------------------------
 
@@ -221,6 +293,18 @@
        OSL_ENSURE(xIn.is(),"Input stream is NULL!");
        if ( xIn.is() )
        {       
+               sal_Bool bRead = sal_False;
+               Reference< XSeekable> xSeek = pHelper->getSeek();
+               if ( xSeek.is() )
+               {
+                       sal_Int64 nStreamLen = xSeek->getLength();
+                       sal_Int64 nPos = xSeek->getPosition();
+                       bRead = (nPos + 4) <= nStreamLen;
+               }
+               else
+                       bRead = xIn->available() >= 4;
+               if ( bRead )
+        {
                Sequence< ::sal_Int8 > aData(4);
                sal_Int32 nBytesRead = xIn->readBytes(aData, 4);
 
@@ -247,8 +331,18 @@
                        return -1;
                }
                jint nRet = ((ch[0] << 24) + (ch[1] << 16) + (ch[2] << 8) + 
(ch[3] << 0));
+#if OSL_DEBUG_LEVEL > 1
+            ::rtl::OUString sOrgName = 
StorageContainer::jstring2ustring(env,name);
+            if ( getStreams().find(sOrgName + 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"))) != getStreams().end() )
+                sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"));
+            else
+                sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".input"));
+            fputc(nRet,getStreams()[sOrgName]);
+#endif
                return nRet;
        }
+        return -1;
+       }
        ThrowException( env,
                                        "java/io/IOException",
                                        "No InputStream");
@@ -274,6 +368,17 @@
                if ( nLen < position) 
                {
                        static ::sal_Int64 BUFFER_SIZE = 9192;
+#if OSL_DEBUG_LEVEL > 1
+            {
+                ::rtl::OUString sOrgName = 
StorageContainer::jstring2ustring(env,name);
+                if ( getStreams().find(sOrgName + 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"))) != getStreams().end() )
+                    sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"));
+                else
+                    sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".output"));
+                   int errr = fseek(getStreams()[sOrgName],nLen,SEEK_SET);
+            }
+#endif
+
                        xSeek->seek(nLen);
                        Reference< XOutputStream> xOut = 
pHelper->getOutputStream();
                        OSL_ENSURE(xOut.is(),"No output stream!");
@@ -295,10 +400,28 @@
                                Sequence< ::sal_Int8 > aData(n);
                                memset(aData.getArray(),0,n);
                                xOut->writeBytes(aData);
+#if OSL_DEBUG_LEVEL > 1
+                ::rtl::OUString sOrgName = 
StorageContainer::jstring2ustring(env,name);
+                if ( getStreams().find(sOrgName + 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"))) != getStreams().end() )
+                    sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"));
+                else
+                    sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".output"));
+                fwrite(&aData[0],sizeof(sal_Int8),n,getStreams()[sOrgName]);
+#endif
                        }
                }
-           
                xSeek->seek(position);
+        OSL_ENSURE(xSeek->getPosition() == position,"Wrong position after 
seeking the stream");
+
+#if OSL_DEBUG_LEVEL > 1
+        ::rtl::OUString sOrgName = StorageContainer::jstring2ustring(env,name);
+        if ( getStreams().find(sOrgName + 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"))) != getStreams().end() )
+            sOrgName += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"));
+        else
+            sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".output"));
+           int errr = fseek(getStreams()[sOrgName],position,SEEK_SET);
+        OSL_ENSURE(xSeek->getPosition() == 
ftell(getStreams()[sOrgName]),"Wrong position after seeking the stream");
+#endif                 
        }
 }
 // 
-----------------------------------------------------------------------------
@@ -320,6 +443,9 @@
                if ( xOut.is() )
                {
                        jbyte *buf = env->GetByteArrayElements(buffer,NULL);
+#if OSL_DEBUG_LEVEL > 1
+            OSL_ENSURE(len <= env->GetArrayLength(buffer),"Length is greater 
than the buffer!");
+#endif
                        
                        if (JNI_FALSE != env->ExceptionCheck())
             {
@@ -329,9 +455,21 @@
                        OSL_ENSURE(buf,"buf is NULL");
                        if ( buf )
                        {
+#if OSL_DEBUG_LEVEL > 1
+                ::rtl::OUString sOrgName = 
StorageContainer::jstring2ustring(env,name);
+                sal_Bool bCheck;
+                if ( bCheck = (getStreams().find(sOrgName + 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"))) != getStreams().end()) )
+                    sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"));
+                else
+                    sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".output"));
+#endif
+
                                Sequence< ::sal_Int8 > aData(buf + off,len);
                                xOut->writeBytes(aData);
                                env->ReleaseByteArrayElements(buffer, buf, 
JNI_ABORT);
+#if OSL_DEBUG_LEVEL > 1
+                
fwrite(&aData[off],sizeof(sal_Int8),len,getStreams()[sOrgName]);
+#endif
                        }
                }
                else
@@ -377,6 +515,15 @@
                        oneByte[3] = (sal_Int8) ((v >>  0) & 0xFF);
 
                        xOut->writeBytes(oneByte);
+#if OSL_DEBUG_LEVEL > 1
+            ::rtl::OUString sOrgName = 
StorageContainer::jstring2ustring(env,name);
+            if ( getStreams().find(sOrgName + 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"))) != getStreams().end() )
+                sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".data"));
+            else
+                sOrgName += 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".output"));
+
+            fwrite(&oneByte[0],sizeof(sal_Int8),4,getStreams()[sOrgName]);
+#endif
                }
                else
                {




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to