ssize_t ORBDevNode::publish(const orb_metadata *meta, orb_advert_t handle, const void *data) { ORBDevNode *devnode = (ORBDevNode *)handle; int ret; /* this is a bit risky, since we are trusting the handle in order to deref it */ if (devnode->_meta != meta) { errno = EINVAL; return ERROR; } /* call the devnode write method with no file pointer */ ret = devnode->write(nullptr, (const char *)data, meta->o_size); if (ret < 0) return ERROR; if (ret != (int)meta->o_size) { errno = EIO; return ERROR; } return OK; }