]> sigrok.org Git - libserialport.git/blobdiff - freebsd.c
libserialport_internal.h: Add #include guard.
[libserialport.git] / freebsd.c
index 4b41b2c1da87ea0f3422dfa23f31e0450e6dcf9d..f7957edfe8ffe385b1d2b937fd4ca6d02aaae29c 100644 (file)
--- a/freebsd.c
+++ b/freebsd.c
@@ -162,7 +162,7 @@ static int sysctl_query_dev_drv(const char *drv_name_str,
        if (!ttyname || !ttyport_cnt)
                return -1;
 
-       snprintf(sbuf, sizeof(sbuf) - 1, "dev.%s.%s.ttyname", drv_name_str,
+       snprintf(sbuf, sizeof(sbuf), "dev.%s.%s.ttyname", drv_name_str,
                 drv_inst_str);
        tbuf_len = sizeof(tbuf) - 1;
        if ((rc = sysctlbyname(sbuf, tbuf, &tbuf_len, NULL, 0)) != 0)
@@ -173,7 +173,7 @@ static int sysctl_query_dev_drv(const char *drv_name_str,
        DBG("sysctl: '%s' (%d) (%d): '%.*s'\n", sbuf, rc, (int)tbuf_len,
            (int)tbuf_len, tbuf);
 
-       snprintf(sbuf, sizeof(sbuf) - 1, "dev.%s.%s.ttyports",
+       snprintf(sbuf, sizeof(sbuf), "dev.%s.%s.ttyports",
                 drv_name_str, drv_inst_str);
        tbuf_len = sizeof(tbuf) - 1;
        rc = sysctlbyname(sbuf, tbuf, &tbuf_len, NULL, 0);
@@ -253,6 +253,15 @@ SP_PRIV enum sp_return get_port_details(struct sp_port *port)
                RETURN_ERROR(SP_ERR_ARG, "Device name not recognized.");
        }
 
+       /* Native UART enumeration. */
+       if ((cua_sfx[0] == 'u') || (cua_sfx[0] == 'd')) {
+               port->transport = SP_TRANSPORT_NATIVE;
+               snprintf(tbuf, sizeof(tbuf), "cua%s", cua_sfx);
+               port->description = strdup(tbuf);
+               RETURN_OK();
+       }
+
+       /* USB device enumeration. */
        dev = dev_last = NULL;
        be = libusb20_be_alloc_default();
        cua_dev_found = 0;
@@ -278,9 +287,9 @@ SP_PRIV enum sp_return get_port_details(struct sp_port *port)
                                        /* Handle multiple subinstances of serial ports in the same driver instance. */
                                        for (sub_inst = 0; sub_inst < ttyport_cnt; sub_inst++) {
                                                if (ttyport_cnt == 1)
-                                                       snprintf(tbuf, sizeof(tbuf) - 1, "%s", ttyname);
+                                                       snprintf(tbuf, sizeof(tbuf), "%s", ttyname);
                                                else
-                                                       snprintf(tbuf, sizeof(tbuf) - 1, "%s.%d", ttyname, sub_inst);
+                                                       snprintf(tbuf, sizeof(tbuf), "%s.%d", ttyname, sub_inst);
                                                if (!strcmp(cua_sfx, tbuf)) {
                                                        DBG("MATCH: '%s' == '%s'\n", cua_sfx, tbuf);
                                                        cua_dev_found = 1;
@@ -339,8 +348,8 @@ SP_PRIV enum sp_return list_ports(struct sp_port ***list)
                if (strend(entry.d_name, ".lock"))
                        continue;
 
-               DEBUG_FMT("Found device %s", name);
                snprintf(name, sizeof(name), "/dev/%s", entry.d_name);
+               DEBUG_FMT("Found device %s", name);
 
                /* Check that we can open tty/cua device in rw mode - we need that. */
                if ((fd = open(name, O_RDWR | O_NONBLOCK | O_NOCTTY | O_TTY_INIT | O_CLOEXEC)) < 0) {