win32-pdh 0.1.1 → 0.1.4

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: d9f57c2db43f6412bceab31740be7f3131752334ff5b9c5f1f41f634519477bd
4
- data.tar.gz: 74ea0ab008113496543dc001d947cbe93b3751eef9fb65be219887eb88921b36
3
+ metadata.gz: e46f18c5fb8a3022b81c9e861ae65aeb1a9a86478935efb3868c51b635f851de
4
+ data.tar.gz: 4f8f6c8800700eda846aff5e96ad83760ed6c5996e94cea9cb49c01e7bbf8dbf
5
5
  SHA512:
6
- metadata.gz: 3b569a0bf0cfe35093c065cb527dc521fc503ff40dc882e35afdbfa8ec4036da16cf5cd7ef7003609406a640f77ae97ca93367119b2105a1b890212493a7edbd
7
- data.tar.gz: 14e6def409243a45b3e3a51dbf544f9e5df224cbb32252bd9c13920702ccd05f6029e690932eb07618f970977579b694c58cb7539a78f111ccf7482ed2a85077
6
+ metadata.gz: 000ff8756967f84acc1bd96d0408f426bab086bf81a2357923652aacf123d8a6e7a6409f14e32d78a7538d7e35f30bbe04d825b5a7f023f2bf15d0a2f73e4d0c
7
+ data.tar.gz: af0cfc18ec75c26400e1ee089f253a99e86c7c836124ff867ae3a49fe742b4b88d8265a73504e8c626316bcb53a1404522aeaa7f587ca4714b303290831b1157
@@ -74,7 +74,14 @@ module Win32
74
74
  )
75
75
  Pdh.check_status status
76
76
  @handle = handle_pointer.read_pointer
77
- load_info
77
+
78
+ # Make sure we don't leak when we throw an exception
79
+ begin
80
+ load_info
81
+ rescue
82
+ remove
83
+ raise
84
+ end
78
85
  end
79
86
 
80
87
  ##
data/lib/win32/pdh.rb CHANGED
@@ -20,23 +20,38 @@ module Win32
20
20
  raise PdhError, status unless status == Constants::ERROR_SUCCESS
21
21
  end
22
22
 
23
+ ##
24
+ # Gets the length of a cwstr (null-terminated UTF-16 string) in characters
25
+ # (16-bit units).
26
+ #
27
+ # Returns nil if the pointer is null
28
+ def self.strlen_cwstr(pointer)
29
+ return nil if pointer.null?
30
+
31
+ # Clone pointer, so we don't modify the original.
32
+ pointer = FFI::Pointer.new(pointer)
33
+ length = 0
34
+ until pointer.get_uint16(0) == 0
35
+ length += 1
36
+ # Need to proceed 2 bytes at a time; Ruby ffi gives no special pointer
37
+ # arithmetic by type.
38
+ pointer += 2
39
+ end
40
+
41
+ length
42
+ end
43
+
23
44
  ##
24
45
  # Takes a pointer to null-terminated utf-16 data and reads it into a utf-8 encoded string.
25
46
  #
26
47
  # If pointer is null, return nil instead of a string.
27
48
  def self.read_cwstr(pointer)
28
49
  return nil if pointer.null?
29
- array = []
30
- loop do
31
- char = pointer.read_uint16
32
- break if char == 0
33
50
 
34
- array << char
35
- # Need to proceed 2 bytes
36
- pointer += 2
37
- end
51
+ # length in wchars
52
+ length = strlen_cwstr(pointer)
38
53
 
39
- array.pack('n*').force_encoding('UTF-16BE').encode('UTF-8')
54
+ pointer.read_bytes(length * 2).force_encoding('UTF-16LE').encode('UTF-8')
40
55
  end
41
56
 
42
57
  ##
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: win32-pdh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taylor C. Richberger
@@ -14,16 +14,16 @@ dependencies:
14
14
  name: ffi
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '1.9'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '1.9'
27
27
  description: Ruby FFI interface for Windows PDH
28
28
  email: tcr@absolute-performance.com
29
29
  executables: []