rotoscope 0.3.0.pre.5 → 0.3.0.pre.6
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 +4 -4
- data/ext/rotoscope/rotoscope.c +28 -4
- data/ext/rotoscope/rotoscope.h +20 -17
- data/lib/rotoscope/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e1efb6a5e9839ddf8219a7cfe6287195f0efbc5
|
4
|
+
data.tar.gz: 91bb41de1a6c892ccd9bb0f6e9b437c67fe90c68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 436314656fd8c5e6ebabfd3b89b3ad2951b7073f530b3ac1381c04ad0a972fe3e434595c8e0a07e0c13e6ef1c5f1177bcc270b5995a15538466a7c2553637a26
|
7
|
+
data.tar.gz: fae7fbf6c7c84b337579b1270f0620860dde11c0f88f8a526d2bfca87cf3eae8b2eee15de56c2ca3aca631538233bb351770f3c30cfda77fd0b4f1c3d73096d8
|
data/ext/rotoscope/rotoscope.c
CHANGED
@@ -14,7 +14,8 @@
|
|
14
14
|
#include "tracepoint.h"
|
15
15
|
|
16
16
|
VALUE cRotoscope, cTracePoint;
|
17
|
-
ID id_initialize;
|
17
|
+
ID id_initialize, id_gsub;
|
18
|
+
VALUE str_quote, str_escaped_quote;
|
18
19
|
|
19
20
|
static unsigned long gettid() {
|
20
21
|
return NUM2ULONG(rb_obj_id(rb_thread_current()));
|
@@ -119,8 +120,18 @@ static rs_tracepoint_t extract_full_tracevals(rb_trace_arg_t *trace_arg,
|
|
119
120
|
|
120
121
|
static bool in_fork(Rotoscope *config) { return config->pid != getpid(); }
|
121
122
|
|
123
|
+
VALUE escape_csv_string(VALUE string) {
|
124
|
+
if (!memchr(RSTRING_PTR(string), '"', RSTRING_LEN(string))) {
|
125
|
+
return string;
|
126
|
+
}
|
127
|
+
return rb_funcall(string, id_gsub, 2, str_quote, str_escaped_quote);
|
128
|
+
}
|
129
|
+
|
122
130
|
static void log_trace_event(FILE *stream, rs_tracepoint_t *trace) {
|
123
|
-
|
131
|
+
VALUE escaped_method_name = escape_csv_string(trace->method_name);
|
132
|
+
fprintf(stream, RS_CSV_FORMAT "\n",
|
133
|
+
RS_CSV_VALUES(trace, escaped_method_name));
|
134
|
+
RB_GC_GUARD(escaped_method_name);
|
124
135
|
}
|
125
136
|
|
126
137
|
unsigned char output_buffer[LOG_BUFFER_SIZE];
|
@@ -128,8 +139,15 @@ static void log_trace_event_with_caller(FILE *stream,
|
|
128
139
|
rs_stack_frame_t *stack_frame,
|
129
140
|
rs_stack_frame_t *caller_frame,
|
130
141
|
rs_strmemo_t **call_memo) {
|
131
|
-
|
132
|
-
|
142
|
+
VALUE escaped_method_name = escape_csv_string(stack_frame->tp.method_name);
|
143
|
+
VALUE escaped_caller_method_name =
|
144
|
+
escape_csv_string(caller_frame->tp.method_name);
|
145
|
+
snprintf(
|
146
|
+
(char *)output_buffer, LOG_BUFFER_SIZE, RS_FLATTENED_CSV_FORMAT "\n",
|
147
|
+
RS_FLATTENED_CSV_VALUES(&stack_frame->tp, &caller_frame->tp,
|
148
|
+
escaped_method_name, escaped_caller_method_name));
|
149
|
+
RB_GC_GUARD(escaped_method_name);
|
150
|
+
RB_GC_GUARD(escaped_caller_method_name);
|
133
151
|
|
134
152
|
if (rs_strmemo_uniq(call_memo, output_buffer)) {
|
135
153
|
fputs((char *)output_buffer, stream);
|
@@ -368,6 +386,12 @@ void Init_rotoscope(void) {
|
|
368
386
|
cTracePoint = rb_const_get(rb_cObject, rb_intern("TracePoint"));
|
369
387
|
|
370
388
|
id_initialize = rb_intern("initialize");
|
389
|
+
id_gsub = rb_intern("gsub");
|
390
|
+
|
391
|
+
str_quote = rb_str_new_literal("\"");
|
392
|
+
rb_global_variable(&str_quote);
|
393
|
+
str_escaped_quote = rb_str_new_literal("\"\"");
|
394
|
+
rb_global_variable(&str_escaped_quote);
|
371
395
|
|
372
396
|
cRotoscope = rb_define_class("Rotoscope", rb_cObject);
|
373
397
|
rb_define_alloc_func(cRotoscope, rs_alloc);
|
data/ext/rotoscope/rotoscope.h
CHANGED
@@ -15,27 +15,30 @@
|
|
15
15
|
#define LOG_BUFFER_SIZE 1000
|
16
16
|
|
17
17
|
// clang-format off
|
18
|
-
#define _RS_COMMON_CSV_HEADER "entity,method_name,method_level,filepath,lineno"
|
19
|
-
#define _RS_COMMON_CSV_FORMAT "\"%s\",\"%s\",%s,\"%s\",%d"
|
20
|
-
#define _RS_COMMON_CSV_VALUES(trace) \
|
21
|
-
StringValueCStr((trace)->entity), \
|
22
|
-
StringValueCStr((trace)->method_name), \
|
23
|
-
(trace)->method_level, \
|
24
|
-
StringValueCStr((trace)->filepath), \
|
25
|
-
(trace)->lineno
|
26
18
|
|
27
|
-
#define RS_CSV_HEADER "event,"
|
28
|
-
#define RS_CSV_FORMAT "%s
|
29
|
-
#define RS_CSV_VALUES(trace
|
19
|
+
#define RS_CSV_HEADER "event,entity,filepath,lineno,method_name,method_level"
|
20
|
+
#define RS_CSV_FORMAT "%s,\"%s\",\"%s\",%d,\"%s\",%s"
|
21
|
+
#define RS_CSV_VALUES(trace, method_name) \
|
22
|
+
trace->event, \
|
23
|
+
StringValueCStr((trace)->entity), \
|
24
|
+
StringValueCStr((trace)->filepath), \
|
25
|
+
(trace)->lineno, \
|
26
|
+
StringValueCStr(method_name), \
|
27
|
+
(trace)->method_level
|
30
28
|
|
31
29
|
#define RS_FLATTENED_CSV_HEADER \
|
32
|
-
|
33
|
-
#define RS_FLATTENED_CSV_FORMAT
|
34
|
-
#define RS_FLATTENED_CSV_VALUES(trace, caller_trace) \
|
35
|
-
|
36
|
-
StringValueCStr((caller_trace)->entity),
|
37
|
-
StringValueCStr((
|
30
|
+
"entity,caller_entity,filepath,lineno,method_name,method_level,caller_method_name,caller_method_level"
|
31
|
+
#define RS_FLATTENED_CSV_FORMAT "\"%s\",\"%s\",\"%s\",%d,\"%s\",%s,\"%s\",%s"
|
32
|
+
#define RS_FLATTENED_CSV_VALUES(trace, caller_trace, method_name, caller_method_name) \
|
33
|
+
StringValueCStr((trace)->entity), \
|
34
|
+
StringValueCStr((caller_trace)->entity), \
|
35
|
+
StringValueCStr((trace)->filepath), \
|
36
|
+
(trace)->lineno, \
|
37
|
+
StringValueCStr(method_name), \
|
38
|
+
(trace)->method_level, \
|
39
|
+
StringValueCStr(caller_method_name), \
|
38
40
|
(caller_trace)->method_level
|
41
|
+
|
39
42
|
// clang-format on
|
40
43
|
|
41
44
|
typedef enum {
|
data/lib/rotoscope/version.rb
CHANGED