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