Method: Fiddle::CStructEntity.malloc

Defined in:
lib/fiddle/struct.rb

.malloc(types, func = nil, size = size(types)) ⇒ Object

Allocates a C struct with the types provided.

See Fiddle::Pointer.malloc for memory management issues.



293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
# File 'lib/fiddle/struct.rb', line 293

def CStructEntity.malloc(types, func = nil, size = size(types))
  if block_given? and func.nil?
    message = "a free function must be supplied to #{self}.malloc " +
              "when it is called with a block"
    raise ArgumentError, message
  end

  pointer = Pointer.malloc(size)
  begin
    struct = new(pointer, types, func)
  rescue
    pointer.free = func
    pointer.call_free
    raise
  end
  if block_given?
    begin
      yield(struct)
    ensure
      struct.call_free
    end
  else
    struct
  end
end