summaryrefslogtreecommitdiff
path: root/sal/osl/unx/uunxapi.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sal/osl/unx/uunxapi.cxx')
-rw-r--r--sal/osl/unx/uunxapi.cxx130
1 files changed, 130 insertions, 0 deletions
diff --git a/sal/osl/unx/uunxapi.cxx b/sal/osl/unx/uunxapi.cxx
new file mode 100644
index 000000000000..299ea4198fdc
--- /dev/null
+++ b/sal/osl/unx/uunxapi.cxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sal.hxx"
+
+ #ifndef _OSL_UUNXAPI_H_
+ #include "uunxapi.h"
+ #endif
+
+ #ifndef __OSL_SYSTEM_H__
+ #include "system.h"
+ #endif
+
+ #ifndef _LIMITS_H
+ #include <limits.h>
+ #endif
+
+ #ifndef _RTL_USTRING_HXX_
+ #include <rtl/ustring.hxx>
+ #endif
+
+ #ifndef _OSL_THREAD_H_
+ #include <osl/thread.h>
+ #endif
+
+ //###########################
+ inline rtl::OString OUStringToOString(const rtl_uString* s)
+ {
+ return rtl::OUStringToOString(
+ rtl::OUString(const_cast<rtl_uString*>(s)),
+ osl_getThreadTextEncoding());
+ }
+
+ //###########################
+#ifdef MACOSX
+/*
+ * Helper function for resolving Mac native alias files (not the same as unix alias files)
+ * and to return the resolved alias as rtl::OString
+ */
+ inline rtl::OString macxp_resolveAliasAndConvert(const rtl_uString* s)
+ {
+ rtl::OString p = OUStringToOString(s);
+ sal_Char path[PATH_MAX];
+ if (p.getLength() < PATH_MAX)
+ {
+ strcpy(path, p.getStr());
+ macxp_resolveAlias(path, PATH_MAX);
+ p = rtl::OString(path);
+ }
+ return p;
+ }
+#endif /* MACOSX */
+
+ //###########################
+ //access_u
+ int access_u(const rtl_uString* pustrPath, int mode)
+ {
+#ifndef MACOSX // not MACOSX
+ return access(OUStringToOString(pustrPath).getStr(), mode);
+#else
+ return access(macxp_resolveAliasAndConvert(pustrPath).getStr(), mode);
+#endif
+ }
+
+ //#########################
+ //realpath_u
+ sal_Bool realpath_u(const rtl_uString* pustrFileName, rtl_uString** ppustrResolvedName)
+ {
+#ifndef MACOSX // not MACOSX
+ rtl::OString fn = OUStringToOString(pustrFileName);
+#else
+ rtl::OString fn = macxp_resolveAliasAndConvert(pustrFileName);
+#endif
+ char rp[PATH_MAX];
+ bool bRet = realpath(fn.getStr(), rp);
+
+ if (bRet)
+ {
+ rtl::OUString resolved = rtl::OStringToOUString(
+ rtl::OString(static_cast<sal_Char*>(rp)),
+ osl_getThreadTextEncoding());
+
+ rtl_uString_assign(ppustrResolvedName, resolved.pData);
+ }
+ return bRet;
+ }
+
+ //#########################
+ //lstat_u
+ int lstat_u(const rtl_uString* pustrPath, struct stat* buf)
+ {
+#ifndef MACOSX // not MACOSX
+ return lstat(OUStringToOString(pustrPath).getStr(), buf);
+#else
+ return lstat(macxp_resolveAliasAndConvert(pustrPath).getStr(), buf);
+#endif
+ }
+
+ //#########################
+ // @see mkdir
+ int mkdir_u(const rtl_uString* path, mode_t mode)
+ {
+ return mkdir(OUStringToOString(path).getStr(), mode);
+ }
+