static xbee_err init(struct xbee *xbee, va_list ap) { xbee_err ret; char *t; struct xbee_modeData *data; if (!xbee) return XBEE_EMISSINGPARAM; if ((data = malloc(sizeof(*data))) == NULL) return XBEE_ENOMEM; memset(data, 0, sizeof(*data)); xbee->modeData = data; ret = XBEE_ENONE; /* currently I don't see a better way than this - using va_arg()... which is gross */ t = va_arg(ap, char*); if ((data->serialInfo.device = malloc(strlen(t) + 1)) == NULL) { ret = XBEE_ENOMEM; goto die; } strcpy(data->serialInfo.device, t); data->serialInfo.baudrate = va_arg(ap, int); if ((ret = xsys_serialSetup(&data->serialInfo)) != XBEE_ENONE) goto die; return XBEE_ENONE; die: mode_shutdown(xbee); return ret; }
static xbee_err init(struct xbee *xbee, va_list ap) { xbee_err ret; char *t; struct xbee_modeData *data; if (!xbee) return XBEE_EMISSINGPARAM; if ((data = malloc(sizeof(*data))) == NULL) return XBEE_ENOMEM; memset(data, 0, sizeof(*data)); xbee->modeData = data; data->conList = xbee_ll_alloc(); ret = XBEE_ENONE; /* get the hostname */ t = va_arg(ap, char*); if ((data->netInfo.host = malloc(strlen(t) + 1)) == NULL) { ret = XBEE_ENOMEM; goto die; } strcpy(data->netInfo.host, t); /* get the port number */ data->netInfo.port = va_arg(ap, int); /* setup the network interface */ if ((ret = xbee_netSetup(&data->netInfo)) != XBEE_ENONE) goto die; return XBEE_ENONE; die: mode_shutdown(xbee); return ret; }