/*
* Monitor a directory.
*
* Returns a Fam::Request object, which is used to identify the monitor
* associated with events.
*
* Raises a Fam::Error exception if the directory could not be
* monitored.
*
* Aliases:
* Fam::Connection#monitor_dir
* Fam::Connection#directory
* Fam::Connection#dir
*
* Examples:
* req = fam.monitor_directory '/tmp'
*
*/
static VALUE fam_conn_dir(VALUE self, VALUE dir)
{
FAMConnection *conn;
FAMRequest *req = NULL;
int err;
Data_Get_Struct(self, FAMConnection, conn);
req = ALLOC(FAMRequest);
FAMREQUEST_GETREQNUM(req) = (int) req;
err = FAMMonitorDirectory2(conn, RSTRING(dir)->ptr, req);
if (err == -1) {
xfree(req);
rb_raise(eError, "Couldn't monitor directory \"%s\": %s",
RSTRING(dir)->ptr ? RSTRING(dir)->ptr : "NULL", fam_error());
}
return wrap_req(req);
}