X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=serialport.c;h=074534edb8a898c280109a25b3da9ae537e1820e;hb=025c264448de771ceb130d4d01aacbb9ca8453ea;hp=a9b88e656ea49e7bf6a37e7ad1bc01f3eec44642;hpb=47fcf8ec8522d94f698b6c5a94deb30478f7ee26;p=libserialport.git diff --git a/serialport.c b/serialport.c index a9b88e6..074534e 100644 --- a/serialport.c +++ b/serialport.c @@ -126,7 +126,7 @@ SP_API char *sp_get_port_name(const struct sp_port *port) RETURN_STRING(port->name); } -SP_API char *sp_get_port_description(struct sp_port *port) +SP_API char *sp_get_port_description(const struct sp_port *port) { TRACE("%p", port); @@ -136,7 +136,7 @@ SP_API char *sp_get_port_description(struct sp_port *port) RETURN_STRING(port->description); } -SP_API enum sp_transport sp_get_port_transport(struct sp_port *port) +SP_API enum sp_transport sp_get_port_transport(const struct sp_port *port) { TRACE("%p", port); @@ -322,39 +322,37 @@ fail: SP_API enum sp_return sp_list_ports(struct sp_port ***list_ptr) { +#ifndef NO_ENUMERATION struct sp_port **list; int ret; +#endif TRACE("%p", list_ptr); if (!list_ptr) RETURN_ERROR(SP_ERR_ARG, "Null result pointer"); +#ifdef NO_ENUMERATION + RETURN_ERROR(SP_ERR_SUPP, "Enumeration not supported on this platform"); +#else DEBUG("Enumerating ports"); - if (!(list = malloc(sizeof(struct sp_port **)))) + if (!(list = malloc(sizeof(struct sp_port *)))) RETURN_ERROR(SP_ERR_MEM, "Port list malloc failed"); list[0] = NULL; -#ifdef NO_ENUMERATION - ret = SP_ERR_SUPP; -#else ret = list_ports(&list); -#endif - switch (ret) { - case SP_OK: + if (ret == SP_OK) { *list_ptr = list; - RETURN_OK(); - case SP_ERR_SUPP: - DEBUG_ERROR(SP_ERR_SUPP, "Enumeration not supported on this platform"); - default: - if (list) - sp_free_port_list(list); + } else { + sp_free_port_list(list); *list_ptr = NULL; - return ret; } + + RETURN_CODEVAL(ret); +#endif } SP_API void sp_free_port_list(struct sp_port **list) @@ -546,7 +544,7 @@ SP_API enum sp_return sp_open(struct sp_port *port, enum sp_mode flags) data.dcb.fDsrSensitivity = FALSE; data.dcb.fErrorChar = FALSE; data.dcb.fNull = FALSE; - data.dcb.fAbortOnError = TRUE; + data.dcb.fAbortOnError = FALSE; #else /* Turn off all fancy termios tricks, give us a raw channel. */ data.term.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IMAXBEL); @@ -1169,11 +1167,12 @@ static enum sp_return add_handle(struct sp_event_set *event_set, sizeof(event_handle) * (event_set->count + 1)))) RETURN_ERROR(SP_ERR_MEM, "Handle array realloc() failed"); + event_set->handles = new_handles; + if (!(new_masks = realloc(event_set->masks, sizeof(enum sp_event) * (event_set->count + 1)))) RETURN_ERROR(SP_ERR_MEM, "Mask array realloc() failed"); - event_set->handles = new_handles; event_set->masks = new_masks; ((event_handle *) event_set->handles)[event_set->count] = handle;