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):

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:

QNX Neutrino

Safety:
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes

See also:

_io_connect, _io_connect_link_reply, _io_connect_ftype_reply, ConnectClientInfo(), iofunc_attr_t, iofunc_check_access(), resmgr_context_t

Writing a Resource Manager

Resource Managers chapter of Getting Started with QNX Neutrino