win32-xpath 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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