journald-native 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f07112165499f340a1a856b2f5eb952ab67512c3
|
4
|
+
data.tar.gz: 084815636014a24e2cc2500853b15b2aba90f713
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 846465074f639a88087fa6a7b164a7c177c49877fa7b0115392917fd5f229c0860450a7632cacda6c835518bba766fbc98260fa2c45a7f2cef403853283c02c5
|
7
|
+
data.tar.gz: 27e0430e831019f557f68e715a9bf60b9902c108617a103481a3251d514d66f3acc79620cc8dcb1a06be94c3003e83cd4fd3c405ff6a36ba8f5c80ad692809ef
|
@@ -7,6 +7,9 @@
|
|
7
7
|
|
8
8
|
namespace journald_native {
|
9
9
|
|
10
|
+
namespace {
|
11
|
+
|
12
|
+
/* aux */
|
10
13
|
// just a short alias for ruby_raisable_call()
|
11
14
|
template <typename Func, typename... Args>
|
12
15
|
inline auto r(Func f, Args... args) -> decltype(f(args...))
|
@@ -14,91 +17,39 @@ inline auto r(Func f, Args... args) -> decltype(f(args...))
|
|
14
17
|
return ruby_exception_wrapper::ruby_raisable_call(f, args...);
|
15
18
|
}
|
16
19
|
|
17
|
-
|
18
|
-
|
19
|
-
inline void init_methods(VALUE module);
|
20
|
-
|
21
|
-
/* methods */
|
22
|
-
VALUE native_print(VALUE self, VALUE priority, VALUE message);
|
23
|
-
VALUE native_send(int argc, VALUE* argv, VALUE self);
|
24
|
-
VALUE native_perror(VALUE self, VALUE message);
|
25
|
-
inline VALUE native_print_impl(VALUE v_self, VALUE v_priority, VALUE v_message);
|
26
|
-
inline VALUE native_send_impl(int argc, VALUE* argv, VALUE self);
|
27
|
-
inline VALUE native_perror_impl(VALUE v_self, VALUE v_message);
|
28
|
-
|
29
|
-
/* aux */
|
30
|
-
std::string create_safe_string(VALUE string); // throws ruby exceptions
|
31
|
-
|
32
|
-
/* initializers */
|
33
|
-
void init_modules()
|
34
|
-
{
|
35
|
-
// no nontrivial destructors during initialization, no need for ruby catch
|
36
|
-
|
37
|
-
VALUE mJournald = rb_define_module("Journald");
|
38
|
-
VALUE mNative = rb_define_module_under(mJournald, "Native");
|
39
|
-
|
40
|
-
init_constants(mJournald); // add constants to Journald
|
41
|
-
init_methods(mNative); // add methods to Journald::Native
|
42
|
-
}
|
43
|
-
|
44
|
-
inline void init_constants(VALUE module)
|
20
|
+
// Remove zeros from the string
|
21
|
+
std::string create_safe_string(VALUE v_string)
|
45
22
|
{
|
46
|
-
|
47
|
-
|
48
|
-
rb_define_const(module, "LOG_CRIT", INT2NUM(LOG_CRIT)); /* critical conditions */
|
49
|
-
rb_define_const(module, "LOG_ERR", INT2NUM(LOG_ERR)); /* error conditions */
|
50
|
-
rb_define_const(module, "LOG_WARNING", INT2NUM(LOG_WARNING)); /* warning conditions */
|
51
|
-
rb_define_const(module, "LOG_NOTICE", INT2NUM(LOG_NOTICE)); /* normal but significant condition */
|
52
|
-
rb_define_const(module, "LOG_INFO", INT2NUM(LOG_INFO)); /* informational */
|
53
|
-
rb_define_const(module, "LOG_DEBUG", INT2NUM(LOG_DEBUG)); /* debug-level messages */
|
54
|
-
}
|
23
|
+
/* convert to string */
|
24
|
+
r(rb_string_value, &v_string);
|
55
25
|
|
56
|
-
|
57
|
-
|
58
|
-
rb_define_singleton_method(module, "print", RUBY_METHOD_FUNC(native_print), 2);
|
59
|
-
rb_define_singleton_method(module, "send", RUBY_METHOD_FUNC(native_send), -1); /* -1 to pass as C array */
|
60
|
-
rb_define_singleton_method(module, "perror", RUBY_METHOD_FUNC(native_perror), 1);
|
61
|
-
}
|
26
|
+
char* str = (char *)RSTRING_PTR(v_string);
|
27
|
+
size_t len = (size_t)RSTRING_LEN(v_string);
|
62
28
|
|
63
|
-
|
64
|
-
|
65
|
-
try {
|
66
|
-
return native_print_impl(v_self, v_priority, v_message);
|
67
|
-
} catch(ruby_exception_wrapper::RbWrappedException &e) {
|
68
|
-
rb_exc_raise(e.getRubyException());
|
69
|
-
}
|
70
|
-
}
|
29
|
+
std::string safe_str;
|
30
|
+
safe_str.reserve(len);
|
71
31
|
|
72
|
-
|
73
|
-
{
|
74
|
-
|
75
|
-
|
76
|
-
} catch(ruby_exception_wrapper::RbWrappedException &e) {
|
77
|
-
rb_exc_raise(e.getRubyException());
|
32
|
+
for (size_t i = 0; i < len; i++) {
|
33
|
+
if (str[i]) {
|
34
|
+
safe_str += str[i];
|
35
|
+
}
|
78
36
|
}
|
79
|
-
}
|
80
37
|
|
81
|
-
|
82
|
-
{
|
83
|
-
try {
|
84
|
-
return native_perror_impl(v_self, v_message);
|
85
|
-
} catch(ruby_exception_wrapper::RbWrappedException &e) {
|
86
|
-
rb_exc_raise(e.getRubyException());
|
87
|
-
}
|
38
|
+
return safe_str;
|
88
39
|
}
|
89
40
|
|
90
41
|
/* methods */
|
91
|
-
inline VALUE
|
42
|
+
inline VALUE native_print(VALUE v_self, VALUE v_priority, VALUE v_message)
|
92
43
|
{
|
93
44
|
int priority = NUM2INT(v_priority);
|
94
|
-
auto message = create_safe_string(v_message);
|
45
|
+
auto message = create_safe_string(v_message);
|
95
46
|
|
96
47
|
int result = sd_journal_print(priority, "%s", message.c_str());
|
97
48
|
|
98
49
|
return INT2NUM(result);
|
99
50
|
}
|
100
51
|
|
101
|
-
inline VALUE
|
52
|
+
inline VALUE native_send(int argc, VALUE* argv, VALUE v_self)
|
102
53
|
{
|
103
54
|
auto msgs = std::make_unique<iovec[]>((size_t)argc);
|
104
55
|
|
@@ -114,36 +65,57 @@ inline VALUE native_send_impl(int argc, VALUE* argv, VALUE v_self)
|
|
114
65
|
return INT2NUM(result);
|
115
66
|
}
|
116
67
|
|
117
|
-
inline VALUE
|
68
|
+
inline VALUE native_perror(VALUE v_self, VALUE v_message)
|
118
69
|
{
|
119
|
-
auto message = create_safe_string(v_message);
|
70
|
+
auto message = create_safe_string(v_message);
|
120
71
|
|
121
72
|
int result = sd_journal_perror(message.c_str());
|
122
73
|
|
123
74
|
return INT2NUM(result);
|
124
75
|
}
|
125
76
|
|
126
|
-
|
127
|
-
* Remove zeros from the string
|
128
|
-
*/
|
129
|
-
std::string create_safe_string(VALUE v_string)
|
77
|
+
VALUE is_dummy(VALUE v_self = Qnil)
|
130
78
|
{
|
131
|
-
|
132
|
-
|
79
|
+
constexpr VALUE dummy = JOURNALD_NATIVE_SD_JOURNAL_DUMMY ? Qtrue : Qfalse;
|
80
|
+
return dummy;
|
81
|
+
}
|
133
82
|
|
134
|
-
|
135
|
-
|
83
|
+
/* initializers */
|
84
|
+
inline void init_journald(VALUE module)
|
85
|
+
{
|
86
|
+
rb_define_const(module, "LOG_EMERG", INT2NUM(LOG_EMERG)); /* system is unusable */
|
87
|
+
rb_define_const(module, "LOG_ALERT", INT2NUM(LOG_ALERT)); /* action must be taken immediately */
|
88
|
+
rb_define_const(module, "LOG_CRIT", INT2NUM(LOG_CRIT)); /* critical conditions */
|
89
|
+
rb_define_const(module, "LOG_ERR", INT2NUM(LOG_ERR)); /* error conditions */
|
90
|
+
rb_define_const(module, "LOG_WARNING", INT2NUM(LOG_WARNING)); /* warning conditions */
|
91
|
+
rb_define_const(module, "LOG_NOTICE", INT2NUM(LOG_NOTICE)); /* normal but significant condition */
|
92
|
+
rb_define_const(module, "LOG_INFO", INT2NUM(LOG_INFO)); /* informational */
|
93
|
+
rb_define_const(module, "LOG_DEBUG", INT2NUM(LOG_DEBUG)); /* debug-level messages */
|
94
|
+
}
|
136
95
|
|
137
|
-
|
138
|
-
|
96
|
+
inline void init_native(VALUE module)
|
97
|
+
{
|
98
|
+
// methods
|
99
|
+
rb_define_singleton_method(module, "print", RXW_WRAPPED_METHOD_FUNC(native_print, VALUE, VALUE, VALUE), 2);
|
100
|
+
rb_define_singleton_method(module, "send", RXW_WRAPPED_METHOD_FUNC(native_send, int, VALUE*, VALUE), -1); /* -1 to pass as C array */
|
101
|
+
rb_define_singleton_method(module, "perror", RXW_WRAPPED_METHOD_FUNC(native_perror, VALUE, VALUE), 1);
|
102
|
+
|
103
|
+
// dummy detection
|
104
|
+
rb_define_const(module, "IS_DUMMY", is_dummy());
|
105
|
+
rb_define_singleton_method(module, "dummy?", RUBY_METHOD_FUNC(is_dummy), 0);
|
106
|
+
}
|
139
107
|
|
140
|
-
|
141
|
-
if (str[i]) {
|
142
|
-
safe_str += str[i];
|
143
|
-
}
|
144
|
-
}
|
108
|
+
} // private namespace
|
145
109
|
|
146
|
-
|
110
|
+
void init_modules()
|
111
|
+
{
|
112
|
+
// no nontrivial destructors during initialization, no need for ruby catch
|
113
|
+
|
114
|
+
VALUE mJournald = rb_define_module("Journald");
|
115
|
+
VALUE mNative = rb_define_module_under(mJournald, "Native");
|
116
|
+
|
117
|
+
init_journald(mJournald); // add constants to Journald
|
118
|
+
init_native(mNative); // add methods to Journald::Native
|
147
119
|
}
|
148
120
|
|
149
121
|
}
|
@@ -9,6 +9,10 @@
|
|
9
9
|
|
10
10
|
#include "cpp14shiv.h" // make this c++14 code c++11 compatible; remove for c++14
|
11
11
|
|
12
|
+
// wrap functions, prototype required, i.e. RXW_WRAPPED_METHOD_FUNC(native_send, int, VALUE*, VALUE)
|
13
|
+
// functions can be inline
|
14
|
+
#define RXW_WRAPPED_METHOD_FUNC(method, ...) ((VALUE (*)(ANYARGS))::ruby_exception_wrapper::method_wrapper_call<decltype(&method), method, __VA_ARGS__>)
|
15
|
+
|
12
16
|
namespace ruby_exception_wrapper {
|
13
17
|
|
14
18
|
class RbWrappedException: public std::exception {
|
@@ -22,7 +26,7 @@ namespace ruby_exception_wrapper {
|
|
22
26
|
VALUE rethrow_as_cpp(VALUE put_exception_here_ptr, VALUE exception);
|
23
27
|
|
24
28
|
namespace {
|
25
|
-
// do real call of function from template
|
29
|
+
// do real call of function from template
|
26
30
|
template <typename FuncPointer, typename... Args>
|
27
31
|
inline VALUE call_wrapper_tuple_impl(FuncPointer& fp, Args... args)
|
28
32
|
{
|
@@ -86,6 +90,16 @@ namespace ruby_exception_wrapper {
|
|
86
90
|
return result;
|
87
91
|
}
|
88
92
|
|
93
|
+
template <typename Func, Func func, typename... Args>
|
94
|
+
VALUE method_wrapper_call(Args... args)
|
95
|
+
{
|
96
|
+
try {
|
97
|
+
return func(args...);
|
98
|
+
} catch(RbWrappedException &e) {
|
99
|
+
rb_exc_raise(e.getRubyException());
|
100
|
+
}
|
101
|
+
}
|
102
|
+
|
89
103
|
}
|
90
104
|
|
91
105
|
#endif
|
@@ -3,6 +3,8 @@
|
|
3
3
|
|
4
4
|
#ifdef __linux__
|
5
5
|
|
6
|
+
#define JOURNALD_NATIVE_SD_JOURNAL_DUMMY false
|
7
|
+
|
6
8
|
/* do the real stuff */
|
7
9
|
|
8
10
|
#include "extconf.h"
|
@@ -32,6 +34,8 @@
|
|
32
34
|
|
33
35
|
#else
|
34
36
|
|
37
|
+
#define JOURNALD_NATIVE_SD_JOURNAL_DUMMY true
|
38
|
+
|
35
39
|
#warning Compiling dummy version of the gem for non-Linux OS
|
36
40
|
|
37
41
|
#include "sd_journal_dummy.h"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: journald-native
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Smirnov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -98,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
98
98
|
version: '0'
|
99
99
|
requirements: []
|
100
100
|
rubyforge_project:
|
101
|
-
rubygems_version: 2.
|
101
|
+
rubygems_version: 2.4.3
|
102
102
|
signing_key:
|
103
103
|
specification_version: 4
|
104
104
|
summary: systemd-journal logging native lib wrapper
|