iofunc_unlink()
Verify that an entry can be unlinked
Synopsis:
#include <sys/iofunc.h>
int iofunc_unlink( resmgr_context_t* ctp,
io_unlink_t* msg,
iofunc_attr_t* attr,
iofunc_attr_t* dattr,
struct _client_info* info );
Arguments:
- ctp
- A pointer to a resmgr_context_t structure that the resource-manager library uses to pass context information between functions.
- msg
- A pointer to the io_unlink_t structure that contains the message that the resource manager received; see below.
- attr
- A pointer to the iofunc_attr_t structure that describes the characteristics of the resource.
- dattr
- NULL, or a pointer to the iofunc_attr_t structure that describes the characteristics of the parent directory.
- info
- NULL, or a pointer to a _client_info structure that contains information about the client. For information about this structure, see ConnectClientInfo().
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The iofunc_unlink() function verifies that the msg specifies valid semantics for an unlink, and that the client is allowed to unlink the resource, as specified by a combination of who the client is (info), and the resource attributes attr, dattr, attr->uid and attr->gid.
If a directory entry is being removed, iofunc_unlink() checks to see that the directory is empty. The iofunc_unlink() function also updates the time stamps, and decrements the link count for the entry.
io_unlink_t structure
The io_unlink_t structure holds the _IO_CONNECT message received by the resource manager:
typedef union {
struct _io_connect connect;
struct _io_connect_link_reply link_reply;
struct _io_connect_ftype_reply ftype_reply;
} io_unlink_t;
This message structure is a union of an input message (coming to the resource manager), _io_connect, and two possible output or reply messages (going back to the client):
- _io_connect_link_reply
if the reply is redirecting the client to another resource
Or:
- _io_connect_ftype_reply if the reply consists of a status and a file type.
Returns:
- EOK
- Successful completion.
- ENOTDIR
- Attempt to unlink a nondirectory entry using directory semantics, (e.g., rmdir file).
- EINVAL
- Attempt to remove the "." directory.
- ENOTEMPTY
- Attempt to remove a directory that isn't empty.
- EROFS
- Attempt to remove an entry on a read-only filesystem.
- EACCES
- The client doesn't have permissions to do the operation.
- EPERM
- The group ID or owner ID didn't match.
Classification:
Safety: | |
---|---|
Cancellation point | No |
Signal handler | Yes |
Thread | Yes |