Hello!

According to http://www.hdfgroup.org/HDF5/doc/H5.user/Errors.html, H5Ewalk_cb example, one should use H5Eget_major/H5Eget_minor procedures to retrieve error information during custom stack traversal. However http://www.hdfgroup.org/HDF5/doc/RM/RM_H5E.html#Error-GetMajor says "This function has been deprecated"; I believe one needs to use H5Eget_msg instead.

I've tried to implement custom error stack traversal. In attachment is a minimal example test.dpr which can be compiled with FreePascal. Whaen I run the program I get corrupted values in err_desc^.desc:

Major: File accessibilty
Minor: Unable to open file
ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■
☺▌v-#▲☻↑    minor: Unable to open file
ne 343 in H5FD_sec2_open(): unable to open file: name = 'non-existent.hdf', errn
o = 2, error message = 'No such file or directory', flags = 0, o_flags = 0
Ён║лллллллл line 1585 in ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю ■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■☺▌v-#▲☻↑ minor: Unab
le to open file
ne 343 in H5FD_sec2_open(): unable to open file: name = 'non-existent.hdf', errn
o = 2, error message = 'No such file or directory', flags = 0, o_flags = 0
Ён║лллллллл: ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■☺▌v-#▲☻↑ minor: Unable t
o open file
ne 343 in H5FD_sec2_open(): unable to open file: name = 'non-existent.hdf', errn
o = 2, error message = 'No such file or directory', flags = 0, o_flags = 0
Ён║лллллллл

However if I comment out the following lines, err_desc^.desc stays valid:

//H5Eget_msg(err_desc^.maj_num, @Typ, @Buf, Length(Buf));
//WriteLn(Format('Major: %s', [String(Buf)]));
//H5Eget_msg(err_desc^.min_num, @Typ, @Buf, Length(Buf));
//WriteLn(Format('Minor: %s', [String(Buf)]));

yields

..\..\src\H5F.c line 1585 in H5Fopen: unable to open file

It seems that H5Eget_msg is the culprit.

Please CC [email protected] if answering this message.

I'm ready to provide any additional info,
Andrey Paramonov

--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

program test;

{$APPTYPE CONSOLE}

uses
  sysutils;

type
  hid_t = Integer;
  herr_t = Integer;
  size_t = UInt64;
  ssize_t = Int64;

  H5E_direction_t = Integer;

  PH5E_error2_t = ^H5E_error2_t;
  H5E_error2_t = packed record
    cls_id: hid_t;
    maj_num: hid_t;
    min_num: hid_t;
    line: Cardinal;
    func_name: PAnsiChar;
    file_name: PAnsiChar;
    desc: PAnsiChar;
  end;

  H5E_walk2_t = function(n: Cardinal; err_desc: PH5E_error2_t; client_data: 
Pointer): herr_t; cdecl;

  H5E_type_t = Integer;
  PH5E_type_t = ^H5E_type_t;

const
  H5E_DEFAULT = 0;
  H5E_WALK_DOWNWARD = 1;

function H5Fopen(filename: PAnsiChar;
                 flags: Cardinal;
                 access_plist: hid_t): hid_t; cdecl; external 'hdf5.dll';
function H5Ewalk2(err_stack: hid_t;
                  direction: H5E_direction_t;
                  func: H5E_walk2_t;
                  client_data: Pointer): herr_t; cdecl; external 'hdf5.dll';
function H5Eget_msg(msg_id: hid_t;
                    typ: PH5E_type_t;
                    msg: PAnsiChar;
                    size: size_t): ssize_t; cdecl; external 'hdf5.dll';

  function Callback(n: Cardinal; err_desc: PH5E_error2_t;
    client_data: Pointer): herr_t; cdecl;
  var
    Buf: array[0..1024 - 1] of AnsiChar;
    Typ: H5E_type_t;
  begin
    //H5Eget_msg(err_desc^.maj_num, @Typ, @Buf, Length(Buf));
    //WriteLn(Format('Major: %s', [String(Buf)]));
    //H5Eget_msg(err_desc^.min_num, @Typ, @Buf, Length(Buf));
    //WriteLn(Format('Minor: %s', [String(Buf)]));
    WriteLn(Format('%s line %d in %s: %s',
        [err_desc^.file_name, err_desc^.line, err_desc^.func_name, 
err_desc^.desc]));
    WriteLn;
    Result := 0;
  end;

begin
  H5Fopen('non-existent.hdf', 0, H5E_DEFAULT);
  H5Ewalk2(H5E_DEFAULT, H5E_WALK_DOWNWARD, @Callback, nil);
end.

_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org

Reply via email to