cmpi-bindings 0.9.5 → 0.9.9

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: f1cefd23941e2b4ebbda38e5661bd8ce55966373
4
- data.tar.gz: cde95d6241639d9ad75a69d72b7a5c6975c9d6f1
3
+ metadata.gz: 107a02c0b033ad9845df5c4b8a1d4053d270f87c
4
+ data.tar.gz: c88d671fd2a43e905af5891e3b62f42b6e161840
5
5
  SHA512:
6
- metadata.gz: 068cf7f60cee5715603d9d5d2c22e935ecbe7851c619465eceb557ce3bda3fa31e6f9a188ae1d2f78993e6898155cd80f1bc5d48ab08fffe61c380c1b9c1673c
7
- data.tar.gz: a92c3337d9244c123f8ffff18b502fe6b1fb6ece0893966d89d8542d4ad4fd862abe3dab42ccd556765b0ec5553254db351ee5c642de6b560acbc700f9af8039
6
+ metadata.gz: 45538fbf49c3ca8b9c36a28f89d2bdc07415223340fa0e942a81e14a9314bd9bf94872f0baee792c71a2f899fa6a926cefcab9abc4a8e7c03bb70ed6d7ab798a
7
+ data.tar.gz: 624d9b9c47ea84ce82f90c09b070ccecaa70ffe755f30e398649700b479022f0cab146417c017f278f8fe3acc9808af939ae71c32466597217863aa8f1e2846c
@@ -874,27 +874,6 @@ references(
874
874
  }
875
875
 
876
876
 
877
- #if defined(SWIGRUBY)
878
- /*
879
- * Check type of VALUE
880
- *
881
- * return 0 if ok
882
- * return -1 if bad type, set status accordingly
883
- *
884
- */
885
-
886
- static int
887
- check_ruby_type( VALUE value, int type, const char *message, CMPIStatus *status, ProviderMIHandle* hdl )
888
- {
889
- if (TYPE(value) != type) {
890
- status->rc = CMPI_RC_ERR_TYPE_MISMATCH;
891
- status->msg = CMNewString(hdl->broker, message, NULL);
892
- return -1;
893
- }
894
- return 0;
895
- }
896
- #endif
897
-
898
877
  /*
899
878
  * invokeMethod
900
879
  */
@@ -919,93 +898,8 @@ invokeMethod(
919
898
  _ctx = SWIG_NewPointerObj((void*) ctx, SWIGTYPE_p__CMPIContext, 0);
920
899
  _objName = SWIG_NewPointerObj((void*) objName, SWIGTYPE_p__CMPIObjectPath, 0);
921
900
 
922
- /* Ruby style method invocation */
923
901
  #if defined(SWIGRUBY)
924
-
925
- /* de-camelize method name, might need 2time length */
926
- char *methodname = alloca(strlen(method) * 2 + 1);
927
- decamelize(method, methodname);
928
-
929
- /* access method arguments information via <decamelized>_args */
930
- int argsnamesize = strlen(methodname) + 5 + 1;
931
- char *argsname = alloca(argsnamesize); /* "<name>_args" */
932
- snprintf(argsname, argsnamesize, "%s_args", methodname);
933
-
934
- /* get the args array, gives names of input and output arguments */
935
- VALUE args = rb_funcall(((ProviderMIHandle*)self->hdl)->implementation, rb_intern(argsname), 0);
936
- if (check_ruby_type(args, T_ARRAY, "invoke: <method>_args must be Array", &status, (ProviderMIHandle*)self->hdl ) < 0)
937
- return status;
938
-
939
- VALUE argsin = rb_ary_entry(args, 0); /* array of input arg names */
940
- if (check_ruby_type(argsin, T_ARRAY, "invoke: Input arguments must be Array", &status, (ProviderMIHandle*)self->hdl ) < 0)
941
- return status;
942
-
943
- int number_of_arguments = RARRAY_LEN(argsin) / 2;
944
- _SBLIM_TRACE(1,("%s -> %d input args", argsname, number_of_arguments));
945
- /* 3 args will be added by TargetCall, 2 args are added here, others are input args to function */
946
- VALUE *input = alloca((3 + 2 + number_of_arguments) * sizeof(VALUE));
947
- input[3] = _ctx;
948
- input[4] = _objName;
949
- /* loop over input arg names and types and get CMPIData via CMGetArg() */
950
- int i;
951
- for (i = 0; i < number_of_arguments; ++i) {
952
- const char *argname;
953
- CMPIData data;
954
- argname = target_charptr(rb_ary_entry(argsin, i*2));
955
- data = CMGetArg(in, argname, &status);
956
- if (status.rc != CMPI_RC_OK) {
957
- if ((data.state & CMPI_nullValue)
958
- ||(data.state & CMPI_notFound)) {
959
- input[5+i] = Target_Null;
960
- continue;
961
- }
962
- _SBLIM_TRACE(1,("Failed (rc %d) to get input arg %d:%s for %s", status.rc, i>>1, argname, method));
963
- return status;
964
- }
965
- input[5+i] = data_value(&data);
966
- }
967
-
968
- /* actual provider call, passes output args and return value via 'result' */
969
- VALUE result = TargetCall((ProviderMIHandle*)self->hdl, &status, methodname, -(2+number_of_arguments), input);
970
-
971
- /* argsout is array of [<return_type>, <output_arg_name>, <output_arg_type>, ... */
972
- VALUE argsout = rb_ary_entry(args, 1);
973
- CMPIValue value;
974
- CMPIType expected_type;
975
- CMPIType actual_type;
976
- if (check_ruby_type(argsout, T_ARRAY, "invoke: Output arguments must be Array", &status, (ProviderMIHandle*)self->hdl) < 0)
977
- return status;
978
- number_of_arguments = (RARRAY_LEN(argsout) - 1);
979
-
980
- if (number_of_arguments > 0) {
981
- /* if output args are defined, result must be an array
982
- * result[0] is the return value
983
- * result[1..n] are the output args in argsout order
984
- */
985
- if (check_ruby_type(result, T_ARRAY, "invoke: function with output arguments must return Array", &status, (ProviderMIHandle*)self->hdl) < 0)
986
- return status;
987
-
988
- /* loop over output arg names and types and set CMPIData via CMSetArg() */
989
- for (i = 0; i < number_of_arguments; i += 2) {
990
- const char *argname;
991
- argname = target_charptr(rb_ary_entry(argsout, i+1));
992
- expected_type = FIX2ULONG(rb_ary_entry(argsout, i+2));
993
- actual_type = target_to_value(rb_ary_entry(result, (i >> 1) + 1), &value, expected_type);
994
- status = CMAddArg(out, argname, &value, actual_type);
995
- if (status.rc != CMPI_RC_OK) {
996
- _SBLIM_TRACE(1,("Failed (rc %d) to set output arg %d:%s for %s; expected type %x, actual type %x", status.rc, i>>1, argname, method, expected_type, actual_type));
997
- return status;
998
- }
999
- }
1000
- /* result[0] is the return value */
1001
- result = rb_ary_entry(result, 0);
1002
-
1003
- }
1004
- expected_type = FIX2ULONG(rb_ary_entry(argsout, 0));
1005
- actual_type = target_to_value(result, &value, expected_type);
1006
- CMReturnData(rslt, &value, actual_type);
1007
- CMReturnDone(rslt);
1008
-
902
+ TargetInvoke((ProviderMIHandle*)self->hdl, _ctx, rslt, _objName, method, in, out, &status);
1009
903
  #else
1010
904
  Target_Type _rslt;
1011
905
  Target_Type _in;
@@ -515,3 +515,188 @@ TargetCleanup(ProviderMIHandle * hdl)
515
515
  return;
516
516
  }
517
517
 
518
+
519
+ /*
520
+ * Check type of VALUE
521
+ * - used by invokeMethod -
522
+ *
523
+ * return 0 if ok
524
+ * return -1 if bad type, set status accordingly
525
+ *
526
+ */
527
+
528
+ static int
529
+ check_ruby_type( VALUE value, int type, const char *message, CMPIStatus *status, ProviderMIHandle* hdl )
530
+ {
531
+ if (TYPE(value) != type) {
532
+ status->rc = CMPI_RC_ERR_TYPE_MISMATCH;
533
+ status->msg = CMNewString(hdl->broker, message, NULL);
534
+ return -1;
535
+ }
536
+ return 0;
537
+ }
538
+
539
+
540
+ /*
541
+ * protected_target_to_value
542
+ * call target_to_value via rb_protect in order to catch exceptions
543
+ *
544
+ */
545
+
546
+ static VALUE
547
+ call_ttv(VALUE args)
548
+ {
549
+ VALUE *values = (VALUE *)args;
550
+ return target_to_value((Target_Type)values[0], (CMPIValue *)values[1], (CMPIType)values[2]);
551
+ }
552
+
553
+ static VALUE
554
+ protected_target_to_value(ProviderMIHandle *hdl, Target_Type data, CMPIValue *value, CMPIType type, CMPIStatus *status)
555
+ {
556
+ int error = 0;
557
+ VALUE args[3];
558
+ VALUE result;
559
+ args[0] = (VALUE)data;
560
+ args[1] = (VALUE)value;
561
+ args[2] = (VALUE)type;
562
+ result = rb_protect(call_ttv, (VALUE)args, &error);
563
+
564
+ if (error) {
565
+ CMPIString *trace = get_exc_trace(hdl->broker);
566
+ char *trace_s;
567
+ char* str;
568
+ if (trace) {
569
+ trace_s = CMGetCharPtr(trace);
570
+ }
571
+ else {
572
+ trace_s = "Unknown reason";
573
+ }
574
+ str = fmtstr("Ruby: %s", trace_s);
575
+ if (trace)
576
+ trace->ft->release(trace);
577
+ _SBLIM_TRACE(1,("%s", str));
578
+ status->rc = CMPI_RC_ERR_FAILED;
579
+ status->msg = hdl->broker->eft->newString(hdl->broker, str, NULL);
580
+ free(str);
581
+ }
582
+ else {
583
+ status->rc = CMPI_RC_OK;
584
+ }
585
+ return result;
586
+ }
587
+
588
+ /*
589
+ * TargetInvoke
590
+ * Ruby style method invocation
591
+ */
592
+ static void
593
+ TargetInvoke(
594
+ ProviderMIHandle* hdl,
595
+ Target_Type _ctx,
596
+ const CMPIResult* rslt,
597
+ Target_Type _objName,
598
+ const char* method,
599
+ const CMPIArgs* in,
600
+ CMPIArgs* out,
601
+ CMPIStatus *status)
602
+ {
603
+ /* de-camelize method name, might need 2time length */
604
+ char *methodname = alloca(strlen(method) * 2 + 1);
605
+ decamelize(method, methodname);
606
+
607
+ /* access method arguments information via <decamelized>_args */
608
+ int argsnamesize = strlen(methodname) + 5 + 1;
609
+ char *argsname = alloca(argsnamesize); /* "<name>_args" */
610
+ snprintf(argsname, argsnamesize, "%s_args", methodname);
611
+
612
+ /* get the args array, gives names of input and output arguments */
613
+ VALUE args = rb_funcall(hdl->implementation, rb_intern(argsname), 0);
614
+ if (check_ruby_type(args, T_ARRAY, "invoke: <method>_args must be Array", status, hdl ) < 0) {
615
+ return;
616
+ }
617
+
618
+ VALUE argsin = rb_ary_entry(args, 0); /* array of input arg names */
619
+ if (check_ruby_type(argsin, T_ARRAY, "invoke: Input arguments of <method>_args must be Array", status, hdl ) < 0) {
620
+ return;
621
+ }
622
+
623
+ int number_of_arguments = RARRAY_LEN(argsin) / 2;
624
+ _SBLIM_TRACE(1,("%s -> %d input args", argsname, number_of_arguments));
625
+ /* 3 args will be added by TargetCall, 2 args are added here, others are input args to function */
626
+ VALUE *input = alloca((3 + 2 + number_of_arguments) * sizeof(VALUE));
627
+ input[3] = _ctx;
628
+ input[4] = _objName;
629
+ /* loop over input arg names and types and get CMPIData via CMGetArg() */
630
+ int i;
631
+ for (i = 0; i < number_of_arguments; ++i) {
632
+ const char *argname;
633
+ CMPIData data;
634
+ argname = target_charptr(rb_ary_entry(argsin, i*2));
635
+ data = CMGetArg(in, argname, status);
636
+ if (status->rc != CMPI_RC_OK) {
637
+ if ((data.state & CMPI_nullValue)
638
+ ||(data.state & CMPI_notFound)) {
639
+ input[5+i] = Target_Null;
640
+ continue;
641
+ }
642
+ _SBLIM_TRACE(1,("Failed (rc %d) to get input arg %d:%s for %s", status->rc, i>>1, argname, method));
643
+ return;
644
+ }
645
+ input[5+i] = data_value(&data);
646
+ }
647
+
648
+ /* actual provider call, passes output args and return value via 'result' */
649
+ VALUE result = TargetCall(hdl, status, methodname, -(2+number_of_arguments), input);
650
+
651
+ /* check CMPIStatus */
652
+ if (status->rc != CMPI_RC_OK) {
653
+ return;
654
+ }
655
+
656
+ /* argsout (from <method>_args) is array of [<return_type>, <output_arg_name>, <output_arg_type>, ... */
657
+ VALUE argsout = rb_ary_entry(args, 1);
658
+ CMPIValue value;
659
+ CMPIType expected_type;
660
+ CMPIType actual_type;
661
+ if (check_ruby_type(argsout, T_ARRAY, "invoke: Output arguments of <method>_args must be Array", status, hdl) < 0) {
662
+ return;
663
+ }
664
+ number_of_arguments = (RARRAY_LEN(argsout) - 1);
665
+
666
+ if (number_of_arguments > 0) {
667
+ /* if output args are defined, result must be an array
668
+ * result[0] is the return value
669
+ * result[1..n] are the output args in argsout order
670
+ */
671
+ if (check_ruby_type(result, T_ARRAY, "invoke: function with output arguments must return Array", status, hdl) < 0) {
672
+ return;
673
+ }
674
+ /* loop over output arg names and types and set CMPIData via CMSetArg() */
675
+ for (i = 0; i < number_of_arguments; i += 2) {
676
+ const char *argname;
677
+ argname = target_charptr(rb_ary_entry(argsout, i+1));
678
+ expected_type = FIX2ULONG(rb_ary_entry(argsout, i+2));
679
+ actual_type = protected_target_to_value(hdl, rb_ary_entry(result, (i >> 1) + 1), &value, expected_type, status);
680
+ if (status->rc != CMPI_RC_OK) {
681
+ _SBLIM_TRACE(0,("Failed (rc %d) type conversion for output arg %d:%s in call to %s; expected type %x, actual type %x", status->rc, i>>1, argname, method, expected_type, actual_type));
682
+ return;
683
+ }
684
+ *status = CMAddArg(out, argname, &value, actual_type);
685
+ if (status->rc != CMPI_RC_OK) {
686
+ _SBLIM_TRACE(1,("Failed (rc %d) to set output arg %d:%s for %s; expected type %x, actual type %x", status->rc, i>>1, argname, method, expected_type, actual_type));
687
+ return;
688
+ }
689
+ }
690
+ /* result[0] is the return value */
691
+ result = rb_ary_entry(result, 0);
692
+
693
+ }
694
+ expected_type = FIX2ULONG(rb_ary_entry(argsout, 0));
695
+ actual_type = protected_target_to_value(hdl, result, &value, expected_type, status);
696
+ if (status->rc != CMPI_RC_OK) {
697
+ _SBLIM_TRACE(0,("Failed (rc %d) type conversion for return value of %s; expected type %x, actual type %x", status->rc, method, expected_type, actual_type));
698
+ return;
699
+ }
700
+ CMReturnData(rslt, &value, actual_type);
701
+ CMReturnDone(rslt);
702
+ }
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cmpi-bindings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.9.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Klaus Kämpf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-26 00:00:00.000000000 Z
11
+ date: 2014-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mocha
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0.9'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.9'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: yard
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0.5'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.5'
55
55
  description: The cmpi-bindings gem provides a Ruby API to write CIM providers
@@ -60,13 +60,13 @@ extensions:
60
60
  - ext/cmpi-bindings/extconf.rb
61
61
  extra_rdoc_files: []
62
62
  files:
63
- - lib/cmpi.rb
64
- - lib/cmpi/provider.rb
65
- - ext/cmpi-bindings/string_array.h
66
63
  - ext/cmpi-bindings/cmpi_wrap.c
64
+ - ext/cmpi-bindings/extconf.rb
65
+ - ext/cmpi-bindings/string_array.h
67
66
  - ext/src/cmpi_provider.c
68
67
  - ext/src/target_ruby.c
69
- - ext/cmpi-bindings/extconf.rb
68
+ - lib/cmpi.rb
69
+ - lib/cmpi/provider.rb
70
70
  homepage: http://www.github.com/kkaempf/cmpi-bindings
71
71
  licenses: []
72
72
  metadata: {}
@@ -77,17 +77,17 @@ require_paths:
77
77
  - lib
78
78
  required_ruby_version: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  required_rubygems_version: !ruby/object:Gem::Requirement
84
84
  requirements:
85
- - - '>='
85
+ - - ">="
86
86
  - !ruby/object:Gem::Version
87
87
  version: 1.3.6
88
88
  requirements: []
89
89
  rubyforge_project:
90
- rubygems_version: 2.0.3
90
+ rubygems_version: 2.2.0
91
91
  signing_key:
92
92
  specification_version: 4
93
93
  summary: Write CIM providers in Ruby