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 | 
