[Libreoffice-commits] .: 4 commits - android/Bootstrap android/experiments cppu/source sal/osl
Tor Lillqvist
tml at kemper.freedesktop.org
Thu Apr 5 10:48:22 PDT 2012
android/Bootstrap/src/org/libreoffice/android/Bootstrap.java | 6
android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java | 2
cppu/source/uno/lbmap.cxx | 4
sal/osl/unx/file.cxx | 78 ++++++++--
4 files changed, 70 insertions(+), 20 deletions(-)
New commits:
commit 0d5f437bf7ee3ea8cf9787ccf8bf22d67eee92b8
Author: Tor Lillqvist <tlillqvist at suse.com>
Date: Thu Apr 5 20:36:08 2012 +0300
Catch attempts to open /assets files read-write. Improve debugging output
diff --git a/sal/osl/unx/file.cxx b/sal/osl/unx/file.cxx
index 5e59f7c..dbf256d 100644
--- a/sal/osl/unx/file.cxx
+++ b/sal/osl/unx/file.cxx
@@ -856,11 +856,11 @@ static int osl_file_queryLocking (sal_uInt32 uFlags)
#ifdef UNX
-oslFileError
-SAL_CALL osl_openMemoryAsFile( void *address, size_t size, oslFileHandle *pHandle )
+static oslFileError
+osl_openMemoryAsFile( void *address, size_t size, oslFileHandle *pHandle, const char *path )
{
oslFileError eRet;
- FileHandle_Impl * pImpl = new FileHandle_Impl (-1, FileHandle_Impl::KIND_MEM);
+ FileHandle_Impl * pImpl = new FileHandle_Impl (-1, FileHandle_Impl::KIND_MEM, path);
if (!pImpl)
{
eRet = oslTranslateFileError (OSL_FET_ERROR, ENOMEM);
@@ -879,6 +879,12 @@ SAL_CALL osl_openMemoryAsFile( void *address, size_t size, oslFileHandle *pHandl
return osl_File_E_None;
}
+oslFileError
+SAL_CALL osl_openMemoryAsFile( void *address, size_t size, oslFileHandle *pHandle )
+{
+ return osl_openMemoryAsFile( address, size, pHandle, "<anon>" );
+}
+
#endif
/****************************************************************************
@@ -901,20 +907,27 @@ SAL_CALL osl_openFilePath( const char *cpFilePath, oslFileHandle* pHandle, sal_u
/* Opening a file from /assets read-only means
* we should mmap it from the .apk file
*/
- if (!(uFlags & osl_File_OpenFlag_Write) &&
- strncmp (cpFilePath, "/assets/", sizeof ("/assets/") - 1) == 0)
+ if (strncmp (cpFilePath, "/assets/", sizeof ("/assets/") - 1) == 0)
{
+ if (uFlags & osl_File_OpenFlag_Write)
+ {
+ // Or should we just silently "open" it read-only and let write
+ // attempts, if any, fail then later?
+ OSL_TRACE("osl_openFile(%s, writeable), not possible!", cpFilePath);
+ errno = EPERM;
+ return osl_File_E_PERM;
+ }
void *address;
size_t size;
address = lo_apkentry(cpFilePath, &size);
- OSL_TRACE("osl_openFile(%s): %p",
+ OSL_TRACE("osl_openFile(%s) => %p",
cpFilePath, address);
if (address == NULL)
{
errno = ENOENT;
return osl_File_E_NOENT;
}
- return osl_openMemoryAsFile(address, size, pHandle);
+ return osl_openMemoryAsFile(address, size, pHandle, cpFilePath);
}
#endif
@@ -952,7 +965,14 @@ SAL_CALL osl_openFilePath( const char *cpFilePath, oslFileHandle* pHandle, sal_u
/* open the file */
int fd = open( cpFilePath, flags, mode );
if (-1 == fd)
- return oslTranslateFileError (OSL_FET_ERROR, errno);
+ {
+ int saved_errno = errno;
+ OSL_TRACE("osl_openFile(%s, %s) failed: %s",
+ cpFilePath,
+ flags & O_RDWR ? "writeable":"readonly",
+ strerror(saved_errno));
+ return oslTranslateFileError (OSL_FET_ERROR, saved_errno);
+ }
/* reset O_NONBLOCK flag */
if (flags & O_NONBLOCK)
@@ -960,13 +980,25 @@ SAL_CALL osl_openFilePath( const char *cpFilePath, oslFileHandle* pHandle, sal_u
int f = fcntl (fd, F_GETFL, 0);
if (-1 == f)
{
- eRet = oslTranslateFileError (OSL_FET_ERROR, errno);
+ int saved_errno = errno;
+ OSL_TRACE("osl_openFile(%s, %s): fcntl(%d, F_GETFL) failed: %s",
+ cpFilePath,
+ flags & O_RDWR ? "writeable":"readonly",
+ fd,
+ strerror(saved_errno));
+ eRet = oslTranslateFileError (OSL_FET_ERROR, saved_errno);
(void) close(fd);
return eRet;
}
if (-1 == fcntl (fd, F_SETFL, (f & ~O_NONBLOCK)))
{
- eRet = oslTranslateFileError (OSL_FET_ERROR, errno);
+ int saved_errno = errno;
+ OSL_TRACE("osl_openFile(%s, %s): fcntl(%d, F_SETFL) failed: %s",
+ cpFilePath,
+ flags & O_RDWR ? "writeable":"readonly",
+ fd,
+ strerror(saved_errno));
+ eRet = oslTranslateFileError (OSL_FET_ERROR, saved_errno);
(void) close(fd);
return eRet;
}
@@ -976,13 +1008,21 @@ SAL_CALL osl_openFilePath( const char *cpFilePath, oslFileHandle* pHandle, sal_u
struct stat aFileStat;
if (-1 == fstat (fd, &aFileStat))
{
- eRet = oslTranslateFileError (OSL_FET_ERROR, errno);
+ int saved_errno = errno;
+ OSL_TRACE("osl_openFile(%s, %s): fstat(%d) failed: %s",
+ cpFilePath,
+ flags & O_RDWR ? "writeable":"readonly",
+ fd,
+ strerror(saved_errno));
+ eRet = oslTranslateFileError (OSL_FET_ERROR, saved_errno);
(void) close(fd);
return eRet;
}
if (!S_ISREG(aFileStat.st_mode))
{
/* we only open regular files here */
+ OSL_TRACE("osl_openFile(%s): not a regular file",
+ cpFilePath);
(void) close(fd);
return osl_File_E_INVAL;
}
@@ -1011,7 +1051,13 @@ SAL_CALL osl_openFilePath( const char *cpFilePath, oslFileHandle* pHandle, sal_u
if (-1 == fcntl (fd, F_SETLK, &aflock))
{
- eRet = oslTranslateFileError (OSL_FET_ERROR, errno);
+ int saved_errno = errno;
+ OSL_TRACE("osl_openFile(%s, %s): fcntl(%d, F_SETLK) failed: %s",
+ cpFilePath,
+ flags & O_RDWR ? "writeable":"readonly",
+ fd,
+ strerror(saved_errno));
+ eRet = oslTranslateFileError (OSL_FET_ERROR, saved_errno);
(void) close(fd);
return eRet;
}
@@ -1031,9 +1077,10 @@ SAL_CALL osl_openFilePath( const char *cpFilePath, oslFileHandle* pHandle, sal_u
pImpl->m_state |= FileHandle_Impl::STATE_WRITEABLE;
pImpl->m_size = sal::static_int_cast< sal_uInt64 >(aFileStat.st_size);
- OSL_TRACE("osl_openFile(%d, %s) => %s", pImpl->m_fd,
+ OSL_TRACE("osl_openFile(%s, %s) => %d",
+ rtl_string_getStr(pImpl->m_strFilePath),
flags & O_RDWR ? "writeable":"readonly",
- rtl_string_getStr(pImpl->m_strFilePath));
+ pImpl->m_fd);
*pHandle = (oslFileHandle)(pImpl);
return osl_File_E_None;
@@ -1072,6 +1119,8 @@ SAL_CALL osl_closeFile( oslFileHandle Handle )
if (pImpl == 0)
return osl_File_E_INVAL;
+ OSL_TRACE("osl_closeFile(%s:%d)", rtl_string_getStr(pImpl->m_strFilePath), pImpl->m_fd);
+
if (pImpl->m_kind == FileHandle_Impl::KIND_MEM)
{
delete pImpl;
@@ -1084,7 +1133,6 @@ SAL_CALL osl_closeFile( oslFileHandle Handle )
(void) pthread_mutex_lock (&(pImpl->m_mutex));
/* close(2) implicitly (and unconditionally) unlocks */
- OSL_TRACE("osl_closeFile(%d) => %s", pImpl->m_fd, rtl_string_getStr(pImpl->m_strFilePath));
oslFileError result = pImpl->syncFile();
if (result != osl_File_E_None)
{
commit 694bb9f5de9128657225f3cab0baa14186c62480
Author: Tor Lillqvist <tlillqvist at suse.com>
Date: Thu Apr 5 20:34:41 2012 +0300
Do two fairly useless but often emitted OSL_TRACEs only if OSL_DEBUG_LEVEL > 2
diff --git a/cppu/source/uno/lbmap.cxx b/cppu/source/uno/lbmap.cxx
index 219a4bf..0dab901 100644
--- a/cppu/source/uno/lbmap.cxx
+++ b/cppu/source/uno/lbmap.cxx
@@ -683,7 +683,7 @@ CPPU_DLLPUBLIC void SAL_CALL uno_registerMapping(
{
OUString aMappingName(
getMappingName( pFrom, pTo, pAddPurpose ? OUString(pAddPurpose) : OUString() ) );
-#if OSL_DEBUG_LEVEL > 1
+#if OSL_DEBUG_LEVEL > 2
OString cstr( OUStringToOString( aMappingName, RTL_TEXTENCODING_ASCII_US ) );
OSL_TRACE( "> inserting new mapping: %s", cstr.getStr() );
#endif
@@ -723,7 +723,7 @@ CPPU_DLLPUBLIC void SAL_CALL uno_revokeMapping(
rData.aMapping2Entry.erase( pEntry->pMapping );
rData.aName2Entry.erase( pEntry->aMappingName );
aGuard.clear();
-#if OSL_DEBUG_LEVEL > 1
+#if OSL_DEBUG_LEVEL > 2
OString cstr( OUStringToOString( pEntry->aMappingName, RTL_TEXTENCODING_ASCII_US ) );
OSL_TRACE( "> revoking mapping %s", cstr.getStr() );
#endif
commit 8451dec867e8443349921c3a5a2fa7c5205a30a6
Author: Tor Lillqvist <tlillqvist at suse.com>
Date: Thu Apr 5 20:32:33 2012 +0300
dlopen() also the sw and swd libs ahead of time so that they can be debugged
diff --git a/android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java b/android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java
index 1be2395..76b545f 100644
--- a/android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java
+++ b/android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java
@@ -56,6 +56,8 @@ public class DocumentLoader
// makes debugging work better, sigh
Bootstrap.dlopen("libvcllo.so");
Bootstrap.dlopen("libmergedlo.so");
+ Bootstrap.dlopen("libswdlo.so");
+ Bootstrap.dlopen("libswlo.so");
com.sun.star.uno.XComponentContext xContext = null;
commit cafcd8577480d79baa070cec3bd1cb973d06f88c
Author: Tor Lillqvist <tlillqvist at suse.com>
Date: Thu Apr 5 20:31:13 2012 +0300
Set TMPDIR also in non-NativeActivity apps
diff --git a/android/Bootstrap/src/org/libreoffice/android/Bootstrap.java b/android/Bootstrap/src/org/libreoffice/android/Bootstrap.java
index 98df770..b562da8 100644
--- a/android/Bootstrap/src/org/libreoffice/android/Bootstrap.java
+++ b/android/Bootstrap/src/org/libreoffice/android/Bootstrap.java
@@ -139,6 +139,9 @@ public class Bootstrap extends NativeActivity
}
if (i != null)
putenv("FONTCONFIG_FILE=" + dataDir + "/etc/fonts/fonts.conf");
+
+ // TMPDIR is used by osl_getTempDirURL()
+ putenv("TMPDIR=" + activity.getCacheDir().getAbsolutePath());
}
@Override
@@ -186,9 +189,6 @@ public class Bootstrap extends NativeActivity
argv = Arrays.copyOfRange(argv, 1, argv.length-1);
}
- // TMPDIR is used by osl_getTempDirURL()
- putenv("TMPDIR=" + getCacheDir().getAbsolutePath());
-
// argv[0] will be replaced by android_main() in lo-bootstrap.c by the
// pathname of the mainLibrary.
String[] newargv = new String[argv.length + 1];
More information about the Libreoffice-commits
mailing list