tools/qvsnprintf.cpp

Source codeSwitch to Preprocessed file
LineSource CodeCoverage
1/**************************************************************************** -
2** -
3** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -
4** Contact: http://www.qt-project.org/legal -
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 Digia. For licensing terms and -
14** conditions see http://qt.digia.com/licensing. For further information -
15** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software -
20** Foundation and appearing in the file LICENSE.LGPL included in the -
21** packaging of this file. Please review the following information to -
22** ensure the GNU Lesser General Public License version 2.1 requirements -
23** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -
24** -
25** In addition, as a special exception, Digia gives you certain additional -
26** rights. These rights are described in the Digia Qt LGPL Exception -
27** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -
28** -
29** GNU General Public License Usage -
30** Alternatively, this file may be used under the terms of the GNU -
31** General Public License version 3.0 as published by the Free Software -
32** Foundation and appearing in the file LICENSE.GPL included in the -
33** packaging of this file. Please review the following information to -
34** ensure the GNU General Public License version 3.0 requirements will be -
35** met: http://www.gnu.org/copyleft/gpl.html. -
36** -
37** -
38** $QT_END_LICENSE$ -
39** -
40****************************************************************************/ -
41 -
42#include "qplatformdefs.h" -
43 -
44#include "qbytearray.h" -
45#include "qstring.h" -
46 -
47#include "string.h" -
48 -
49QT_BEGIN_NAMESPACE -
50 -
51#ifndef QT_VSNPRINTF -
52 -
53/*! -
54 \relates QByteArray -
55 -
56 A portable \c vsnprintf() function. Will call \c ::vsnprintf(), \c -
57 ::_vsnprintf(), or \c ::vsnprintf_s depending on the system, or -
58 fall back to an internal version. -
59 -
60 \a fmt is the \c printf() format string. The result is put into -
61 \a str, which is a buffer of at least \a n bytes. -
62 -
63 The caller is responsible to call \c va_end() on \a ap. -
64 -
65 \warning Since vsnprintf() shows different behavior on certain -
66 platforms, you should not rely on the return value or on the fact -
67 that you will always get a 0 terminated string back. -
68 -
69 Ideally, you should never call this function but use QString::sprintf() -
70 instead. -
71 -
72 \sa qsnprintf(), QString::sprintf() -
73*/ -
74 -
75int qvsnprintf(char *str, size_t n, const char *fmt, va_list ap) -
76{ -
77 if (!str || !fmt) -
78 return -1; -
79 -
80 QString buf; -
81 buf.vsprintf(fmt, ap); -
82 -
83 QByteArray ba = buf.toLocal8Bit(); -
84 -
85 if (n > 0) { -
86 size_t blen = qMin(size_t(ba.length()), size_t(n - 1)); -
87 memcpy(str, ba.constData(), blen); -
88 str[blen] = '\0'; // make sure str is always 0 terminated -
89 } -
90 -
91 return ba.length(); -
92} -
93 -
94#else -
95 -
96QT_BEGIN_INCLUDE_NAMESPACE -
97#include <stdio.h> -
98QT_END_INCLUDE_NAMESPACE -
99 -
100int qvsnprintf(char *str, size_t n, const char *fmt, va_list ap) -
101{ -
102 return QT_VSNPRINTF(str, n, fmt, ap);
executed: return ::vsnprintf(str, n, fmt, ap);
Execution Count:80961457
80961457
103} -
104 -
105#endif -
106 -
107/*! -
108 \relates QByteArray -
109 -
110 A portable snprintf() function, calls qvsnprintf. -
111 -
112 \a fmt is the \c printf() format string. The result is put into -
113 \a str, which is a buffer of at least \a n bytes. -
114 -
115 \warning Call this function only when you know what you are doing -
116 since it shows different behavior on certain platforms. -
117 Use QString::sprintf() to format a string instead. -
118 -
119 \sa qvsnprintf(), QString::sprintf() -
120*/ -
121 -
122int qsnprintf(char *str, size_t n, const char *fmt, ...) -
123{ -
124 va_list ap;
executed (the execution status of this line is deduced): va_list ap;
-
125 va_start(ap, fmt);
executed (the execution status of this line is deduced): __builtin_va_start(ap,fmt);
-
126 -
127 int ret = qvsnprintf(str, n, fmt, ap);
executed (the execution status of this line is deduced): int ret = qvsnprintf(str, n, fmt, ap);
-
128 va_end(ap);
executed (the execution status of this line is deduced): __builtin_va_end(ap);
-
129 -
130 return ret;
executed: return ret;
Execution Count:80853337
80853337
131} -
132 -
133QT_END_NAMESPACE -
134 -
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial