berns 3.1.4 → 3.1.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
  SHA256:
3
- metadata.gz: bce7bd3384f01f587a75bd722cca156b4357e0953bd90a5a2c8f97a630deb8db
4
- data.tar.gz: 2c830eb788274a6d96e3e0a7db0e75826dea451eabecb3444878901d6e1adb08
3
+ metadata.gz: 15dd768826a0b862ad1146c4ba331bd5735f791199aed34d0a217c0ad7fc94ca
4
+ data.tar.gz: 8a7fb6f17dfd7805163003ac751209138b7b5a7bd286afa3d72fb157d31328e3
5
5
  SHA512:
6
- metadata.gz: d20138c2bc54ab035eb9d79f1e0ae18065ba422157fa453258acd5d974f08062afee105b50d2d3564b3e4882b4331ec6f93e4da3a3091a1440ad8a74c10f1686
7
- data.tar.gz: 598843f7a87302d0a59ba53d8e52caf0f864a2e146b473c2d95b50f1da5b11536603f4d9f51f990de385bbaa08fb6e273381672eb823ddda2b0bb614532aef33
6
+ metadata.gz: d953ee5567cd4e448f3fd11b3075bcee6c5e1c6253f56714d9c3355ca5a1a7dcb6170bca926f8b537a9dd1e3bb6b218caa408b60e9d8d1146b55cd4b38fd9a58
7
+ data.tar.gz: 735a2e506fe777f9ab0932bb8d00aecd5cf01fafc03c9780ae1776014b016f61c01e7b8938d3fce80d15bfdb140a104367fe3361b7b0bd5d734fef1a6dc41a05
data/ext/berns/berns.c CHANGED
@@ -47,11 +47,12 @@ static const size_t sllen = 1;
47
47
  * Macro to define a "dynamic" function that generates a void element.
48
48
  */
49
49
  #define VOID_ELEMENT(element_name) \
50
- static VALUE external_##element_name##_element(int argc, VALUE* argv, RB_UNUSED_VAR(VALUE self)) { \
50
+ static VALUE external_##element_name##_element(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self)) { \
51
51
  rb_check_arity(argc, 0, 1); \
52
52
  \
53
- char *tag = #element_name; \
54
- char *string = void_element(tag, strlen(tag), argv[0]); \
53
+ VALUE attrs = argv[0]; \
54
+ const char *tag = #element_name; \
55
+ char *string = void_element(tag, strlen(tag), attrs); \
55
56
  VALUE rstring = rb_utf8_str_new_cstr(string); \
56
57
  free(string); \
57
58
  \
@@ -62,12 +63,13 @@ static const size_t sllen = 1;
62
63
  * Macro to define a "dynamic" function that generates a standard element.
63
64
  */
64
65
  #define STANDARD_ELEMENT(element_name) \
65
- static VALUE external_##element_name##_element(int argc, VALUE* argv, RB_UNUSED_VAR(VALUE self)) { \
66
+ static VALUE external_##element_name##_element(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self)) { \
66
67
  rb_check_arity(argc, 0, 1); \
67
68
  \
68
69
  CONTENT_FROM_BLOCK; \
69
- char *tag = #element_name; \
70
- char *string = element(tag, strlen(tag), RSTRING_PTR(content), RSTRING_LEN(content), argv[0]); \
70
+ VALUE attrs = argv[0]; \
71
+ const char *tag = #element_name; \
72
+ char *string = element(tag, strlen(tag), RSTRING_PTR(content), RSTRING_LEN(content), attrs); \
71
73
  VALUE rstring = rb_utf8_str_new_cstr(string); \
72
74
  free(string); \
73
75
  \
@@ -78,12 +80,16 @@ static const size_t sllen = 1;
78
80
  /*
79
81
  * "Safe strcpy" - https://twitter.com/hyc_symas/status/1102573036534972416?s=12
80
82
  */
81
- static char *stecpy(char *destination, const char *source, const char *end) {
83
+ static char * stecpy(char *destination, const char *source, const char *end) {
84
+ if (end) {
85
+ end--;
86
+ }
87
+
82
88
  while (*source && destination < end) {
83
89
  *destination++ = *source++;
84
90
  }
85
91
 
86
- if (destination < end) {
92
+ if (destination) {
87
93
  *destination = '\0';
88
94
  }
89
95
 
@@ -123,7 +129,6 @@ static VALUE external_escape_html(const VALUE self, VALUE string) {
123
129
  static char * empty_value_to_attribute(const char *attr, const size_t attrlen) {
124
130
  size_t total_size = attrlen + 1;
125
131
  char *dest = malloc(total_size);
126
- char *ptr = NULL;
127
132
  char *end = dest + total_size;
128
133
 
129
134
  stecpy(dest, attr, end);
@@ -140,7 +145,6 @@ static char * string_value_to_attribute(const char *attr, const size_t attrlen,
140
145
  if (vallen == 0) {
141
146
  size_t total_size = attrlen + 1;
142
147
  char *dest = malloc(total_size);
143
- char *ptr = NULL;
144
148
  char *end = dest + total_size;
145
149
 
146
150
  stecpy(dest, attr, end);
@@ -168,7 +172,7 @@ static char * string_value_to_attribute(const char *attr, const size_t attrlen,
168
172
  }
169
173
  }
170
174
 
171
- static char * hash_value_to_attribute(char *attr, const size_t attrlen, VALUE value) {
175
+ static char * hash_value_to_attribute(const char *attr, const size_t attrlen, VALUE value) {
172
176
  if (TYPE(value) == T_IMEMO) {
173
177
  return strdup("");
174
178
  }
@@ -224,17 +228,17 @@ static char * hash_value_to_attribute(char *attr, const size_t attrlen, VALUE va
224
228
 
225
229
  char subattr[subattr_len + 1];
226
230
  char *ptr = subattr;
227
- char *end = subattr + sizeof(subattr);
231
+ char *subend = subattr + subattr_len + 1;
228
232
 
229
233
  if (attrlen > 0) {
230
- ptr = stecpy(ptr, attr, end);
234
+ ptr = stecpy(ptr, attr, subend);
231
235
  }
232
236
 
233
237
  if (attrlen > 0 && subkey_len > 0) {
234
- ptr = stecpy(ptr, dash, end);
238
+ ptr = stecpy(ptr, dash, subend);
235
239
  }
236
240
 
237
- stecpy(ptr, RSTRING_PTR(subkey), end);
241
+ stecpy(ptr, RSTRING_PTR(subkey), subend);
238
242
 
239
243
  char *combined;
240
244
 
@@ -246,7 +250,7 @@ static char * hash_value_to_attribute(char *attr, const size_t attrlen, VALUE va
246
250
  case T_NIL:
247
251
  /* Fall through. */
248
252
  case T_TRUE:
249
- combined = string_value_to_attribute(subattr, subattr_len, "", 0);
253
+ combined = empty_value_to_attribute(subattr, subattr_len);
250
254
  break;
251
255
 
252
256
  case T_STRING:
@@ -326,6 +330,7 @@ static char * to_attribute(VALUE attr, VALUE value) {
326
330
 
327
331
  switch(TYPE(value)) {
328
332
  case T_NIL:
333
+ /* Fall through. */
329
334
  case T_TRUE:
330
335
  val = empty_value_to_attribute(RSTRING_PTR(attr), RSTRING_LEN(attr));
331
336
  break;
@@ -389,7 +394,7 @@ static VALUE external_to_attributes(RB_UNUSED_VAR(VALUE self), VALUE attributes)
389
394
  return rb_utf8_str_new_cstr("");
390
395
  }
391
396
 
392
- char *empty = "";
397
+ const char *empty = "";
393
398
  char *attrs = hash_value_to_attribute(empty, 0, attributes);
394
399
 
395
400
  VALUE rstring = rb_utf8_str_new_cstr(attrs);
@@ -398,7 +403,7 @@ static VALUE external_to_attributes(RB_UNUSED_VAR(VALUE self), VALUE attributes)
398
403
  return rstring;
399
404
  }
400
405
 
401
- static char * void_element(char *tag, size_t tlen, VALUE attributes) {
406
+ static char * void_element(const char *tag, size_t tlen, VALUE attributes) {
402
407
  /* T_IMEMO is what we get if an optional argument was not passed. */
403
408
  if (TYPE(attributes) == T_IMEMO) {
404
409
  size_t total = tag_olen + tlen + tag_clen + 1;
@@ -412,7 +417,7 @@ static char * void_element(char *tag, size_t tlen, VALUE attributes) {
412
417
 
413
418
  return string;
414
419
  } else {
415
- char *empty = "";
420
+ const char *empty = "";
416
421
  char *attrs = hash_value_to_attribute(empty, 0, attributes);
417
422
 
418
423
  size_t total = tag_olen + tlen + splen + strlen(attrs) + tag_clen + 1;
@@ -459,8 +464,8 @@ static VALUE external_void_element(int argc, VALUE *arguments, RB_UNUSED_VAR(VAL
459
464
  return rstring;
460
465
  }
461
466
 
462
- static char * element(char *tag, size_t tlen, char *content, size_t conlen, VALUE attributes) {
463
- char *empty = "";
467
+ static char * element(const char *tag, size_t tlen, char *content, size_t conlen, VALUE attributes) {
468
+ const char *empty = "";
464
469
  char *attrs = hash_value_to_attribute(empty, 0, attributes);
465
470
  size_t alen = strlen(attrs);
466
471
 
@@ -533,116 +538,116 @@ static VALUE external_element(int argc, VALUE *arguments, RB_UNUSED_VAR(VALUE se
533
538
  return rstring;
534
539
  }
535
540
 
536
- VOID_ELEMENT(area);
537
- VOID_ELEMENT(base);
538
- VOID_ELEMENT(br);
539
- VOID_ELEMENT(col);
540
- VOID_ELEMENT(embed);
541
- VOID_ELEMENT(hr);
542
- VOID_ELEMENT(img);
543
- VOID_ELEMENT(input);
544
- VOID_ELEMENT(link);
545
- VOID_ELEMENT(menuitem);
546
- VOID_ELEMENT(meta);
547
- VOID_ELEMENT(param);
548
- VOID_ELEMENT(source);
549
- VOID_ELEMENT(track);
550
- VOID_ELEMENT(wbr);
551
-
552
- STANDARD_ELEMENT(a);
553
- STANDARD_ELEMENT(abbr);
554
- STANDARD_ELEMENT(address);
555
- STANDARD_ELEMENT(article);
556
- STANDARD_ELEMENT(aside);
557
- STANDARD_ELEMENT(audio);
558
- STANDARD_ELEMENT(b);
559
- STANDARD_ELEMENT(bdi);
560
- STANDARD_ELEMENT(bdo);
561
- STANDARD_ELEMENT(blockquote);
562
- STANDARD_ELEMENT(body);
563
- STANDARD_ELEMENT(button);
564
- STANDARD_ELEMENT(canvas);
565
- STANDARD_ELEMENT(caption);
566
- STANDARD_ELEMENT(cite);
567
- STANDARD_ELEMENT(code);
568
- STANDARD_ELEMENT(colgroup);
569
- STANDARD_ELEMENT(datalist);
570
- STANDARD_ELEMENT(dd);
571
- STANDARD_ELEMENT(del);
572
- STANDARD_ELEMENT(details);
573
- STANDARD_ELEMENT(dfn);
574
- STANDARD_ELEMENT(dialog);
575
- STANDARD_ELEMENT(div);
576
- STANDARD_ELEMENT(dl);
577
- STANDARD_ELEMENT(dt);
578
- STANDARD_ELEMENT(em);
579
- STANDARD_ELEMENT(fieldset);
580
- STANDARD_ELEMENT(figcaption);
581
- STANDARD_ELEMENT(figure);
582
- STANDARD_ELEMENT(footer);
583
- STANDARD_ELEMENT(form);
584
- STANDARD_ELEMENT(h1);
585
- STANDARD_ELEMENT(h2);
586
- STANDARD_ELEMENT(h3);
587
- STANDARD_ELEMENT(h4);
588
- STANDARD_ELEMENT(h5);
589
- STANDARD_ELEMENT(h6);
590
- STANDARD_ELEMENT(head);
591
- STANDARD_ELEMENT(header);
592
- STANDARD_ELEMENT(html);
593
- STANDARD_ELEMENT(i);
594
- STANDARD_ELEMENT(iframe);
595
- STANDARD_ELEMENT(ins);
596
- STANDARD_ELEMENT(kbd);
597
- STANDARD_ELEMENT(label);
598
- STANDARD_ELEMENT(legend);
599
- STANDARD_ELEMENT(li);
600
- STANDARD_ELEMENT(main);
601
- STANDARD_ELEMENT(map);
602
- STANDARD_ELEMENT(mark);
603
- STANDARD_ELEMENT(menu);
604
- STANDARD_ELEMENT(meter);
605
- STANDARD_ELEMENT(nav);
606
- STANDARD_ELEMENT(noscript);
607
- STANDARD_ELEMENT(object);
608
- STANDARD_ELEMENT(ol);
609
- STANDARD_ELEMENT(optgroup);
610
- STANDARD_ELEMENT(option);
611
- STANDARD_ELEMENT(output);
612
- STANDARD_ELEMENT(p);
613
- STANDARD_ELEMENT(picture);
614
- STANDARD_ELEMENT(pre);
615
- STANDARD_ELEMENT(progress);
616
- STANDARD_ELEMENT(q);
617
- STANDARD_ELEMENT(rp);
618
- STANDARD_ELEMENT(rt);
619
- STANDARD_ELEMENT(ruby);
620
- STANDARD_ELEMENT(s);
621
- STANDARD_ELEMENT(samp);
622
- STANDARD_ELEMENT(script);
623
- STANDARD_ELEMENT(section);
624
- STANDARD_ELEMENT(select);
625
- STANDARD_ELEMENT(small);
626
- STANDARD_ELEMENT(span);
627
- STANDARD_ELEMENT(strong);
628
- STANDARD_ELEMENT(style);
629
- STANDARD_ELEMENT(sub);
630
- STANDARD_ELEMENT(summary);
631
- STANDARD_ELEMENT(table);
632
- STANDARD_ELEMENT(tbody);
633
- STANDARD_ELEMENT(td);
634
- STANDARD_ELEMENT(template);
635
- STANDARD_ELEMENT(textarea);
636
- STANDARD_ELEMENT(tfoot);
637
- STANDARD_ELEMENT(th);
638
- STANDARD_ELEMENT(thead);
639
- STANDARD_ELEMENT(time);
640
- STANDARD_ELEMENT(title);
641
- STANDARD_ELEMENT(tr);
642
- STANDARD_ELEMENT(u);
643
- STANDARD_ELEMENT(ul);
644
- STANDARD_ELEMENT(var);
645
- STANDARD_ELEMENT(video);
541
+ VOID_ELEMENT(area)
542
+ VOID_ELEMENT(base)
543
+ VOID_ELEMENT(br)
544
+ VOID_ELEMENT(col)
545
+ VOID_ELEMENT(embed)
546
+ VOID_ELEMENT(hr)
547
+ VOID_ELEMENT(img)
548
+ VOID_ELEMENT(input)
549
+ VOID_ELEMENT(link)
550
+ VOID_ELEMENT(menuitem)
551
+ VOID_ELEMENT(meta)
552
+ VOID_ELEMENT(param)
553
+ VOID_ELEMENT(source)
554
+ VOID_ELEMENT(track)
555
+ VOID_ELEMENT(wbr)
556
+
557
+ STANDARD_ELEMENT(a)
558
+ STANDARD_ELEMENT(abbr)
559
+ STANDARD_ELEMENT(address)
560
+ STANDARD_ELEMENT(article)
561
+ STANDARD_ELEMENT(aside)
562
+ STANDARD_ELEMENT(audio)
563
+ STANDARD_ELEMENT(b)
564
+ STANDARD_ELEMENT(bdi)
565
+ STANDARD_ELEMENT(bdo)
566
+ STANDARD_ELEMENT(blockquote)
567
+ STANDARD_ELEMENT(body)
568
+ STANDARD_ELEMENT(button)
569
+ STANDARD_ELEMENT(canvas)
570
+ STANDARD_ELEMENT(caption)
571
+ STANDARD_ELEMENT(cite)
572
+ STANDARD_ELEMENT(code)
573
+ STANDARD_ELEMENT(colgroup)
574
+ STANDARD_ELEMENT(datalist)
575
+ STANDARD_ELEMENT(dd)
576
+ STANDARD_ELEMENT(del)
577
+ STANDARD_ELEMENT(details)
578
+ STANDARD_ELEMENT(dfn)
579
+ STANDARD_ELEMENT(dialog)
580
+ STANDARD_ELEMENT(div)
581
+ STANDARD_ELEMENT(dl)
582
+ STANDARD_ELEMENT(dt)
583
+ STANDARD_ELEMENT(em)
584
+ STANDARD_ELEMENT(fieldset)
585
+ STANDARD_ELEMENT(figcaption)
586
+ STANDARD_ELEMENT(figure)
587
+ STANDARD_ELEMENT(footer)
588
+ STANDARD_ELEMENT(form)
589
+ STANDARD_ELEMENT(h1)
590
+ STANDARD_ELEMENT(h2)
591
+ STANDARD_ELEMENT(h3)
592
+ STANDARD_ELEMENT(h4)
593
+ STANDARD_ELEMENT(h5)
594
+ STANDARD_ELEMENT(h6)
595
+ STANDARD_ELEMENT(head)
596
+ STANDARD_ELEMENT(header)
597
+ STANDARD_ELEMENT(html)
598
+ STANDARD_ELEMENT(i)
599
+ STANDARD_ELEMENT(iframe)
600
+ STANDARD_ELEMENT(ins)
601
+ STANDARD_ELEMENT(kbd)
602
+ STANDARD_ELEMENT(label)
603
+ STANDARD_ELEMENT(legend)
604
+ STANDARD_ELEMENT(li)
605
+ STANDARD_ELEMENT(main)
606
+ STANDARD_ELEMENT(map)
607
+ STANDARD_ELEMENT(mark)
608
+ STANDARD_ELEMENT(menu)
609
+ STANDARD_ELEMENT(meter)
610
+ STANDARD_ELEMENT(nav)
611
+ STANDARD_ELEMENT(noscript)
612
+ STANDARD_ELEMENT(object)
613
+ STANDARD_ELEMENT(ol)
614
+ STANDARD_ELEMENT(optgroup)
615
+ STANDARD_ELEMENT(option)
616
+ STANDARD_ELEMENT(output)
617
+ STANDARD_ELEMENT(p)
618
+ STANDARD_ELEMENT(picture)
619
+ STANDARD_ELEMENT(pre)
620
+ STANDARD_ELEMENT(progress)
621
+ STANDARD_ELEMENT(q)
622
+ STANDARD_ELEMENT(rp)
623
+ STANDARD_ELEMENT(rt)
624
+ STANDARD_ELEMENT(ruby)
625
+ STANDARD_ELEMENT(s)
626
+ STANDARD_ELEMENT(samp)
627
+ STANDARD_ELEMENT(script)
628
+ STANDARD_ELEMENT(section)
629
+ STANDARD_ELEMENT(select)
630
+ STANDARD_ELEMENT(small)
631
+ STANDARD_ELEMENT(span)
632
+ STANDARD_ELEMENT(strong)
633
+ STANDARD_ELEMENT(style)
634
+ STANDARD_ELEMENT(sub)
635
+ STANDARD_ELEMENT(summary)
636
+ STANDARD_ELEMENT(table)
637
+ STANDARD_ELEMENT(tbody)
638
+ STANDARD_ELEMENT(td)
639
+ STANDARD_ELEMENT(template)
640
+ STANDARD_ELEMENT(textarea)
641
+ STANDARD_ELEMENT(tfoot)
642
+ STANDARD_ELEMENT(th)
643
+ STANDARD_ELEMENT(thead)
644
+ STANDARD_ELEMENT(time)
645
+ STANDARD_ELEMENT(title)
646
+ STANDARD_ELEMENT(tr)
647
+ STANDARD_ELEMENT(u)
648
+ STANDARD_ELEMENT(ul)
649
+ STANDARD_ELEMENT(var)
650
+ STANDARD_ELEMENT(video)
646
651
 
647
652
  void Init_berns() {
648
653
  VALUE Berns = rb_define_module("Berns");
data/ext/berns/extconf.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require 'mkmf'
3
3
 
4
- $CFLAGS = '-O3 -msse4' # rubocop:disable Style/GlobalVars
4
+ $CFLAGS << ' -O2 -msse4 -std=c99' # rubocop:disable Style/GlobalVars
5
5
 
6
6
  dir_config('berns')
7
7
  create_header
data/lib/berns/berns.so CHANGED
Binary file
data/lib/berns/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Berns
3
- VERSION = '3.1.4'
3
+ VERSION = '3.1.5'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: berns
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.4
4
+ version: 3.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taylor Beck
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-05-17 00:00:00.000000000 Z
12
+ date: 2021-05-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: benchmark-ips