Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cstdlib not able to resolve using ::wcstombs

Tags:

c++

fedora

I upgraded my system to fedora 33 after which I observed that stdlib.h was not able to resolve some data structures:

In file included from /usr/include/c++/10/cstdlib:75,
                 from /usr/include/c++/10/ext/string_conversions.h:41,
                 from /usr/include/c++/10/bits/basic_string.h:6545,
                 from /usr/include/c++/10/string:55,
                 from /home/ideepika/ceph5/ceph/src/rocksdb/include/rocksdb/cache.h:27,
                 from /home/ideepika/ceph5/ceph/src/rocksdb/cache/clock_cache.h:12,
                 from /home/ideepika/ceph5/ceph/src/rocksdb/cache/clock_cache.cc:10:
/usr/include/stdlib.h:935:5: error: expected initializer before ‘__attr_access’
  935 |     __attr_access ((__read_only__, 2));
      |     ^~~~~~~~~~~~~
/usr/include/stdlib.h:940:3: error: expected initializer before ‘__attr_access’
  940 |   __attr_access ((__write_only__, 1, 3)) __attr_access ((__read_only__, 2));
      |   ^~~~~~~~~~~~~
/usr/include/stdlib.h:994:30: error: expected initializer before ‘__attr_access’
  994 |      __THROW __nonnull ((2)) __attr_access ((__write_only__, 2, 3));
      |                              ^~~~~~~~~~~~~
In file included from /usr/include/c++/10/ext/string_conversions.h:41,
                 from /usr/include/c++/10/bits/basic_string.h:6545,
                 from /usr/include/c++/10/string:55,
                 from /home/ideepika/ceph5/ceph/src/rocksdb/include/rocksdb/cache.h:27,
                 from /home/ideepika/ceph5/ceph/src/rocksdb/cache/clock_cache.h:12,
                 from /home/ideepika/ceph5/ceph/src/rocksdb/cache/clock_cache.cc:10:
/usr/include/c++/10/cstdlib:154:11: error: ‘mbstowcs’ has not been declared in ‘::’
  154 |   using ::mbstowcs;
      |           ^~~~~~~~
/usr/include/c++/10/cstdlib:171:11: error: ‘wcstombs’ has not been declared in ‘::’
  171 |   using ::wcstombs;
      |           ^~~~~~~~

the source of error is merely because of #include and hence the source code from rocksdb doesn't looks suspicious.

Investigating... will update with relevant details, let me know if more details need to added

like image 571
Deepika Upadhyay Avatar asked Aug 24 '26 02:08

Deepika Upadhyay


1 Answers

turns out there is recent patch added to cstdlib: https://www.cygwin.com/bugzilla/attachment.cgi?id=12133

that might have been uncaught, I did not investigate the related files right now, but the adding the minimal changes patchset if someone else bumps to this issue...

diff --git a/stdlib.h b/stdlib.h
index f255e4a..d88ef89 100644
--- a/stdlib.h
+++ b/stdlib.h
@@ -931,10 +931,11 @@ extern int wctomb (char *__s, wchar_t __wchar) __THROW;
 
 /* Convert a multibyte string to a wide char string.  */
 extern size_t mbstowcs (wchar_t *__restrict  __pwcs,
-                       const char *__restrict __s, size_t __n) __THROW
+                       const char *__restrict __s, size_t __n) __THROW;
 /* Convert a wide char string to multibyte string.  */
 extern size_t wcstombs (char *__restrict __s,
-                       const wchar_t *__restrict __pwcs, size_t __n) __THROW
+                       const wchar_t *__restrict __pwcs, size_t __n)
+     __THROW;
 
 #ifdef __USE_MISC
 /* Determine whether the string value of RESPONSE matches the affirmation
@@ -988,7 +989,7 @@ extern char *ptsname (int __fd) __THROW __wur;
    terminal associated with the master FD is open on in BUF.
    Return 0 on success, otherwise an error number.  */
 extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
-     __THROW __nonnull ((2))
+     __THROW __nonnull ((2));
like image 141
Deepika Upadhyay Avatar answered Aug 26 '26 17:08

Deepika Upadhyay