src/cx/string.h

changeset 1162
e3bb67b72d33
parent 1134
60edcd57d54c
equal deleted inserted replaced
1161:747c4baed44f 1162:e3bb67b72d33
1294 * @param groupsep each character in this string is treated as group separator and ignored during conversion 1294 * @param groupsep each character in this string is treated as group separator and ignored during conversion
1295 * @retval zero success 1295 * @retval zero success
1296 * @retval non-zero conversion was not possible 1296 * @retval non-zero conversion was not possible
1297 */ 1297 */
1298 cx_attr_access_w(2) cx_attr_nonnull_arg(2) 1298 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
1299 int cx_strtoz_lc_(cxstring str, ssize_t *output, int base, const char *groupsep);
1300
1301 /**
1302 * Converts a string to a number.
1303 *
1304 * The function returns non-zero when conversion is not possible.
1305 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1306 * It sets errno to ERANGE when the target datatype is too small.
1307 *
1308 * @param str the string to convert
1309 * @param output a pointer to the integer variable where the result shall be stored
1310 * @param base 2, 8, 10, or 16
1311 * @param groupsep each character in this string is treated as group separator and ignored during conversion
1312 * @retval zero success
1313 * @retval non-zero conversion was not possible
1314 */
1315 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
1316 int cx_strtous_lc_(cxstring str, unsigned short *output, int base, const char *groupsep); 1299 int cx_strtous_lc_(cxstring str, unsigned short *output, int base, const char *groupsep);
1317 1300
1318 /** 1301 /**
1319 * Converts a string to a number. 1302 * Converts a string to a number.
1320 * 1303 *
1447 * @param groupsep each character in this string is treated as group separator and ignored during conversion 1430 * @param groupsep each character in this string is treated as group separator and ignored during conversion
1448 * @retval zero success 1431 * @retval zero success
1449 * @retval non-zero conversion was not possible 1432 * @retval non-zero conversion was not possible
1450 */ 1433 */
1451 cx_attr_access_w(2) cx_attr_nonnull_arg(2) 1434 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
1452 int cx_strtouz_lc_(cxstring str, size_t *output, int base, const char *groupsep); 1435 int cx_strtoz_lc_(cxstring str, size_t *output, int base, const char *groupsep);
1453 1436
1454 /** 1437 /**
1455 * Converts a string to a single precision floating point number. 1438 * Converts a string to a single precision floating point number.
1456 * 1439 *
1457 * The function returns non-zero when conversion is not possible. 1440 * The function returns non-zero when conversion is not possible.
1625 * @param base 2, 8, 10, or 16 1608 * @param base 2, 8, 10, or 16
1626 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion 1609 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1627 * @retval zero success 1610 * @retval zero success
1628 * @retval non-zero conversion was not possible 1611 * @retval non-zero conversion was not possible
1629 */ 1612 */
1613 #define cx_strtous_lc(str, output, base, groupsep) cx_strtous_lc_(cx_strcast(str), output, base, groupsep)
1614
1615 /**
1616 * Converts a string to a number.
1617 *
1618 * The function returns non-zero when conversion is not possible.
1619 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1620 * It sets errno to ERANGE when the target datatype is too small.
1621 *
1622 * @param str the string to convert
1623 * @param output a pointer to the integer variable where the result shall be stored
1624 * @param base 2, 8, 10, or 16
1625 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1626 * @retval zero success
1627 * @retval non-zero conversion was not possible
1628 */
1629 #define cx_strtou_lc(str, output, base, groupsep) cx_strtou_lc_(cx_strcast(str), output, base, groupsep)
1630
1631 /**
1632 * Converts a string to a number.
1633 *
1634 * The function returns non-zero when conversion is not possible.
1635 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1636 * It sets errno to ERANGE when the target datatype is too small.
1637 *
1638 * @param str the string to convert
1639 * @param output a pointer to the integer variable where the result shall be stored
1640 * @param base 2, 8, 10, or 16
1641 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1642 * @retval zero success
1643 * @retval non-zero conversion was not possible
1644 */
1645 #define cx_strtoul_lc(str, output, base, groupsep) cx_strtoul_lc_(cx_strcast(str), output, base, groupsep)
1646
1647 /**
1648 * Converts a string to a number.
1649 *
1650 * The function returns non-zero when conversion is not possible.
1651 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1652 * It sets errno to ERANGE when the target datatype is too small.
1653 *
1654 * @param str the string to convert
1655 * @param output a pointer to the integer variable where the result shall be stored
1656 * @param base 2, 8, 10, or 16
1657 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1658 * @retval zero success
1659 * @retval non-zero conversion was not possible
1660 */
1661 #define cx_strtoull_lc(str, output, base, groupsep) cx_strtoull_lc_(cx_strcast(str), output, base, groupsep)
1662
1663 /**
1664 * Converts a string to a number.
1665 *
1666 * The function returns non-zero when conversion is not possible.
1667 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1668 * It sets errno to ERANGE when the target datatype is too small.
1669 *
1670 * @param str the string to convert
1671 * @param output a pointer to the integer variable where the result shall be stored
1672 * @param base 2, 8, 10, or 16
1673 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1674 * @retval zero success
1675 * @retval non-zero conversion was not possible
1676 */
1677 #define cx_strtou8_lc(str, output, base, groupsep) cx_strtou8_lc_(cx_strcast(str), output, base, groupsep)
1678
1679 /**
1680 * Converts a string to a number.
1681 *
1682 * The function returns non-zero when conversion is not possible.
1683 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1684 * It sets errno to ERANGE when the target datatype is too small.
1685 *
1686 * @param str the string to convert
1687 * @param output a pointer to the integer variable where the result shall be stored
1688 * @param base 2, 8, 10, or 16
1689 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1690 * @retval zero success
1691 * @retval non-zero conversion was not possible
1692 */
1693 #define cx_strtou16_lc(str, output, base, groupsep) cx_strtou16_lc_(cx_strcast(str), output, base, groupsep)
1694
1695 /**
1696 * Converts a string to a number.
1697 *
1698 * The function returns non-zero when conversion is not possible.
1699 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1700 * It sets errno to ERANGE when the target datatype is too small.
1701 *
1702 * @param str the string to convert
1703 * @param output a pointer to the integer variable where the result shall be stored
1704 * @param base 2, 8, 10, or 16
1705 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1706 * @retval zero success
1707 * @retval non-zero conversion was not possible
1708 */
1709 #define cx_strtou32_lc(str, output, base, groupsep) cx_strtou32_lc_(cx_strcast(str), output, base, groupsep)
1710
1711 /**
1712 * Converts a string to a number.
1713 *
1714 * The function returns non-zero when conversion is not possible.
1715 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1716 * It sets errno to ERANGE when the target datatype is too small.
1717 *
1718 * @param str the string to convert
1719 * @param output a pointer to the integer variable where the result shall be stored
1720 * @param base 2, 8, 10, or 16
1721 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1722 * @retval zero success
1723 * @retval non-zero conversion was not possible
1724 */
1725 #define cx_strtou64_lc(str, output, base, groupsep) cx_strtou64_lc_(cx_strcast(str), output, base, groupsep)
1726
1727 /**
1728 * Converts a string to a number.
1729 *
1730 * The function returns non-zero when conversion is not possible.
1731 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1732 * It sets errno to ERANGE when the target datatype is too small.
1733 *
1734 * @param str the string to convert
1735 * @param output a pointer to the integer variable where the result shall be stored
1736 * @param base 2, 8, 10, or 16
1737 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1738 * @retval zero success
1739 * @retval non-zero conversion was not possible
1740 */
1630 #define cx_strtoz_lc(str, output, base, groupsep) cx_strtoz_lc_(cx_strcast(str), output, base, groupsep) 1741 #define cx_strtoz_lc(str, output, base, groupsep) cx_strtoz_lc_(cx_strcast(str), output, base, groupsep)
1631 1742
1632 /** 1743 /**
1633 * Converts a string to a number. 1744 * Converts a string to a number.
1634 * 1745 *
1635 * The function returns non-zero when conversion is not possible. 1746 * The function returns non-zero when conversion is not possible.
1636 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1747 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1637 * It sets errno to ERANGE when the target datatype is too small. 1748 * It sets errno to ERANGE when the target datatype is too small.
1638 * 1749 *
1639 * @param str the string to convert
1640 * @param output a pointer to the integer variable where the result shall be stored
1641 * @param base 2, 8, 10, or 16
1642 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1643 * @retval zero success
1644 * @retval non-zero conversion was not possible
1645 */
1646 #define cx_strtous_lc(str, output, base, groupsep) cx_strtous_lc_(cx_strcast(str), output, base, groupsep)
1647
1648 /**
1649 * Converts a string to a number.
1650 *
1651 * The function returns non-zero when conversion is not possible.
1652 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1653 * It sets errno to ERANGE when the target datatype is too small.
1654 *
1655 * @param str the string to convert
1656 * @param output a pointer to the integer variable where the result shall be stored
1657 * @param base 2, 8, 10, or 16
1658 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1659 * @retval zero success
1660 * @retval non-zero conversion was not possible
1661 */
1662 #define cx_strtou_lc(str, output, base, groupsep) cx_strtou_lc_(cx_strcast(str), output, base, groupsep)
1663
1664 /**
1665 * Converts a string to a number.
1666 *
1667 * The function returns non-zero when conversion is not possible.
1668 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1669 * It sets errno to ERANGE when the target datatype is too small.
1670 *
1671 * @param str the string to convert
1672 * @param output a pointer to the integer variable where the result shall be stored
1673 * @param base 2, 8, 10, or 16
1674 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1675 * @retval zero success
1676 * @retval non-zero conversion was not possible
1677 */
1678 #define cx_strtoul_lc(str, output, base, groupsep) cx_strtoul_lc_(cx_strcast(str), output, base, groupsep)
1679
1680 /**
1681 * Converts a string to a number.
1682 *
1683 * The function returns non-zero when conversion is not possible.
1684 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1685 * It sets errno to ERANGE when the target datatype is too small.
1686 *
1687 * @param str the string to convert
1688 * @param output a pointer to the integer variable where the result shall be stored
1689 * @param base 2, 8, 10, or 16
1690 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1691 * @retval zero success
1692 * @retval non-zero conversion was not possible
1693 */
1694 #define cx_strtoull_lc(str, output, base, groupsep) cx_strtoull_lc_(cx_strcast(str), output, base, groupsep)
1695
1696 /**
1697 * Converts a string to a number.
1698 *
1699 * The function returns non-zero when conversion is not possible.
1700 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1701 * It sets errno to ERANGE when the target datatype is too small.
1702 *
1703 * @param str the string to convert
1704 * @param output a pointer to the integer variable where the result shall be stored
1705 * @param base 2, 8, 10, or 16
1706 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1707 * @retval zero success
1708 * @retval non-zero conversion was not possible
1709 */
1710 #define cx_strtou8_lc(str, output, base, groupsep) cx_strtou8_lc_(cx_strcast(str), output, base, groupsep)
1711
1712 /**
1713 * Converts a string to a number.
1714 *
1715 * The function returns non-zero when conversion is not possible.
1716 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1717 * It sets errno to ERANGE when the target datatype is too small.
1718 *
1719 * @param str the string to convert
1720 * @param output a pointer to the integer variable where the result shall be stored
1721 * @param base 2, 8, 10, or 16
1722 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1723 * @retval zero success
1724 * @retval non-zero conversion was not possible
1725 */
1726 #define cx_strtou16_lc(str, output, base, groupsep) cx_strtou16_lc_(cx_strcast(str), output, base, groupsep)
1727
1728 /**
1729 * Converts a string to a number.
1730 *
1731 * The function returns non-zero when conversion is not possible.
1732 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1733 * It sets errno to ERANGE when the target datatype is too small.
1734 *
1735 * @param str the string to convert
1736 * @param output a pointer to the integer variable where the result shall be stored
1737 * @param base 2, 8, 10, or 16
1738 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1739 * @retval zero success
1740 * @retval non-zero conversion was not possible
1741 */
1742 #define cx_strtou32_lc(str, output, base, groupsep) cx_strtou32_lc_(cx_strcast(str), output, base, groupsep)
1743
1744 /**
1745 * Converts a string to a number.
1746 *
1747 * The function returns non-zero when conversion is not possible.
1748 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1749 * It sets errno to ERANGE when the target datatype is too small.
1750 *
1751 * @param str the string to convert
1752 * @param output a pointer to the integer variable where the result shall be stored
1753 * @param base 2, 8, 10, or 16
1754 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1755 * @retval zero success
1756 * @retval non-zero conversion was not possible
1757 */
1758 #define cx_strtou64_lc(str, output, base, groupsep) cx_strtou64_lc_(cx_strcast(str), output, base, groupsep)
1759
1760 /**
1761 * Converts a string to a number.
1762 *
1763 * The function returns non-zero when conversion is not possible.
1764 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1765 * It sets errno to ERANGE when the target datatype is too small.
1766 *
1767 * @param str the string to convert
1768 * @param output a pointer to the integer variable where the result shall be stored
1769 * @param base 2, 8, 10, or 16
1770 * @param groupsep (@c const @c char*) each character in this string is treated as group separator and ignored during conversion
1771 * @retval zero success
1772 * @retval non-zero conversion was not possible
1773 */
1774 #define cx_strtouz_lc(str, output, base, groupsep) cx_strtouz_lc_(cx_strcast(str), output, base, groupsep)
1775
1776 /**
1777 * Converts a string to a number.
1778 *
1779 * The function returns non-zero when conversion is not possible.
1780 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1781 * It sets errno to ERANGE when the target datatype is too small.
1782 *
1783 * The comma character is treated as group separator and ignored during parsing. 1750 * The comma character is treated as group separator and ignored during parsing.
1784 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1751 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
1785 * 1752 *
1786 * @param str the string to convert 1753 * @param str the string to convert
1787 * @param output a pointer to the integer variable where the result shall be stored 1754 * @param output a pointer to the integer variable where the result shall be stored
1788 * @param base 2, 8, 10, or 16 1755 * @param base 2, 8, 10, or 16
1789 * @retval zero success 1756 * @retval zero success
1797 * The function returns non-zero when conversion is not possible. 1764 * The function returns non-zero when conversion is not possible.
1798 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1765 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1799 * It sets errno to ERANGE when the target datatype is too small. 1766 * It sets errno to ERANGE when the target datatype is too small.
1800 * 1767 *
1801 * The comma character is treated as group separator and ignored during parsing. 1768 * The comma character is treated as group separator and ignored during parsing.
1802 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1769 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
1803 * 1770 *
1804 * @param str the string to convert 1771 * @param str the string to convert
1805 * @param output a pointer to the integer variable where the result shall be stored 1772 * @param output a pointer to the integer variable where the result shall be stored
1806 * @param base 2, 8, 10, or 16 1773 * @param base 2, 8, 10, or 16
1807 * @retval zero success 1774 * @retval zero success
1815 * The function returns non-zero when conversion is not possible. 1782 * The function returns non-zero when conversion is not possible.
1816 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1783 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1817 * It sets errno to ERANGE when the target datatype is too small. 1784 * It sets errno to ERANGE when the target datatype is too small.
1818 * 1785 *
1819 * The comma character is treated as group separator and ignored during parsing. 1786 * The comma character is treated as group separator and ignored during parsing.
1820 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1787 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
1821 * 1788 *
1822 * @param str the string to convert 1789 * @param str the string to convert
1823 * @param output a pointer to the integer variable where the result shall be stored 1790 * @param output a pointer to the integer variable where the result shall be stored
1824 * @param base 2, 8, 10, or 16 1791 * @param base 2, 8, 10, or 16
1825 * @retval zero success 1792 * @retval zero success
1833 * The function returns non-zero when conversion is not possible. 1800 * The function returns non-zero when conversion is not possible.
1834 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1801 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1835 * It sets errno to ERANGE when the target datatype is too small. 1802 * It sets errno to ERANGE when the target datatype is too small.
1836 * 1803 *
1837 * The comma character is treated as group separator and ignored during parsing. 1804 * The comma character is treated as group separator and ignored during parsing.
1838 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1805 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
1839 * 1806 *
1840 * @param str the string to convert 1807 * @param str the string to convert
1841 * @param output a pointer to the integer variable where the result shall be stored 1808 * @param output a pointer to the integer variable where the result shall be stored
1842 * @param base 2, 8, 10, or 16 1809 * @param base 2, 8, 10, or 16
1843 * @retval zero success 1810 * @retval zero success
1851 * The function returns non-zero when conversion is not possible. 1818 * The function returns non-zero when conversion is not possible.
1852 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1819 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1853 * It sets errno to ERANGE when the target datatype is too small. 1820 * It sets errno to ERANGE when the target datatype is too small.
1854 * 1821 *
1855 * The comma character is treated as group separator and ignored during parsing. 1822 * The comma character is treated as group separator and ignored during parsing.
1856 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1823 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
1857 * 1824 *
1858 * @param str the string to convert 1825 * @param str the string to convert
1859 * @param output a pointer to the integer variable where the result shall be stored 1826 * @param output a pointer to the integer variable where the result shall be stored
1860 * @param base 2, 8, 10, or 16 1827 * @param base 2, 8, 10, or 16
1861 * @retval zero success 1828 * @retval zero success
1869 * The function returns non-zero when conversion is not possible. 1836 * The function returns non-zero when conversion is not possible.
1870 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1837 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1871 * It sets errno to ERANGE when the target datatype is too small. 1838 * It sets errno to ERANGE when the target datatype is too small.
1872 * 1839 *
1873 * The comma character is treated as group separator and ignored during parsing. 1840 * The comma character is treated as group separator and ignored during parsing.
1874 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1841 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
1875 * 1842 *
1876 * @param str the string to convert 1843 * @param str the string to convert
1877 * @param output a pointer to the integer variable where the result shall be stored 1844 * @param output a pointer to the integer variable where the result shall be stored
1878 * @param base 2, 8, 10, or 16 1845 * @param base 2, 8, 10, or 16
1879 * @retval zero success 1846 * @retval zero success
1887 * The function returns non-zero when conversion is not possible. 1854 * The function returns non-zero when conversion is not possible.
1888 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1855 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1889 * It sets errno to ERANGE when the target datatype is too small. 1856 * It sets errno to ERANGE when the target datatype is too small.
1890 * 1857 *
1891 * The comma character is treated as group separator and ignored during parsing. 1858 * The comma character is treated as group separator and ignored during parsing.
1892 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1859 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
1893 * 1860 *
1894 * @param str the string to convert 1861 * @param str the string to convert
1895 * @param output a pointer to the integer variable where the result shall be stored 1862 * @param output a pointer to the integer variable where the result shall be stored
1896 * @param base 2, 8, 10, or 16 1863 * @param base 2, 8, 10, or 16
1897 * @retval zero success 1864 * @retval zero success
1905 * The function returns non-zero when conversion is not possible. 1872 * The function returns non-zero when conversion is not possible.
1906 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1873 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1907 * It sets errno to ERANGE when the target datatype is too small. 1874 * It sets errno to ERANGE when the target datatype is too small.
1908 * 1875 *
1909 * The comma character is treated as group separator and ignored during parsing. 1876 * The comma character is treated as group separator and ignored during parsing.
1910 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1877 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
1911 * 1878 *
1912 * @param str the string to convert 1879 * @param str the string to convert
1913 * @param output a pointer to the integer variable where the result shall be stored 1880 * @param output a pointer to the integer variable where the result shall be stored
1914 * @param base 2, 8, 10, or 16 1881 * @param base 2, 8, 10, or 16
1915 * @retval zero success 1882 * @retval zero success
1923 * The function returns non-zero when conversion is not possible. 1890 * The function returns non-zero when conversion is not possible.
1924 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1891 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1925 * It sets errno to ERANGE when the target datatype is too small. 1892 * It sets errno to ERANGE when the target datatype is too small.
1926 * 1893 *
1927 * The comma character is treated as group separator and ignored during parsing. 1894 * The comma character is treated as group separator and ignored during parsing.
1928 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1895 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
1929 * 1896 *
1930 * @param str the string to convert 1897 * @param str the string to convert
1931 * @param output a pointer to the integer variable where the result shall be stored 1898 * @param output a pointer to the integer variable where the result shall be stored
1932 * @param base 2, 8, 10, or 16 1899 * @param base 2, 8, 10, or 16
1933 * @retval zero success 1900 * @retval zero success
1941 * The function returns non-zero when conversion is not possible. 1908 * The function returns non-zero when conversion is not possible.
1942 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1909 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1943 * It sets errno to ERANGE when the target datatype is too small. 1910 * It sets errno to ERANGE when the target datatype is too small.
1944 * 1911 *
1945 * The comma character is treated as group separator and ignored during parsing. 1912 * The comma character is treated as group separator and ignored during parsing.
1946 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1913 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
1947 * 1914 *
1948 * @param str the string to convert 1915 * @param str the string to convert
1949 * @param output a pointer to the integer variable where the result shall be stored 1916 * @param output a pointer to the integer variable where the result shall be stored
1950 * @param base 2, 8, 10, or 16 1917 * @param base 2, 8, 10, or 16
1951 * @retval zero success 1918 * @retval zero success
1959 * The function returns non-zero when conversion is not possible. 1926 * The function returns non-zero when conversion is not possible.
1960 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1927 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1961 * It sets errno to ERANGE when the target datatype is too small. 1928 * It sets errno to ERANGE when the target datatype is too small.
1962 * 1929 *
1963 * The comma character is treated as group separator and ignored during parsing. 1930 * The comma character is treated as group separator and ignored during parsing.
1964 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1931 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
1965 * 1932 *
1966 * @param str the string to convert 1933 * @param str the string to convert
1967 * @param output a pointer to the integer variable where the result shall be stored 1934 * @param output a pointer to the integer variable where the result shall be stored
1968 * @param base 2, 8, 10, or 16 1935 * @param base 2, 8, 10, or 16
1969 * @retval zero success 1936 * @retval zero success
1977 * The function returns non-zero when conversion is not possible. 1944 * The function returns non-zero when conversion is not possible.
1978 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1945 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1979 * It sets errno to ERANGE when the target datatype is too small. 1946 * It sets errno to ERANGE when the target datatype is too small.
1980 * 1947 *
1981 * The comma character is treated as group separator and ignored during parsing. 1948 * The comma character is treated as group separator and ignored during parsing.
1982 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1949 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
1983 * 1950 *
1984 * @param str the string to convert 1951 * @param str the string to convert
1985 * @param output a pointer to the integer variable where the result shall be stored 1952 * @param output a pointer to the integer variable where the result shall be stored
1986 * @param base 2, 8, 10, or 16 1953 * @param base 2, 8, 10, or 16
1987 * @retval zero success 1954 * @retval zero success
1995 * The function returns non-zero when conversion is not possible. 1962 * The function returns non-zero when conversion is not possible.
1996 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1963 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
1997 * It sets errno to ERANGE when the target datatype is too small. 1964 * It sets errno to ERANGE when the target datatype is too small.
1998 * 1965 *
1999 * The comma character is treated as group separator and ignored during parsing. 1966 * The comma character is treated as group separator and ignored during parsing.
2000 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1967 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
2001 * 1968 *
2002 * @param str the string to convert 1969 * @param str the string to convert
2003 * @param output a pointer to the integer variable where the result shall be stored 1970 * @param output a pointer to the integer variable where the result shall be stored
2004 * @param base 2, 8, 10, or 16 1971 * @param base 2, 8, 10, or 16
2005 * @retval zero success 1972 * @retval zero success
2013 * The function returns non-zero when conversion is not possible. 1980 * The function returns non-zero when conversion is not possible.
2014 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1981 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
2015 * It sets errno to ERANGE when the target datatype is too small. 1982 * It sets errno to ERANGE when the target datatype is too small.
2016 * 1983 *
2017 * The comma character is treated as group separator and ignored during parsing. 1984 * The comma character is treated as group separator and ignored during parsing.
2018 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 1985 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
2019 * 1986 *
2020 * @param str the string to convert 1987 * @param str the string to convert
2021 * @param output a pointer to the integer variable where the result shall be stored 1988 * @param output a pointer to the integer variable where the result shall be stored
2022 * @param base 2, 8, 10, or 16 1989 * @param base 2, 8, 10, or 16
2023 * @retval zero success 1990 * @retval zero success
2031 * The function returns non-zero when conversion is not possible. 1998 * The function returns non-zero when conversion is not possible.
2032 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 1999 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
2033 * It sets errno to ERANGE when the target datatype is too small. 2000 * It sets errno to ERANGE when the target datatype is too small.
2034 * 2001 *
2035 * The comma character is treated as group separator and ignored during parsing. 2002 * The comma character is treated as group separator and ignored during parsing.
2036 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 2003 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
2037 * 2004 *
2038 * @param str the string to convert 2005 * @param str the string to convert
2039 * @param output a pointer to the integer variable where the result shall be stored 2006 * @param output a pointer to the integer variable where the result shall be stored
2040 * @param base 2, 8, 10, or 16 2007 * @param base 2, 8, 10, or 16
2041 * @retval zero success 2008 * @retval zero success
2049 * The function returns non-zero when conversion is not possible. 2016 * The function returns non-zero when conversion is not possible.
2050 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 2017 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
2051 * It sets errno to ERANGE when the target datatype is too small. 2018 * It sets errno to ERANGE when the target datatype is too small.
2052 * 2019 *
2053 * The comma character is treated as group separator and ignored during parsing. 2020 * The comma character is treated as group separator and ignored during parsing.
2054 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 2021 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
2055 * 2022 *
2056 * @param str the string to convert 2023 * @param str the string to convert
2057 * @param output a pointer to the integer variable where the result shall be stored 2024 * @param output a pointer to the integer variable where the result shall be stored
2058 * @param base 2, 8, 10, or 16 2025 * @param base 2, 8, 10, or 16
2059 * @retval zero success 2026 * @retval zero success
2067 * The function returns non-zero when conversion is not possible. 2034 * The function returns non-zero when conversion is not possible.
2068 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base. 2035 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
2069 * It sets errno to ERANGE when the target datatype is too small. 2036 * It sets errno to ERANGE when the target datatype is too small.
2070 * 2037 *
2071 * The comma character is treated as group separator and ignored during parsing. 2038 * The comma character is treated as group separator and ignored during parsing.
2072 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()). 2039 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
2073 * 2040 *
2074 * @param str the string to convert 2041 * @param str the string to convert
2075 * @param output a pointer to the integer variable where the result shall be stored 2042 * @param output a pointer to the integer variable where the result shall be stored
2076 * @param base 2, 8, 10, or 16 2043 * @param base 2, 8, 10, or 16
2077 * @retval zero success 2044 * @retval zero success
2078 * @retval non-zero conversion was not possible 2045 * @retval non-zero conversion was not possible
2079 */ 2046 */
2080 #define cx_strtou64(str, output, base) cx_strtou64_lc_(cx_strcast(str), output, base, ",") 2047 #define cx_strtou64(str, output, base) cx_strtou64_lc_(cx_strcast(str), output, base, ",")
2081
2082 /**
2083 * Converts a string to a number.
2084 *
2085 * The function returns non-zero when conversion is not possible.
2086 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
2087 * It sets errno to ERANGE when the target datatype is too small.
2088 *
2089 * The comma character is treated as group separator and ignored during parsing.
2090 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtouz_lc()).
2091 *
2092 * @param str the string to convert
2093 * @param output a pointer to the integer variable where the result shall be stored
2094 * @param base 2, 8, 10, or 16
2095 * @retval zero success
2096 * @retval non-zero conversion was not possible
2097 */
2098 #define cx_strtouz(str, output, base) cx_strtouz_lc_(cx_strcast(str), output, base, ",")
2099 2048
2100 /** 2049 /**
2101 * Converts a string to a single precision floating point number. 2050 * Converts a string to a single precision floating point number.
2102 * 2051 *
2103 * The function returns non-zero when conversion is not possible. 2052 * The function returns non-zero when conversion is not possible.

mercurial