win32-xpath 1.0.0 → 1.0.1

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: 9b7fbc4af66e5ca073a64411ff6c48dcf4ab60ae
4
- data.tar.gz: 2a1a3f3871c8bc63e70d133875e52760a98f6690
3
+ metadata.gz: 90f69c4379b494123344aafd8b6233c50517e0b4
4
+ data.tar.gz: 4ef3203f711bfd16ef2a8584be510c3b13cf27d0
5
5
  SHA512:
6
- metadata.gz: e1353c201cd8ef54a55600f3203aa06e6b20e55bc8682a07e3822bbe7f938ea7154d67a04b00260b7ffe77b480f568d9e159952dc23c4115821706b41508f591
7
- data.tar.gz: 2b357454c4bad3722db57d7fbbf25ea2697cae1af585d332200d5950daeb633688a70582697f0ad23237472a09dbc55c52c04898fca9b4a8915edf6d41ccb283
6
+ metadata.gz: 65817259cfad01b3cd2bd382168a9de2db81a83726181d44822ab2fc415d7e9ef987d895bbb4af1c37aa5863424ead5800492fdb9668e9f33f7d62b6ef1c771f
7
+ data.tar.gz: 2efba9b2ed51ca12132e86f8914aa3d03ea8eea7dce3c8f947053eb6a6331976da7d89e82aa0371804a4b06a52483c0aa7e03da0c9efcda6d9d5779d070b17c9
data/CHANGES CHANGED
@@ -1,2 +1,5 @@
1
- = 1.0.0 - 26-Feb-2015
2
- * Initial release
1
+ = 1.0.1 - 2-Apr-2015
2
+ * Altered internal handling of native C function failures.
3
+
4
+ = 1.0.0 - 26-Feb-2015
5
+ * Initial release
data/ext/win32/xpath.c CHANGED
@@ -6,6 +6,12 @@
6
6
 
7
7
  #define MAX_WPATH MAX_PATH * sizeof(wchar_t)
8
8
 
9
+ // Equivalent to raise SystemCallError.new(string, errnum)
10
+ void rb_raise_syserr(const char* msg, int errnum){
11
+ VALUE v_sys = rb_funcall(rb_eSystemCallError, rb_intern("new"), 2, rb_str_new2(msg), INT2FIX(errnum));
12
+ rb_funcall(rb_mKernel, rb_intern("raise"), 1, v_sys);
13
+ }
14
+
9
15
  // Helper function to find user's home directory
10
16
  wchar_t* find_user(wchar_t* str){
11
17
  SID* sid;
@@ -39,25 +45,25 @@ wchar_t* find_user(wchar_t* str){
39
45
  rb_raise(rb_eArgError, "can't find user %ls", str);
40
46
  }
41
47
 
42
- ruby_xfree(dom);
48
+ ruby_xfree(dom); // Don't need this any more
43
49
 
44
50
  // Get the stringy version of the SID
45
51
  if (!ConvertSidToStringSidW(sid, &str_sid)){
46
52
  ruby_xfree(sid);
47
- rb_sys_fail("ConvertSidToStringSid");
53
+ rb_raise_syserr("ConvertSidToStringSid", GetLastError());
48
54
  }
49
55
 
50
- ruby_xfree(sid);
56
+ ruby_xfree(sid); // Don't need this any more
51
57
 
52
58
  // Mash the stringified SID onto our base key
53
59
  if(swprintf(subkey, MAX_PATH, L"%s%s", key_base, str_sid) < 0)
54
- rb_sys_fail("swprintf");
60
+ rb_raise_syserr("swprintf", GetLastError());
55
61
 
56
62
  // Get the key handle we need
57
63
  rv = RegOpenKeyExW(HKEY_LOCAL_MACHINE, subkey, 0, KEY_QUERY_VALUE, &phkResult);
58
64
 
59
65
  if (rv != ERROR_SUCCESS)
60
- rb_sys_fail("RegOpenKeyEx");
66
+ rb_raise_syserr("RegOpenKeyEx", GetLastError());
61
67
 
62
68
  lpData = (wchar_t*)malloc(MAX_WPATH);
63
69
  cbData = MAX_WPATH;
@@ -68,13 +74,13 @@ wchar_t* find_user(wchar_t* str){
68
74
 
69
75
  if (rv != ERROR_SUCCESS){
70
76
  ruby_xfree(lpData);
71
- rb_raise(rb_eArgError, "can't find user %ls", str);
77
+ rb_raise(rb_eArgError, "can't find home directory for user %ls", str);
72
78
  }
73
79
 
74
80
  // Append any remaining path data that was originally present
75
81
  if (ptr){
76
82
  if (swprintf(lpData, MAX_WPATH, L"%s/%s", lpData, ptr) < 0)
77
- rb_sys_fail("swprintf");
83
+ rb_raise_syserr("swprintf", GetLastError());
78
84
  }
79
85
 
80
86
  return lpData;
@@ -108,7 +114,7 @@ wchar_t* expand_tilde(){
108
114
 
109
115
  if(!size || !size2){
110
116
  if (GetLastError() != ERROR_ENVVAR_NOT_FOUND)
111
- rb_sys_fail("GetEnvironmentVariable");
117
+ rb_raise_syserr("GetEnvironmentVariable", GetLastError());
112
118
  else
113
119
  rb_raise(rb_eArgError, "couldn't find HOME environment -- expanding '~'");
114
120
  }
@@ -119,11 +125,11 @@ wchar_t* expand_tilde(){
119
125
  if(!GetEnvironmentVariableW(env, home, size) || !GetEnvironmentVariableW(env2, temp, size2)){
120
126
  ruby_xfree(home);
121
127
  ruby_xfree(temp);
122
- rb_sys_fail("GetEnvironmentVariable");
128
+ rb_raise_syserr("GetEnvironmentVariable", GetLastError());
123
129
  }
124
130
 
125
131
  if(!PathAppendW(home, temp))
126
- rb_sys_fail("PathAppend");
132
+ rb_raise_syserr("PathAppend", GetLastError());
127
133
  }
128
134
  else{
129
135
  home = (wchar_t*)ruby_xmalloc(MAX_WPATH);
@@ -131,7 +137,7 @@ wchar_t* expand_tilde(){
131
137
 
132
138
  if(!size){
133
139
  ruby_xfree(home);
134
- rb_sys_fail("GetEnvironmentVariable");
140
+ rb_raise_syserr("GetEnvironmentVariable", GetLastError());
135
141
  }
136
142
  }
137
143
 
@@ -186,7 +192,7 @@ static VALUE rb_xpath(int argc, VALUE* argv, VALUE self){
186
192
 
187
193
  if(!MultiByteToWideChar(CP_UTF8, 0, RSTRING_PTR(v_path), -1, path, length)){
188
194
  ruby_xfree(path);
189
- rb_sys_fail("MultiByteToWideChar");
195
+ rb_raise_syserr("MultibyteToWideChar", GetLastError());
190
196
  }
191
197
 
192
198
  // Convert all forward slashes to backslashes to Windows API functions work properly
@@ -206,7 +212,7 @@ static VALUE rb_xpath(int argc, VALUE* argv, VALUE self){
206
212
 
207
213
  if (!PathAppendW(home, ++ptr)){
208
214
  ruby_xfree(home);
209
- rb_sys_fail("PathAppend");
215
+ rb_raise_syserr("PathAppend", GetLastError());
210
216
  }
211
217
  }
212
218
 
@@ -239,7 +245,7 @@ static VALUE rb_xpath(int argc, VALUE* argv, VALUE self){
239
245
 
240
246
  if (!MultiByteToWideChar(CP_UTF8, 0, RSTRING_PTR(v_dir), -1, dir, length)){
241
247
  ruby_xfree(dir);
242
- rb_sys_fail("MultiByteToWideChar");
248
+ rb_raise_syserr("MultibyteToWideChar", GetLastError());
243
249
  }
244
250
 
245
251
  while (wcsstr(dir, L"/"))
@@ -254,7 +260,7 @@ static VALUE rb_xpath(int argc, VALUE* argv, VALUE self){
254
260
 
255
261
  if (!PathAppendW(dir, ++ptr)){
256
262
  ruby_xfree(dir);
257
- rb_sys_fail("PathAppend");
263
+ rb_raise_syserr("PathAppend", GetLastError());
258
264
  }
259
265
  }
260
266
  }
@@ -265,7 +271,7 @@ static VALUE rb_xpath(int argc, VALUE* argv, VALUE self){
265
271
  if (PathIsRelativeW(path)){
266
272
  if(!PathAppendW(dir, path)){
267
273
  ruby_xfree(dir);
268
- rb_sys_fail("PathAppend");
274
+ rb_raise_syserr("PathAppend", GetLastError());
269
275
  }
270
276
 
271
277
  // Remove leading slashes from relative paths
@@ -288,7 +294,7 @@ static VALUE rb_xpath(int argc, VALUE* argv, VALUE self){
288
294
 
289
295
  if(!length){
290
296
  ruby_xfree(wpwd);
291
- rb_sys_fail("GetCurrentDirectory");
297
+ rb_raise_syserr("GetCurrentDirectory", GetLastError());
292
298
  }
293
299
 
294
300
  // Convert backslashes into forward slashes
@@ -302,7 +308,7 @@ static VALUE rb_xpath(int argc, VALUE* argv, VALUE self){
302
308
 
303
309
  if (!length){
304
310
  ruby_xfree(pwd);
305
- rb_sys_fail("WideCharToMultiByte");
311
+ rb_raise_syserr("WideCharToMultiByte", GetLastError());
306
312
  }
307
313
 
308
314
  return rb_str_new2(pwd);
@@ -321,7 +327,7 @@ static VALUE rb_xpath(int argc, VALUE* argv, VALUE self){
321
327
 
322
328
  if (!length){
323
329
  ruby_xfree(buffer);
324
- rb_sys_fail("GetFullPathName");
330
+ rb_raise_syserr("GetFullPathName", GetLastError());
325
331
  }
326
332
 
327
333
  // Convert backslashes into forward slashes
@@ -336,7 +342,7 @@ static VALUE rb_xpath(int argc, VALUE* argv, VALUE self){
336
342
 
337
343
  if (!length){
338
344
  ruby_xfree(final_path);
339
- rb_sys_fail("WideCharToMultiByte");
345
+ rb_raise_syserr("WideCharToMultiByte", GetLastError());
340
346
  }
341
347
 
342
348
  v_path = rb_str_new(final_path, length - 1); // Don't count null terminator
data/win32-xpath.gemspec CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'win32-xpath'
5
- spec.version = '1.0.0'
5
+ spec.version = '1.0.1'
6
6
  spec.author = 'Daniel J. Berger'
7
7
  spec.license = 'Artistic 2.0'
8
8
  spec.email = 'djberg96@gmail.com'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: win32-xpath
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-26 00:00:00.000000000 Z
11
+ date: 2015-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake