dc_status_t shearwater_predator_device_open (dc_device_t **out, dc_context_t *context, const char *name) { dc_status_t status = DC_STATUS_SUCCESS; shearwater_predator_device_t *device = NULL; if (out == NULL) return DC_STATUS_INVALIDARGS; // Allocate memory. device = (shearwater_predator_device_t *) dc_device_allocate (context, &shearwater_predator_device_vtable); if (device == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; } // Set the default values. memset (device->fingerprint, 0, sizeof (device->fingerprint)); // Open the device. status = shearwater_common_open (&device->base, context, name); if (status != DC_STATUS_SUCCESS) { goto error_free; } *out = (dc_device_t *) device; return DC_STATUS_SUCCESS; error_free: dc_device_deallocate ((dc_device_t *) device); return status; }
dc_status_t shearwater_predator_device_open (dc_device_t **out, dc_context_t *context, const char *name) { dc_status_t rc = DC_STATUS_SUCCESS; if (out == NULL) return DC_STATUS_INVALIDARGS; // Allocate memory. shearwater_predator_device_t *device = (shearwater_predator_device_t *) malloc (sizeof (shearwater_predator_device_t)); if (device == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; } // Initialize the base class. device_init (&device->base.base, context, &shearwater_predator_device_vtable); // Set the default values. memset (device->fingerprint, 0, sizeof (device->fingerprint)); // Open the device. rc = shearwater_common_open (&device->base, context, name); if (rc != DC_STATUS_SUCCESS) { free (device); return rc; } *out = (dc_device_t *) device; return DC_STATUS_SUCCESS; }