mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-30 15:32:37 +08:00
[svn-r731] Changes since 19980930
---------------------- ./src/H5G.c ./test/unlink.c Renaming a symbolic link works like on Unix: the link is renamed but the link value is unchanged.
This commit is contained in:
parent
beab7f66e5
commit
177e41c948
37
src/H5G.c
37
src/H5G.c
@ -2419,15 +2419,52 @@ H5G_unlink(H5G_entry_t *loc, const char *name)
|
|||||||
herr_t
|
herr_t
|
||||||
H5G_move(H5G_entry_t *loc, const char *src_name, const char *dst_name)
|
H5G_move(H5G_entry_t *loc, const char *src_name, const char *dst_name)
|
||||||
{
|
{
|
||||||
|
H5G_stat_t sb;
|
||||||
|
char *linkval=NULL;
|
||||||
|
size_t lv_size=32;
|
||||||
|
|
||||||
FUNC_ENTER(H5G_move, FAIL);
|
FUNC_ENTER(H5G_move, FAIL);
|
||||||
assert(loc);
|
assert(loc);
|
||||||
assert(src_name && *src_name);
|
assert(src_name && *src_name);
|
||||||
assert(dst_name && *dst_name);
|
assert(dst_name && *dst_name);
|
||||||
|
|
||||||
|
if (H5G_get_objinfo(loc, src_name, FALSE, &sb)<0) {
|
||||||
|
HRETURN_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
|
||||||
|
}
|
||||||
|
if (H5G_LINK==sb.type) {
|
||||||
|
/*
|
||||||
|
* When renaming a symbolic link we rename the link but don't change
|
||||||
|
* the value of the link.
|
||||||
|
*/
|
||||||
|
do {
|
||||||
|
if (NULL==(linkval=H5MM_realloc(linkval, 2*lv_size))) {
|
||||||
|
HRETURN_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
|
||||||
|
"unable to allocate space for symbolic link "
|
||||||
|
"value");
|
||||||
|
}
|
||||||
|
linkval[lv_size-1] = '\0';
|
||||||
|
if (H5G_linkval(loc, src_name, lv_size, linkval)<0) {
|
||||||
|
HRETURN_ERROR(H5E_SYM, H5E_CANTINIT, FAIL,
|
||||||
|
"unable to read symbolic link value");
|
||||||
|
}
|
||||||
|
} while (linkval[lv_size-1]);
|
||||||
|
if (H5G_link(loc, H5G_LINK_SOFT, linkval, dst_name)<0) {
|
||||||
|
HRETURN_ERROR(H5E_SYM, H5E_CANTINIT, FAIL,
|
||||||
|
"unable to rename symbolic link");
|
||||||
|
}
|
||||||
|
H5MM_xfree(linkval);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Rename the object.
|
||||||
|
*/
|
||||||
if (H5G_link(loc, H5G_LINK_HARD, src_name, dst_name)<0) {
|
if (H5G_link(loc, H5G_LINK_HARD, src_name, dst_name)<0) {
|
||||||
HRETURN_ERROR(H5E_SYM, H5E_CANTINIT, FAIL,
|
HRETURN_ERROR(H5E_SYM, H5E_CANTINIT, FAIL,
|
||||||
"unable to register new name for object");
|
"unable to register new name for object");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove the old name */
|
||||||
if (H5G_unlink(loc, src_name)<0) {
|
if (H5G_unlink(loc, src_name)<0) {
|
||||||
HRETURN_ERROR(H5E_SYM, H5E_CANTINIT, FAIL,
|
HRETURN_ERROR(H5E_SYM, H5E_CANTINIT, FAIL,
|
||||||
"unable to deregister old object name");
|
"unable to deregister old object name");
|
||||||
|
Loading…
Reference in New Issue
Block a user