malloc 1.1.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -7,12 +7,12 @@ require 'rake/loaders/makefile'
7
7
  require 'rbconfig'
8
8
 
9
9
  PKG_NAME = 'malloc'
10
- PKG_VERSION = '1.1.2'
10
+ PKG_VERSION = '1.2.0'
11
11
  CXX = ENV[ 'CXX' ] || 'g++'
12
12
  STRIP = ENV[ 'STRIP' ] || 'strip'
13
13
  RB_FILES = FileList[ 'lib/**/*.rb' ]
14
14
  CC_FILES = FileList[ 'ext/*.cc' ]
15
- HH_FILES = FileList[ 'ext/*.hh' ]
15
+ HH_FILES = FileList[ 'ext/*.hh' ] + FileList[ 'ext/*.tcc' ]
16
16
  TC_FILES = FileList[ 'test/tc_*.rb' ]
17
17
  TS_FILES = FileList[ 'test/ts_*.rb' ]
18
18
  SO_FILE = "ext/#{PKG_NAME}.so"
@@ -165,7 +165,9 @@ rule '.o' => '.cc' do |t|
165
165
  end
166
166
 
167
167
  file ".depends.mf" do |t|
168
- sh "makedepend -f- -- #{$CXXFLAGS} -- #{CC_FILES.join ' '} > #{t.name}"
168
+ sh "g++ -MM #{$CXXFLAGS} #{CC_FILES.join ' '} | " +
169
+ "sed -e :a -e N -e 's/\\n/\\$/g' -e ta | " +
170
+ "sed -e 's/ *\\\\\\$ */ /g' -e 's/\\$/\\n/g' | sed -e 's/^/ext\\//' > #{t.name}"
169
171
  end
170
172
  CC_FILES.each do |t|
171
173
  file t.ext(".o") => t
data/ext/malloc.cc CHANGED
@@ -39,7 +39,7 @@ VALUE Malloc::init( VALUE rbModule )
39
39
  rb_define_method( cRubyClass, "orig_read",
40
40
  RUBY_METHOD_FUNC( mallocRead ), 1 );
41
41
  rb_define_method( cRubyClass, "orig_write",
42
- RUBY_METHOD_FUNC( mallocWrite ), 1 );
42
+ RUBY_METHOD_FUNC( mallocWrite ), -1 );
43
43
  return cRubyClass;
44
44
  }
45
45
 
@@ -80,9 +80,28 @@ VALUE Malloc::mallocRead( VALUE rbSelf, VALUE rbLength )
80
80
  return rb_str_new( self, length );
81
81
  }
82
82
 
83
- VALUE Malloc::mallocWrite( VALUE rbSelf, VALUE rbString )
83
+ VALUE Malloc::mallocWrite( int argc, VALUE *rbArgv, VALUE rbSelf )
84
84
  {
85
- char *self; Data_Get_Struct( rbSelf, char, self );
86
- memcpy( self, StringValuePtr( rbString ), RSTRING_LEN( rbString ) );
87
- return rbString;
85
+ VALUE retVal = Qnil;
86
+ try {
87
+ char *self; Data_Get_Struct( rbSelf, char, self );
88
+ ERRORMACRO( argc == 1 || argc == 2, Error, , "Malloc#write accepts "
89
+ "one or two arguments (not " << argc << ")" );
90
+ if ( argc == 1 ) {
91
+ VALUE rbString = rbArgv[0];
92
+ memcpy( self, StringValuePtr( rbString ), RSTRING_LEN( rbString ) );
93
+ retVal = rbString;
94
+ } else {
95
+ VALUE rbOther = rbArgv[0];
96
+ VALUE rbSize = rbArgv[1];
97
+ char *other; Data_Get_Struct( rbOther, char, other );
98
+ int size = NUM2INT( rbSize );
99
+ memcpy( self, other, size );
100
+ retVal = rbOther;
101
+ };
102
+ } catch ( std::exception &e ) {
103
+ rb_raise( rb_eRuntimeError, "%s", e.what() );
104
+ };
105
+ return retVal;
88
106
  }
107
+
data/ext/malloc.hh CHANGED
@@ -26,7 +26,7 @@ public:
26
26
  static VALUE mallocNew( VALUE rbClass, VALUE rbSize );
27
27
  static VALUE mallocPlus( VALUE rbSelf, VALUE rbOffset );
28
28
  static VALUE mallocRead( VALUE rbSelf, VALUE rbLength );
29
- static VALUE mallocWrite( VALUE rbSelf, VALUE rbString );
29
+ static VALUE mallocWrite( int argc, VALUE *rbArgv, VALUE rbSelf );
30
30
  };
31
31
 
32
32
  #endif
data/lib/malloc_ext.rb CHANGED
@@ -164,16 +164,24 @@ module Hornetseye
164
164
  # m.read 2
165
165
  # # "ab"
166
166
  #
167
- # @param [String] string A string with the data.
167
+ # @param [String,Malloc] data A string or malloc object with the data.
168
168
  # @return [String] Returns the parameter +string+.
169
169
  #
170
170
  # @see #read
171
- def write( string )
172
- if string.bytesize > @size
173
- raise "Must not write more than #{@size} bytes of memory " +
174
- "(illegal attempt to write #{string.bytesize} bytes)"
171
+ def write( data )
172
+ if data.is_a? Malloc
173
+ if data.size > @size
174
+ raise "Must not write more than #{@size} bytes of memory " +
175
+ "(illegal attempt to write #{data.size} bytes)"
176
+ end
177
+ orig_write data, data.size
178
+ else
179
+ if data.bytesize > @size
180
+ raise "Must not write more than #{@size} bytes of memory " +
181
+ "(illegal attempt to write #{data.bytesize} bytes)"
182
+ end
183
+ orig_write data
175
184
  end
176
- orig_write string
177
185
  end
178
186
 
179
187
  private :orig_write
data/test/tc_malloc.rb CHANGED
@@ -19,35 +19,46 @@ Kernel::require 'malloc'
19
19
 
20
20
  class TC_Malloc < Test::Unit::TestCase
21
21
 
22
+ Malloc = Hornetseye::Malloc
23
+
24
+ def Malloc( *args )
25
+ Hornetseye::Malloc *args
26
+ end
27
+
22
28
  def test_new
23
- assert_nothing_raised { Hornetseye::Malloc.new 32 }
24
- assert_nothing_raised { Hornetseye::Malloc 32 }
25
- assert_raise( ArgumentError ) { Hornetseye::Malloc.new }
29
+ assert_nothing_raised { Malloc.new 32 }
30
+ assert_nothing_raised { Malloc 32 }
31
+ assert_raise( ArgumentError ) { Malloc.new }
26
32
  end
27
33
 
28
34
  def test_inspect
29
- assert_equal 'Malloc(32)', Hornetseye::Malloc.new( 32 ).inspect
35
+ assert_equal 'Malloc(32)', Malloc.new( 32 ).inspect
30
36
  end
31
37
 
32
38
  def test_to_s
33
- assert_equal 'Malloc(32)', Hornetseye::Malloc.new( 32 ).to_s
39
+ assert_equal 'Malloc(32)', Malloc.new( 32 ).to_s
34
40
  end
35
41
 
36
42
  def test_read_write
37
- m = Hornetseye::Malloc.new 6
43
+ m = Malloc.new 6
38
44
  assert_equal 'abcdef', m.write( 'abcdef' )
39
45
  assert_equal 'abcdef', m.read( 6 )
40
46
  assert_equal 'ghi', m.write( 'ghi' )
41
47
  assert_equal 'ghidef', m.read( 6 )
48
+ n = Malloc.new 3
49
+ n.write 'jkl'
50
+ assert_equal n, m.write( n )
51
+ assert_equal 'jkldef', m.read( 6 )
42
52
  assert_raise( RuntimeError ) { m.read 7 }
43
53
  assert_raise( RuntimeError ) { m.write 'abcdefg' }
54
+ assert_raise( RuntimeError ) { m.write Malloc.new( 7 ) }
44
55
  end
45
56
 
46
57
  def test_plus
47
- assert_raise( RuntimeError ) { Hornetseye::Malloc.new( 2 ) + ( -1 ) }
48
- assert_nothing_raised { Hornetseye::Malloc.new( 2 ) + 2 }
49
- assert_raise( RuntimeError ) { Hornetseye::Malloc.new( 2 ) + 3 }
50
- m = Hornetseye::Malloc.new 6
58
+ assert_raise( RuntimeError ) { Malloc.new( 2 ) + ( -1 ) }
59
+ assert_nothing_raised { Malloc.new( 2 ) + 2 }
60
+ assert_raise( RuntimeError ) { Malloc.new( 2 ) + 3 }
61
+ m = Malloc.new 6
51
62
  m.write 'abcdef'
52
63
  assert_equal 'cde', ( m + 2 ).read( 3 )
53
64
  assert_raise( RuntimeError ) { ( m + 2 ).read 5 }
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 1
8
7
  - 2
9
- version: 1.1.2
8
+ - 0
9
+ version: 1.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jan Wedekind
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-05 00:00:00 +01:00
17
+ date: 2010-10-18 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency