+const struct std_baudrate std_baudrates[] = {
+#ifdef _WIN32
+ /*
+ * The baudrates 50/75/134/150/200/1800/230400/460800 do not seem to
+ * have documented CBR_* macros.
+ */
+ BAUD(110), BAUD(300), BAUD(600), BAUD(1200), BAUD(2400), BAUD(4800),
+ BAUD(9600), BAUD(14400), BAUD(19200), BAUD(38400), BAUD(57600),
+ BAUD(115200), BAUD(128000), BAUD(256000)
+#else
+ BAUD(50), BAUD(75), BAUD(110), BAUD(134), BAUD(150), BAUD(200), BAUD(300),
+ BAUD(600), BAUD(1200), BAUD(1800), BAUD(2400), BAUD(4800), BAUD(9600),
+ BAUD(19200), BAUD(38400), BAUD(57600), BAUD(115200), BAUD(230400),
+#if !defined(__APPLE__) && !defined(__OpenBSD__)
+ BAUD(460800)
+#endif
+#endif
+};
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
+#define NUM_STD_BAUDRATES ARRAY_SIZE(std_baudrates)
+
+/* Helper functions. */
+static enum sp_return validate_port(struct sp_port *port);
+static struct sp_port **list_append(struct sp_port **list, const char *portname);
+static enum sp_return get_config(struct sp_port *port, struct port_data *data,
+ struct sp_port_config *config);
+static enum sp_return set_config(struct sp_port *port, struct port_data *data,
+ const struct sp_port_config *config);
+
+enum sp_return sp_get_port_by_name(const char *portname, struct sp_port **port_ptr)