pacct 0.8.2-universal-linux → 0.8.3-universal-linux

Sign up to get free protection for your applications and to get access to all the features.
data/ext/pacct/pacct_c.c CHANGED
@@ -41,22 +41,11 @@ static VALUE known_groups_by_id = Qnil;
41
41
  static int pageSize;
42
42
  static long ticksPerSecond;
43
43
 
44
- //Converts a comp_t to a long
44
+ //Converts a comp_t to a ulong
45
45
  static unsigned long comp_t_to_ulong(comp_t c) {
46
46
  return (unsigned long)(c & 0x1fff) << (((c >> 13) & 0x7) * 3);
47
47
  }
48
48
 
49
- //Prints a number in binary (for debugging)
50
- static void print_bin(unsigned long val) {
51
- //Cast prevents warning
52
- unsigned long bits = (unsigned long)1 << (sizeof(unsigned long) * 8 - 1);
53
- putchar('0' + ((val & bits) > 0));
54
- while(bits >>= 1) {
55
- putchar('0' + ((val & bits) > 0));
56
- }
57
- putchar('\n');
58
- }
59
-
60
49
  //Converts a long to a comp_t
61
50
  //To consider: make sure the value is positive?
62
51
  //To consider: more unit testing?
@@ -74,16 +63,15 @@ static comp_t ulong_to_comp_t(unsigned long l) {
74
63
  } else {
75
64
  size_t div_bits, rem_bits;
76
65
  bits -= 13;
77
- div_bits = bits / 3;
78
- if(div_bits >= 8) {
79
- rb_raise(rb_eRangeError, "Exponent overflow in ulong_to_comp_t: Value %lu is too large.", l);
80
- }
81
- rem_bits = bits - div_bits * 3;
66
+ rem_bits = bits % 3;
82
67
  if(rem_bits) {
83
- div_bits += 1;
68
+ bits += (3 - rem_bits);
69
+ }
70
+ if(bits >= 24) {
71
+ rb_raise(rb_eRangeError, "Exponent overflow in ulong_to_comp_t: Value %lu is too large.", l);
84
72
  }
85
73
  //To consider: remove '&'?
86
- return ((l >> bits) & 0x1fff) | ((div_bits & 0x7) << 13);
74
+ return ((l >> bits) & 0x1fff) | ((bits / 3) << 13);
87
75
  }
88
76
  }
89
77
 
@@ -855,5 +843,7 @@ void Init_pacct_c() {
855
843
  rb_define_module_function(mTest, "write_failure", test_write_failure, 0);
856
844
  rb_define_module_function(mTest, "read_failure", test_read_failure, 0);
857
845
  rb_define_module_function(mTest, "comp_t_to_ulong", test_comp_t_to_ulong, 1);
846
+ //To do: create unit test.
847
+ rb_define_module_function(mTest, "ulong_to_comp_t", test_ulong_to_comp_t, 1);
858
848
  }
859
849
  }
data/lib/pacct/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Pacct
2
2
  #The library version
3
- VERSION = "0.8.2"
3
+ VERSION = "0.8.3"
4
4
  end
data/spec/entry_spec.rb CHANGED
@@ -8,13 +8,23 @@ describe Pacct::Entry do
8
8
  comp_t_to_ulong.call((3 << 13) | 20).should eql(20 << 9)
9
9
  end
10
10
 
11
- #To do: unit test this (eventually).
12
- =begin
13
11
  it "correctly converts integers to \"comp_t\"s" do
14
-
12
+ ulong_to_comp_t = Pacct::Test.method(:ulong_to_comp_t)
13
+ comp_t_to_ulong = Pacct::Test.method(:comp_t_to_ulong)
14
+ ulong_to_comp_t.call(1).should eql 1
15
+ ulong_to_comp_t.call(1 << 3).should eql(8)
16
+ ulong_to_comp_t.call(20 << 9).should eql((1 << 13) | (20 << 6))
17
+ ulong_to_comp_t.call((1 << 13) - 1).should eql((1 << 13) - 1)
18
+ #Upper limit of comp_t
19
+ ulong_to_comp_t.call(((1 << 13) - 1) << 21).should eql((1 << 16) - 1)
20
+ #Check for proper truncation.
21
+ ulong_to_comp_t.call((((1 << 13) - 1) << 21) + 1).should eql((1 << 16) - 1)
22
+ #Overflow
23
+ expect {
24
+ ulong_to_comp_t.call(1 << (13 + 21))
25
+ }.to raise_error("Exponent overflow in ulong_to_comp_t: Value 17179869184 is too large.")
15
26
  end
16
- =end
17
-
27
+
18
28
  it "raises an error when a comp_t overflows" do
19
29
  e = Pacct::Entry.new
20
30
  expect {
@@ -31,7 +41,7 @@ describe Pacct::Entry do
31
41
  it "raises an error when encountering unknown user/group IDs" do
32
42
  log = Pacct::Log.new('snapshot/pacct_invalid_ids')
33
43
  log.each_entry do |entry|
34
- #This assumes that these users and groups don't actually exist.
44
+ #This assumes that these users and groups don't actually exist on the testing system.
35
45
  #If, for some odd reason, they _do_ exist, this test will fail.
36
46
  expect { entry.user_name }.to raise_error(
37
47
  Errno::ENODATA.new('Unable to obtain user name for ID 4294967295').to_s)
@@ -43,4 +53,4 @@ describe Pacct::Entry do
43
53
  Errno::ENODATA.new("Unable to obtain group ID for name '_____ _'").to_s)
44
54
  end
45
55
  end
46
- end
56
+ end
metadata CHANGED
@@ -1,46 +1,40 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: pacct
3
- version: !ruby/object:Gem::Version
4
- hash: 59
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.3
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 8
9
- - 2
10
- version: 0.8.2
11
6
  platform: universal-linux
12
- authors:
7
+ authors:
13
8
  - Ben Merritt
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2013-05-13 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-05-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rspec
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :development
33
- version_requirements: *id001
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
34
30
  description: A C extension library for parsing accounting files in acct(5) format
35
- email:
31
+ email:
36
32
  - blm768@gmail.com
37
33
  executables: []
38
-
39
- extensions:
34
+ extensions:
40
35
  - ext/pacct/extconf.rb
41
36
  extra_rdoc_files: []
42
-
43
- files:
37
+ files:
44
38
  - .gitignore
45
39
  - Gemfile
46
40
  - LICENSE.txt
@@ -62,38 +56,29 @@ files:
62
56
  - spec/spec_helper.rb
63
57
  homepage: https://github.com/blm768/pacct
64
58
  licenses: []
65
-
66
59
  post_install_message:
67
60
  rdoc_options: []
68
-
69
- require_paths:
61
+ require_paths:
70
62
  - lib
71
- required_ruby_version: !ruby/object:Gem::Requirement
63
+ required_ruby_version: !ruby/object:Gem::Requirement
72
64
  none: false
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- hash: 3
77
- segments:
78
- - 0
79
- version: "0"
80
- required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
70
  none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
- version: "0"
71
+ requirements:
72
+ - - ! '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
89
75
  requirements: []
90
-
91
76
  rubyforge_project:
92
- rubygems_version: 1.8.25
77
+ rubygems_version: 1.8.23
93
78
  signing_key:
94
79
  specification_version: 3
95
80
  summary: A C extension library for parsing accounting files in acct(5) format
96
- test_files:
81
+ test_files:
97
82
  - spec/entry_spec.rb
98
83
  - spec/log_spec.rb
99
84
  - spec/pacct_spec.rb