[X2Go-Commits] [libx2goclient] 01/09: src/x2goclient-openssh-version.c: use preprocessor magic in x2goclient_openssh_version_parse () to shorten the error macros.
git-admin at x2go.org
git-admin at x2go.org
Wed May 13 16:41:35 CEST 2020
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch master
in repository libx2goclient.
commit c107c90c816fa722de9a8891660ef582655bacfd
Author: Mihai Moldovan <ionic at ionic.de>
Date: Wed Apr 22 17:42:44 2020 +0200
src/x2goclient-openssh-version.c: use preprocessor magic in x2goclient_openssh_version_parse () to shorten the error macros.
---
src/x2goclient-openssh-version.c | 44 ++++++++++++++++++++++------------------
src/x2goclient-utils.h | 6 ++++++
2 files changed, 30 insertions(+), 20 deletions(-)
diff --git a/src/x2goclient-openssh-version.c b/src/x2goclient-openssh-version.c
index 6fb193a..28b50c3 100644
--- a/src/x2goclient-openssh-version.c
+++ b/src/x2goclient-openssh-version.c
@@ -51,15 +51,19 @@ static X2GoClientOpenSSHVersion* x2goclient_openssh_version_copy (X2GoClientOpen
G_DEFINE_BOXED_TYPE (X2GoClientOpenSSHVersion, x2goclient_openssh_version, &x2goclient_openssh_version_copy, &x2goclient_openssh_version_free)
+#define ERROR_QUARK EXPAND(X2GOCLIENT_OPENSSH_VERSION_ERROR)
+#define GENERATE_ERROR_(preamble, component, error) preamble ## _ ## component ## _ ## error
+#define GENERATE_ERROR(component, error) GENERATE_ERROR_(X2GOCLIENT_OPENSSH_VERSION_ERROR, component, error)
+
void x2goclient_openssh_version_parse (X2GoClientOpenSSHVersion *openssh_version, const gchar *version_string, GError **gerr) {
/* Basic sanity checks on struct and string. */
if (!(openssh_version)) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_INVALID_STRUCT, "No version struct passed, cannot store extracted information.");
+ g_set_error_literal (gerr, ERROR_QUARK, X2GOCLIENT_OPENSSH_VERSION_ERROR_INVALID_STRUCT, "No version struct passed, cannot store extracted information.");
return;
}
if (!(version_string)) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_INVALID_VERSION_STRING, "No version string passed, cannot extract information.");
+ g_set_error_literal (gerr, ERROR_QUARK, X2GOCLIENT_OPENSSH_VERSION_ERROR_INVALID_VERSION_STRING, "No version string passed, cannot extract information.");
return;
}
@@ -73,7 +77,7 @@ void x2goclient_openssh_version_parse (X2GoClientOpenSSHVersion *openssh_version
/* Start with the fixed preamble. */
const gchar *tmp = version_string;
if (!(g_str_has_prefix (tmp, "OpenSSH_"))) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_INVALID_PREAMBLE, "Preamble in version string does not match expected value 'OpenSSH_'.");
+ g_set_error_literal (gerr, ERROR_QUARK, X2GOCLIENT_OPENSSH_VERSION_ERROR_INVALID_PREAMBLE, "Preamble in version string does not match expected value 'OpenSSH_'.");
x2goclient_openssh_version_free (struct_work_copy);
struct_work_copy = NULL;
@@ -85,7 +89,7 @@ void x2goclient_openssh_version_parse (X2GoClientOpenSSHVersion *openssh_version
tmp += 8;
const gchar *dot_search = g_strstr_len (tmp, -1, ".");
if (!(dot_search)) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_NO_MAJOR_SEPARATOR, "Version string does not contain major version number separator.");
+ g_set_error_literal (gerr, ERROR_QUARK, X2GOCLIENT_OPENSSH_VERSION_ERROR_NO_MAJOR_SEPARATOR, "Version string does not contain major version number separator.");
x2goclient_openssh_version_free (struct_work_copy);
struct_work_copy = NULL;
@@ -99,7 +103,7 @@ void x2goclient_openssh_version_parse (X2GoClientOpenSSHVersion *openssh_version
const gchar *int_search = NULL;
for (int_search = tmp; int_search < dot_search; ++int_search) {
if (!(g_ascii_isdigit (*int_search))) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_MAJOR_NOT_NUMERIC, "Major version number is not numeric.");
+ g_set_error_literal (gerr, ERROR_QUARK, X2GOCLIENT_OPENSSH_VERSION_ERROR_MAJOR_NOT_NUMERIC, "Major version number is not numeric.");
x2goclient_openssh_version_free (struct_work_copy);
struct_work_copy = NULL;
@@ -120,22 +124,22 @@ void x2goclient_openssh_version_parse (X2GoClientOpenSSHVersion *openssh_version
if (conv_err) {
if (min_err) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_MAJOR_UNDERFLOW, "Major version number is too small to fit into long long type.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (MAJOR, UNDERFLOW), "Major version number is too small to fit into long long type.");
}
else if (max_err) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_MAJOR_OVERFLOW, "Major version number is too big to fit into long long type.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (MAJOR, OVERFLOW), "Major version number is too big to fit into long long type.");
}
else {
end = NULL;
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_MAJOR_NOT_NUMERIC, "Major version number is not numeric.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (MAJOR, NOT_NUMERIC), "Major version number is not numeric.");
}
}
else {
if (min_err) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_MAJOR_NEGATIVE, "Major version number is not numeric.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (MAJOR, NEGATIVE), "Major version number is not numeric.");
}
else if (max_err) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_MAJOR_TOO_BIG, "Major version number is too big.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (MAJOR, TOO_BIG), "Major version number is too big.");
}
else {
struct_work_copy->major = conv;
@@ -167,22 +171,22 @@ void x2goclient_openssh_version_parse (X2GoClientOpenSSHVersion *openssh_version
if (conv_err) {
if (min_err) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_MINOR_UNDERFLOW, "Minor version number is too small to fit into long long type.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (MINOR, UNDERFLOW), "Minor version number is too small to fit into long long type.");
}
else if (max_err) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_MINOR_OVERFLOW, "Minor version number is too big to fit into long long type.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (MINOR, OVERFLOW), "Minor version number is too big to fit into long long type.");
}
else {
end = NULL;
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_MINOR_NOT_NUMERIC, "Minor version number is not numeric.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (MINOR, NOT_NUMERIC), "Minor version number is not numeric.");
}
}
else {
if (min_err) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_MINOR_NEGATIVE, "Minor version number is not numeric.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (MINOR, NEGATIVE), "Minor version number is not numeric.");
}
else if (max_err) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_MINOR_TOO_BIG, "Minor version number is too big.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (MINOR, TOO_BIG), "Minor version number is too big.");
}
else {
struct_work_copy->minor = conv;
@@ -222,22 +226,22 @@ void x2goclient_openssh_version_parse (X2GoClientOpenSSHVersion *openssh_version
if (conv_err) {
if (min_err) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_PATCH_UNDERFLOW, "Patch version number is too small to fit into long long type.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (PATCH, UNDERFLOW), "Patch version number is too small to fit into long long type.");
}
else if (max_err) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_PATCH_OVERFLOW, "Patch version number is too big to fit into long long type.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (PATCH, OVERFLOW), "Patch version number is too big to fit into long long type.");
}
else {
end = NULL;
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_PATCH_NOT_NUMERIC, "Patch version number is not numeric.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (PATCH, NOT_NUMERIC), "Patch version number is not numeric.");
}
}
else {
if (min_err) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_PATCH_NEGATIVE, "Patch version number is not numeric.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (PATCH, NEGATIVE), "Patch version number is not numeric.");
}
else if (max_err) {
- g_set_error_literal (gerr, X2GOCLIENT_OPENSSH_VERSION_ERROR, X2GOCLIENT_OPENSSH_VERSION_ERROR_PATCH_TOO_BIG, "Patch version number is too big.");
+ g_set_error_literal (gerr, ERROR_QUARK, GENERATE_ERROR (PATCH, TOO_BIG), "Patch version number is too big.");
}
else {
struct_work_copy->patch = conv;
diff --git a/src/x2goclient-utils.h b/src/x2goclient-utils.h
index 1a100d2..02727a3 100644
--- a/src/x2goclient-utils.h
+++ b/src/x2goclient-utils.h
@@ -31,6 +31,12 @@
G_BEGIN_DECLS
+#define EMPTY(...)
+#define DEFER(...) __VA_ARGS__ EMPTY()
+#define OBSTRUCT(...) __VA_ARGS__ DEFER(EMPTY)()
+#define EXPAND(...) __VA_ARGS__
+#define PASTER(x, y) x ## _ ## y
+
void x2goclient_clear_strings (gpointer data);
long long x2goclient_str_to_int (const gchar *restrict str, _Bool min, long long limit_min, _Bool max, long long limit_max, const gchar **restrict end, _Bool *restrict conv_err, _Bool *restrict min_err, _Bool *restrict max_err);
--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/libx2goclient.git
More information about the x2go-commits
mailing list