{
return xs_single(XS_READ, join(dir, node), len);
}
+EXPORT_SYMBOL(xenbus_read);
/* Write the value of a single file.
* Returns -err on failure. createflags can be 0, O_CREAT, or O_CREAT|O_EXCL.
{
return xs_error(xs_single(XS_TRANSACTION_START, subtree, NULL));
}
+EXPORT_SYMBOL(xenbus_transaction_start);
/* End a transaction.
* If abandon is true, transaction is discarded instead of committed.
strcpy(abortstr, "T");
return xs_error(xs_single(XS_TRANSACTION_END, abortstr, NULL));
}
+EXPORT_SYMBOL(xenbus_transaction_end);
/* Single read and scanf: returns -errno or num scanned. */
int xenbus_scanf(const char *dir, const char *node, const char *fmt, ...)
return -ERANGE;
return ret;
}
+EXPORT_SYMBOL(xenbus_scanf);
/* Single printf and write: returns -errno or 0. */
int xenbus_printf(const char *dir, const char *node, const char *fmt, ...)
BUG_ON(ret > sizeof(printf_buffer)-1);
return xenbus_write(dir, node, printf_buffer, O_CREAT);
}
+EXPORT_SYMBOL(xenbus_printf);
/* Report a (negative) errno into the store, with explanation. */
void xenbus_dev_error(struct xenbus_device *dev, int err, const char *fmt, ...)
printk("xenbus: failed to write error node for %s (%s)\n",
dev->nodename, printf_buffer);
}
+EXPORT_SYMBOL(xenbus_dev_error);
/* Clear any error. */
void xenbus_dev_ok(struct xenbus_device *dev)
dev->has_error = 0;
}
}
+EXPORT_SYMBOL(xenbus_dev_ok);
/* Takes tuples of names, scanf-style args, and void **, NULL terminated. */
int xenbus_gather(const char *dir, ...)
va_end(ap);
return ret;
}
+EXPORT_SYMBOL(xenbus_gather);
static int xs_watch(const char *path, const char *token)
{
list_add(&watch->list, &watches);
return err;
}
+EXPORT_SYMBOL(register_xenbus_watch);
void unregister_xenbus_watch(struct xenbus_watch *watch)
{
"XENBUS Failed to release watch %s: %i\n",
watch->node, err);
}
+EXPORT_SYMBOL(unregister_xenbus_watch);
/* Re-register callbacks to all watches. */
void reregister_xenbus_watches(void)