summaryrefslogtreecommitdiff
path: root/sal/osl/all
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2011-10-08 12:58:14 +0200
committerStephan Bergmann <sbergman@redhat.com>2011-10-08 12:59:09 +0200
commit6b900b8bede24c8710d62e9e7cbff613a0b12f9f (patch)
tree7171825495fa78eb93b23ca9c2d30f26da45f91b /sal/osl/all
parent8ac7152ca8b3b71c17ea55ec9e660804990ab86c (diff)
Introduced OSL_FORMAT, adpated some places to it.
Diffstat (limited to 'sal/osl/all')
-rw-r--r--sal/osl/all/formatstring.cxx58
-rw-r--r--sal/osl/all/makefile.mk2
2 files changed, 60 insertions, 0 deletions
diff --git a/sal/osl/all/formatstring.cxx b/sal/osl/all/formatstring.cxx
new file mode 100644
index 000000000000..9741745dc45b
--- /dev/null
+++ b/sal/osl/all/formatstring.cxx
@@ -0,0 +1,58 @@
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Major Contributor(s):
+ * [ Copyright (C) 2011 Stephan Bergmann, Red Hat Inc. <sbergman@redhat.com>
+ * (initial developer) ]
+ *
+ * All Rights Reserved.
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#include "precompiled_sal.hxx"
+#include "sal/config.h"
+
+#include <cstdarg>
+#include <cstring>
+#include <stdio.h> // vsnprintf not in C++03 <cstdio>, only C99 <stdio.h>
+
+#include "osl/diagnose.h"
+#include "rtl/string.hxx"
+
+rtl::OString osl_detail_formatString(char const * format, ...)
+ SAL_THROW_EXTERN_C()
+{
+ // Avoid the use of other sal code as much as possible, so that this code
+ // can be called from other sal code without causing endless recursion:
+ char buf[1024];
+ int n1 = sizeof buf - RTL_CONSTASCII_LENGTH("...");
+ std::va_list args;
+ va_start(args, format);
+ int n2 = vsnprintf(buf, n1, format, args);
+ va_end(args);
+ if (n2 < 0) {
+ std::strcpy(buf, "???");
+ n2 = RTL_CONSTASCII_LENGTH("???");
+ } else if (n2 >= n1) {
+ std::strcpy(buf + n1 - 1, "...");
+ n2 = sizeof buf - 1;
+ }
+ return rtl::OString(buf, n2);
+}
diff --git a/sal/osl/all/makefile.mk b/sal/osl/all/makefile.mk
index fa928412ffc3..d9db5b7bb749 100644
--- a/sal/osl/all/makefile.mk
+++ b/sal/osl/all/makefile.mk
@@ -50,6 +50,7 @@ CXXFLAGS+= $(LFS_CFLAGS)
SLOFILES= \
$(SLO)$/utility.obj\
$(SLO)$/filepath.obj\
+ $(SLO)$/formatstring.obj\
$(SLO)$/debugbase.obj\
$(SLO)$/loadmodulerelative.obj \
$(SLO)/printtrace.obj
@@ -57,6 +58,7 @@ SLOFILES= \
OBJFILES= \
$(OBJ)$/utility.obj\
$(OBJ)$/filepath.obj\
+ $(OBJ)$/formatstring.obj\
$(OBJ)$/debugbase.obj\
$(OBJ)$/loadmodulerelative.obj \
$(OBJ)/printtrace.obj