qvsnprintf.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/corelib/tools/qvsnprintf.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2016 The Qt Company Ltd.-
4** Contact: https://www.qt.io/licensing/-
5**-
6** This file is part of the QtCore module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL$-
9** Commercial License Usage-
10** Licensees holding valid commercial Qt licenses may use this file in-
11** accordance with the commercial license agreement provided with the-
12** Software or, alternatively, in accordance with the terms contained in-
13** a written agreement between you and The Qt Company. For licensing terms-
14** and conditions see https://www.qt.io/terms-conditions. For further-
15** information use the contact form at https://www.qt.io/contact-us.-
16**-
17** GNU Lesser General Public License Usage-
18** Alternatively, this file may be used under the terms of the GNU Lesser-
19** General Public License version 3 as published by the Free Software-
20** Foundation and appearing in the file LICENSE.LGPL3 included in the-
21** packaging of this file. Please review the following information to-
22** ensure the GNU Lesser General Public License version 3 requirements-
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.-
24**-
25** GNU General Public License Usage-
26** Alternatively, this file may be used under the terms of the GNU-
27** General Public License version 2.0 or (at your option) the GNU General-
28** Public license version 3 or any later version approved by the KDE Free-
29** Qt Foundation. The licenses are as published by the Free Software-
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3-
31** included in the packaging of this file. Please review the following-
32** information to ensure the GNU General Public License requirements will-
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and-
34** https://www.gnu.org/licenses/gpl-3.0.html.-
35**-
36** $QT_END_LICENSE$-
37**-
38****************************************************************************/-
39-
40#include "qplatformdefs.h"-
41-
42#include "qbytearray.h"-
43#include "qstring.h"-
44-
45#include "string.h"-
46-
47QT_BEGIN_NAMESPACE-
48-
49#ifndef QT_VSNPRINTF-
50-
51/*!-
52 \relates QByteArray-
53-
54 A portable \c vsnprintf() function. Will call \c ::vsnprintf(), \c-
55 ::_vsnprintf(), or \c ::vsnprintf_s depending on the system, or-
56 fall back to an internal version.-
57-
58 \a fmt is the \c printf() format string. The result is put into-
59 \a str, which is a buffer of at least \a n bytes.-
60-
61 The caller is responsible to call \c va_end() on \a ap.-
62-
63 \warning Since vsnprintf() shows different behavior on certain-
64 platforms, you should not rely on the return value or on the fact-
65 that you will always get a 0 terminated string back.-
66-
67 Ideally, you should never call this function but use QString::asprintf()-
68 instead.-
69-
70 \sa qsnprintf(), QString::asprintf()-
71*/-
72-
73int qvsnprintf(char *str, size_t n, const char *fmt, va_list ap)-
74{-
75 if (!str || !fmt)-
76 return -1;-
77-
78 const QByteArray ba = QString::vasprintf(fmt, ap).toLocal8Bit();-
79-
80 if (n > 0) {-
81 size_t blen = qMin(size_t(ba.length()), size_t(n - 1));-
82 memcpy(str, ba.constData(), blen);-
83 str[blen] = '\0'; // make sure str is always 0 terminated-
84 }-
85-
86 return ba.length();-
87}-
88-
89#else-
90-
91QT_BEGIN_INCLUDE_NAMESPACE-
92#include <stdio.h>-
93QT_END_INCLUDE_NAMESPACE-
94-
95int qvsnprintf(char *str, size_t n, const char *fmt, va_list ap)-
96{-
97 return QT_VSNPRINTF(str, n, fmt, ap);
executed 53383927 times by 512 tests: return ::vsnprintf(str, n, fmt, ap);
Executed by:
  • tst_Collections
  • tst_Compiler
  • tst_Gestures
  • tst_Lancelot
  • tst_LargeFile
  • tst_ModelTest
  • tst_NetworkSelfTest
  • tst_PlatformSocketEngine
  • tst_QAbstractAnimation
  • tst_QAbstractButton
  • tst_QAbstractFileEngine
  • tst_QAbstractItemModel
  • tst_QAbstractItemView
  • tst_QAbstractNetworkCache
  • tst_QAbstractPrintDialog
  • tst_QAbstractProxyModel
  • tst_QAbstractScrollArea
  • tst_QAbstractSlider
  • tst_QAbstractSocket
  • tst_QAbstractSpinBox
  • tst_QAbstractTextDocumentLayout
  • tst_QAccessibility
  • tst_QAction
  • tst_QActionGroup
  • tst_QAlgorithms
  • ...
53383927
98}-
99-
100#endif-
101-
102/*!-
103 \target bytearray-qsnprintf-
104 \relates QByteArray-
105-
106 A portable snprintf() function, calls qvsnprintf.-
107-
108 \a fmt is the \c printf() format string. The result is put into-
109 \a str, which is a buffer of at least \a n bytes.-
110-
111 \warning Call this function only when you know what you are doing-
112 since it shows different behavior on certain platforms.-
113 Use QString::asprintf() to format a string instead.-
114-
115 \sa qvsnprintf(), QString::asprintf()-
116*/-
117-
118int qsnprintf(char *str, size_t n, const char *fmt, ...)-
119{-
120 va_list ap;-
121 va_start(ap, fmt);-
122-
123 int ret = qvsnprintf(str, n, fmt, ap);-
124 va_end(ap);-
125-
126 return ret;
executed 53090499 times by 512 tests: return ret;
Executed by:
  • tst_Collections
  • tst_Compiler
  • tst_Gestures
  • tst_Lancelot
  • tst_LargeFile
  • tst_ModelTest
  • tst_NetworkSelfTest
  • tst_PlatformSocketEngine
  • tst_QAbstractAnimation
  • tst_QAbstractButton
  • tst_QAbstractFileEngine
  • tst_QAbstractItemModel
  • tst_QAbstractItemView
  • tst_QAbstractNetworkCache
  • tst_QAbstractPrintDialog
  • tst_QAbstractProxyModel
  • tst_QAbstractScrollArea
  • tst_QAbstractSlider
  • tst_QAbstractSocket
  • tst_QAbstractSpinBox
  • tst_QAbstractTextDocumentLayout
  • tst_QAccessibility
  • tst_QAction
  • tst_QActionGroup
  • tst_QAlgorithms
  • ...
53090499
127}-
128-
129QT_END_NAMESPACE-
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9