summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@digia.com>2013-07-04 15:44:53 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-07-05 09:24:39 +0200
commit563c9445d4df8d38f776daf46a8132f90981e6d1 (patch)
treed9b4f53be30b3d8b4b8b2942b59e8fdbdfc34e1d
parent1bd8db01c4d3bfe19b0452a7ecf90cec9360c58b (diff)
Clean up evaluation license logic
Instead of storing the application type as a uint, we use the enum provided by QCoreApplicationPrivate. The former resulted in a few cases of wrong logic where the values got mixed up, such as always printing the QtCore console warning, even for GUI applications. The qt_eval_is_supported function has been refactored to return enums instead of magic values, to make the logic easier to read. The same goes for qt_eval_days_left, which now only concerns itself with the number of days left. qt_eval_is_expired() has been added to use for easy checking of expiration date. Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Change-Id: Ia0e85b2103f790a7e02e0d6e567a477b3145fcb9 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
-rw-r--r--src/corelib/global/qlibraryinfo.cpp6
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp4
-rw-r--r--src/corelib/kernel/qcoreapplication_p.h2
-rw-r--r--src/corelib/kernel/qtcore_eval.cpp83
-rw-r--r--src/widgets/kernel/qapplication.cpp2
5 files changed, 47 insertions, 50 deletions
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index 1eaebe5f90..53a3ebbc10 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -479,6 +479,8 @@ QT_END_NAMESPACE
# include <stdio.h>
# include <stdlib.h>
+#include "private/qcoreapplication_p.h"
+
extern const char qt_core_interpreter[] __attribute__((section(".interp")))
= ELF_INTERPRETER;
@@ -501,8 +503,8 @@ void qt_core_boilerplate()
QT_PREPEND_NAMESPACE(qDumpCPUFeatures)();
#ifdef QT_EVAL
- extern void qt_core_eval_init(uint);
- qt_core_eval_init(1);
+ extern void qt_core_eval_init(QCoreApplicationPrivate::Type);
+ qt_core_eval_init(QCoreApplicationPrivate::Tty);
#endif
exit(0);
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index e49d5f961c..0301a40876 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -381,7 +381,7 @@ QCoreApplicationPrivate::QCoreApplicationPrivate(int &aargc, char **aargv, uint
, origArgc(aargc)
, origArgv(new char *[aargc])
#endif
- , application_type(0)
+ , application_type(QCoreApplicationPrivate::Tty)
#ifndef QT_NO_QOBJECT
, in_exec(false)
, aboutToQuitEmitted(false)
@@ -724,7 +724,7 @@ void QCoreApplication::init()
#endif
#ifdef QT_EVAL
- extern void qt_core_eval_init(uint);
+ extern void qt_core_eval_init(QCoreApplicationPrivate::Type);
qt_core_eval_init(d->application_type);
#endif
diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h
index 563a3b2093..6a3bea9c9e 100644
--- a/src/corelib/kernel/qcoreapplication_p.h
+++ b/src/corelib/kernel/qcoreapplication_p.h
@@ -135,7 +135,7 @@ public:
static bool isTranslatorInstalled(QTranslator *translator);
#endif
- uint application_type;
+ QCoreApplicationPrivate::Type application_type;
QString cachedApplicationDirPath;
QString cachedApplicationFilePath;
diff --git a/src/corelib/kernel/qtcore_eval.cpp b/src/corelib/kernel/qtcore_eval.cpp
index e9ff786074..59656883f1 100644
--- a/src/corelib/kernel/qtcore_eval.cpp
+++ b/src/corelib/kernel/qtcore_eval.cpp
@@ -44,6 +44,7 @@
#include <qlibraryinfo.h>
#include <qobject.h>
#include <qcoreapplication.h>
+#include <private/qcoreapplication_p.h>
#include "stdio.h"
#include "stdlib.h"
@@ -52,7 +53,7 @@ QT_BEGIN_NAMESPACE
#include "qconfig_eval.cpp"
-static const char boilerplate_unsuported[] =
+static const char boilerplate_supported_but_time_limited[] =
"\nQt %1 Evaluation License\n"
"Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).\n"
"This trial version may only be used for evaluation purposes\n"
@@ -86,13 +87,19 @@ static const char will_shutdown_now[] =
"timeout and will shut down.\n"
"Contact http://qt.digia.com/contact-us for pricing and purchasing information.\n";
-static int qt_eval_is_supported()
+enum EvaluationStatus {
+ EvaluationNotSupported = 0,
+ EvaluationSupportedButTimeLimited,
+ EvaluationSupported
+};
+
+static EvaluationStatus qt_eval_is_supported()
{
const volatile char *const license_key = qt_eval_key_data + 12;
// fast fail
if (!qt_eval_key_data[0] || !*license_key)
- return -1;
+ return EvaluationNotSupported;
// is this an unsupported evaluation?
const volatile char *typecode = license_key;
@@ -103,31 +110,33 @@ static int qt_eval_is_supported()
if (!field && typecode[1] == '4' && typecode[2] == 'M') {
if (typecode[0] == 'Q')
- return 0;
+ return EvaluationSupportedButTimeLimited;
else if (typecode[0] == 'R' || typecode[0] == 'Z')
- return 1;
+ return EvaluationSupported;
}
- return -1;
+ return EvaluationNotSupported;
}
static int qt_eval_days_left()
{
- if (qt_eval_is_supported() < 0)
- return -2;
-
QDate today = QDate::currentDate();
QDate build = QLibraryInfo::buildDate();
return qMax<qint64>(-1, today.daysTo(build) + 30);
}
+static bool qt_eval_is_expired()
+{
+ return qt_eval_days_left() < 0;
+}
+
static QString qt_eval_string()
{
const char *msg;
switch (qt_eval_is_supported()) {
- case 0:
- msg = boilerplate_unsuported;
+ case EvaluationSupportedButTimeLimited:
+ msg = boilerplate_supported_but_time_limited;
break;
- case 1:
+ case EvaluationSupported:
msg = boilerplate_supported;
break;
default:
@@ -153,7 +162,7 @@ public:
QCoreFuriCuri() : QObject(), warn(-1), kill(-1)
{
- if (!qt_eval_is_supported()) {
+ if (qt_eval_is_supported() == EvaluationSupportedButTimeLimited) {
warn = startTimer(WARN_TIMEOUT);
kill = 0;
}
@@ -173,27 +182,20 @@ public:
#if defined(QT_BUILD_CORE_LIB) || defined (QT_BOOTSTRAPPED)
-void qt_core_eval_init(uint type)
+void qt_core_eval_init(QCoreApplicationPrivate::Type type)
{
- if (!type)
- return; // GUI app
+ if (type != QCoreApplicationPrivate::Tty)
+ return;
- switch (qt_eval_days_left()) {
- case -2:
+ if (!qt_eval_is_supported())
return;
- case -1:
+ if (qt_eval_is_expired()) {
fprintf(stderr, "%s\n", boilerplate_expired);
- if (type == 0) {
- // if we're a console app only.
- exit(0);
- }
-
- default:
+ exit(0);
+ } else {
fprintf(stderr, "%s\n", qPrintable(qt_eval_string()));
- if (type == 0) {
- Q_UNUSED(new QCoreFuriCuri());
- }
+ Q_UNUSED(new QCoreFuriCuri());
}
}
#endif
@@ -453,12 +455,7 @@ public:
{
setWindowTitle(QLatin1String(" "));
- QString str = qt_eval_string();
- if (expired) {
- str = QLatin1String(boilerplate_expired);
- } else {
- str = qt_eval_string();
- }
+ QString str = expired ? QLatin1String(boilerplate_expired) : qt_eval_string();
str = str.trimmed();
QFrame *border = new QFrame(this);
@@ -520,24 +517,22 @@ public:
};
-void qt_gui_eval_init(uint)
+void qt_gui_eval_init(QCoreApplicationPrivate::Type type)
{
- switch (qt_eval_days_left()) {
- case -2:
+ Q_UNUSED(type);
+
+ if (!qt_eval_is_supported())
return;
- case -1: {
+ if (qt_eval_is_expired()) {
EvalMessageBox box(true);
box.exec();
::exit(0);
- }
-
- default: {
+ } else {
EvalMessageBox *box = new EvalMessageBox(false);
box->show();
Q_UNUSED(new QGuiFuriCuri());
}
- }
}
static QString qt_eval_title_prefix()
@@ -547,14 +542,14 @@ static QString qt_eval_title_prefix()
QString qt_eval_adapt_window_title(const QString &title)
{
- if (qt_eval_days_left() == -2)
+ if (!qt_eval_is_supported())
return title;
return qt_eval_title_prefix() + title;
}
void qt_eval_init_widget(QWidget *w)
{
- if (qt_eval_days_left() == -2)
+ if (!qt_eval_is_supported())
return;
if (w->isTopLevel() && w->windowTitle().isEmpty() && w->windowType() != Qt::Desktop ) {
w->setWindowTitle(QLatin1String(" "));
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 61f3b6b8eb..777342d7ae 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -556,7 +556,7 @@ void QApplicationPrivate::construct()
eventDispatcher->startingUp();
#ifdef QT_EVAL
- extern void qt_gui_eval_init(uint);
+ extern void qt_gui_eval_init(QCoreApplicationPrivate::Type);
qt_gui_eval_init(application_type);
#endif