diff options
| author | Lexi Winter <ivy@FreeBSD.org> | 2025-12-01 03:19:41 +0000 |
|---|---|---|
| committer | Lexi Winter <ivy@FreeBSD.org> | 2025-12-01 03:19:41 +0000 |
| commit | 2e80774d0b20d167bc0a9e2b63dafbfb171c0d22 (patch) | |
| tree | 25f0138e1af8902b92dacc8cce09b267447c17db /databases/nanodbc/files/patch-nanodbc_nanodbc.cpp | |
| parent | f85f2b2d6e5b7ed869376eb4b180c3a74a5c5da9 (diff) | |
| parent | 1a30da80670973368b399f2b01fe9c04b91a1273 (diff) | |
Merge remote-tracking branch 'freebsd/main' into lf/mainlf/main
Diffstat (limited to 'databases/nanodbc/files/patch-nanodbc_nanodbc.cpp')
| -rw-r--r-- | databases/nanodbc/files/patch-nanodbc_nanodbc.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/databases/nanodbc/files/patch-nanodbc_nanodbc.cpp b/databases/nanodbc/files/patch-nanodbc_nanodbc.cpp new file mode 100644 index 000000000000..f0489859293b --- /dev/null +++ b/databases/nanodbc/files/patch-nanodbc_nanodbc.cpp @@ -0,0 +1,47 @@ +- Fix compilation with unsigned char SQLCHAR type + +--- nanodbc/nanodbc.cpp.orig 2023-01-13 22:42:27 UTC ++++ nanodbc/nanodbc.cpp +@@ -257,10 +257,20 @@ constexpr std::size_t size(const T (&array)[N]) noexc + } + #endif + ++// Helper function to compute string length for SQLCHAR types ++template <typename T> ++inline std::size_t sqlchar_length(const T* str) noexcept ++{ ++ const T* s = str; ++ while (*s) ++s; ++ return s - str; ++} ++ + template <std::size_t N> + inline std::size_t size(NANODBC_SQLCHAR const (&array)[N]) noexcept + { +- auto const n = std::char_traits<NANODBC_SQLCHAR>::length(array); ++ // Use custom length function instead of char_traits which doesn't support unsigned char ++ auto const n = sqlchar_length(array); + NANODBC_ASSERT(n < N); + return n < N ? n : N - 1; + } +@@ -3563,9 +3573,9 @@ std::list<datasource> list_datasources() + "incompatible SQLCHAR and string::value_type"); + + datasource dsn; +- dsn.name = string(&name[0], &name[std::char_traits<NANODBC_SQLCHAR>::length(name)]); ++ dsn.name = string(&name[0], &name[sqlchar_length(name)]); + dsn.driver = +- string(&driver[0], &driver[std::char_traits<NANODBC_SQLCHAR>::length(driver)]); ++ string(&driver[0], &driver[sqlchar_length(driver)]); + + dsns.push_back(std::move(dsn)); + direction = SQL_FETCH_NEXT; +@@ -3616,7 +3626,7 @@ std::list<driver> list_drivers() + "incompatible SQLCHAR and string::value_type"); + + driver drv; +- drv.name = string(&descr[0], &descr[std::char_traits<NANODBC_SQLCHAR>::length(descr)]); ++ drv.name = string(&descr[0], &descr[sqlchar_length(descr)]); + + drvs.push_back(std::move(drv)); + direction = SQL_FETCH_NEXT; |
