mirror of
https://github.com/apache/nuttx.git
synced 2025-01-13 08:38:38 +08:00
db31e56957
Since there are some patches that need to be loaded manually, the original method is rather confusing. Now these patches that need to be loaded manually are classified into various cxx library folders, and each dynamically downloaded cxx library is moved down one directory to make the directory structure clearer. Signed-off-by: wangmingrong1 <wangmingrong1@xiaomi.com>
298 lines
8.3 KiB
Diff
298 lines
8.3 KiB
Diff
From b9028c8bc1a4cd00feb5328521bdde332fefeda3 Mon Sep 17 00:00:00 2001
|
|
From: zhuyanlin <zhuyanlin1@xiaomi.com>
|
|
Date: Mon, 27 Sep 2021 21:47:41 +0800
|
|
Subject: [PATCH] uclibxx: use overload constructor of filebuf & ostream
|
|
|
|
Instead of set valiable in Init, use overload constructor in
|
|
filebuf & stream class
|
|
|
|
---
|
|
include/fstream | 15 +++++++--
|
|
include/ios | 21 +++---------
|
|
include/istream | 4 +++
|
|
include/ostream | 8 +++++
|
|
include/streambuf | 6 ++--
|
|
src/ios.cpp | 84 ++++++++---------------------------------------
|
|
6 files changed, 44 insertions(+), 94 deletions(-)
|
|
|
|
diff --git a/uClibc++/include/fstream uClibc++/include/fstream
|
|
index fddfa35..99a016e 100644
|
|
--- a/uClibc++/include/fstream
|
|
+++ uClibc++/include/fstream
|
|
@@ -53,9 +53,6 @@ namespace std{
|
|
template <class charT, class traits> class _UCXXEXPORT basic_filebuf
|
|
: public basic_streambuf<charT,traits>
|
|
{
|
|
-#ifdef __UCLIBCXX_SUPPORT_CDIR__
|
|
- friend ios_base::Init::Init(); //Needed for cout/cin stuff
|
|
-#endif
|
|
public:
|
|
// Types (inherited from basic_streambuf:
|
|
typedef typename basic_streambuf<charT, traits>::char_type char_type;
|
|
@@ -79,6 +76,18 @@ namespace std{
|
|
gbuffer + __UCLIBCXX_IOSTREAM_BUFSIZE__);
|
|
}
|
|
|
|
+ _UCXXEXPORT basic_filebuf(FILE *p, ios_base::openmode opdfor)
|
|
+ : basic_streambuf<charT, traits>(opdfor), fp(p), pbuffer(0),
|
|
+ gbuffer(0), append(false)
|
|
+ {
|
|
+ pbuffer = new char_type[__UCLIBCXX_IOSTREAM_BUFSIZE__];
|
|
+ gbuffer = new char_type[__UCLIBCXX_IOSTREAM_BUFSIZE__];
|
|
+
|
|
+ this->setp(pbuffer, pbuffer + __UCLIBCXX_IOSTREAM_BUFSIZE__);
|
|
+ //Position get buffer so that there is no data available
|
|
+ this->setg(gbuffer, gbuffer + __UCLIBCXX_IOSTREAM_BUFSIZE__,
|
|
+ gbuffer + __UCLIBCXX_IOSTREAM_BUFSIZE__);
|
|
+ }
|
|
|
|
_UCXXEXPORT virtual ~basic_filebuf(){
|
|
sync();
|
|
diff --git a/uClibc++/include/ios uClibc++/include/ios
|
|
index ac6566a..6d2dd68 100644
|
|
--- a/uClibc++/include/ios
|
|
+++ uClibc++/include/ios
|
|
@@ -45,15 +45,6 @@ namespace std{
|
|
}
|
|
};
|
|
#endif
|
|
-#ifdef __UCLIBCXX_SUPPORT_CDIR__
|
|
- class _UCXXLOCAL Init{
|
|
- public:
|
|
- _UCXXEXPORT Init();
|
|
- _UCXXEXPORT ~Init();
|
|
- private:
|
|
- static int init_cnt;
|
|
- };
|
|
-#endif
|
|
|
|
public:
|
|
|
|
@@ -154,11 +145,7 @@ namespace std{
|
|
protected:
|
|
_UCXXEXPORT ios_base() : mLocale(), mformat(dec | skipws ), mstate(goodbit),
|
|
mmode(), mdir(), mprecision(6), mwidth(0)
|
|
-#ifdef __UCLIBCXX_SUPPORT_CDIR__
|
|
- ,mInit()
|
|
-#endif
|
|
{
|
|
-
|
|
}
|
|
locale mLocale;
|
|
fmtflags mformat;
|
|
@@ -167,9 +154,6 @@ namespace std{
|
|
seekdir mdir;
|
|
streamsize mprecision;
|
|
streamsize mwidth;
|
|
-#ifdef __UCLIBCXX_SUPPORT_CDIR__
|
|
- Init mInit;
|
|
-#endif
|
|
};
|
|
|
|
|
|
@@ -346,7 +330,10 @@ namespace std{
|
|
: fill_char(' '), mtied(0), mstreambuf(0), throw_mask(0) {
|
|
init(sb);
|
|
}
|
|
-
|
|
+ explicit _UCXXEXPORT basic_ios(basic_streambuf<charT,traits>* sb, basic_ostream<charT,traits>* tied)
|
|
+ : fill_char(' '), mtied(tied), mstreambuf(0), throw_mask(0) {
|
|
+ init(sb);
|
|
+ }
|
|
basic_ios() : mtied(0), mstreambuf(0){ }
|
|
|
|
virtual _UCXXEXPORT ~basic_ios(){
|
|
diff --git a/uClibc++/include/istream uClibc++/include/istream
|
|
index 2d58abd..8fa9ad4 100644
|
|
--- a/uClibc++/include/istream
|
|
+++ uClibc++/include/istream
|
|
@@ -55,6 +55,10 @@ namespace std{
|
|
{
|
|
basic_ios<charT, traits>::init(sb);
|
|
}
|
|
+ explicit basic_istream(basic_streambuf<charT,traits>* sb, basic_ostream<charT,traits>* tied)
|
|
+ : basic_ios<charT, traits>(sb, tied), count_last_ufmt_input(0)
|
|
+ {
|
|
+ }
|
|
virtual ~basic_istream() { }
|
|
|
|
class sentry;
|
|
diff --git a/uClibc++/include/ostream uClibc++/include/ostream
|
|
index 3072589..086a297 100644
|
|
--- a/uClibc++/include/ostream
|
|
+++ uClibc++/include/ostream
|
|
@@ -58,6 +58,14 @@ namespace std {
|
|
{
|
|
basic_ios<charT,traits>::init(sb);
|
|
}
|
|
+
|
|
+ _UCXXEXPORT basic_ostream(basic_streambuf<charT,traits>* sb, ios_base::fmtflags fmtfl)
|
|
+ : basic_ios<charT, traits>(sb)
|
|
+ {
|
|
+ basic_ios<charT,traits>::init(sb);
|
|
+ ios_base::setf(fmtfl);
|
|
+ }
|
|
+
|
|
virtual _UCXXEXPORT ~basic_ostream();
|
|
|
|
class sentry;
|
|
diff --git a/uClibc++/include/streambuf uClibc++/include/streambuf
|
|
index 0daa388..5327296 100644
|
|
--- a/uClibc++/include/streambuf
|
|
+++ uClibc++/include/streambuf
|
|
@@ -33,9 +33,6 @@ namespace std{
|
|
|
|
template <class charT, class traits> class _UCXXEXPORT basic_streambuf{
|
|
public:
|
|
-#ifdef __UCLIBCXX_SUPPORT_CDIR__
|
|
- friend ios_base::Init::Init();
|
|
-#endif
|
|
// Types:
|
|
typedef charT char_type;
|
|
typedef typename traits::int_type int_type;
|
|
@@ -116,6 +113,9 @@ namespace std{
|
|
mgbeg(0), mgnext(0), mgend(0), mpbeg(0), mpnext(0), mpend(0),
|
|
openedFor(0)
|
|
{ }
|
|
+ basic_streambuf(ios_base::openmode opdfor)
|
|
+ : openedFor(opdfor)
|
|
+ { }
|
|
basic_streambuf<char, char_traits<char> > & operator=(const basic_streambuf<char, char_traits<char> > &){
|
|
return *this;
|
|
}
|
|
diff --git a/uClibc++/src/ios.cpp uClibc++/src/ios.cpp
|
|
index 3b85d5b..e6a390f 100644
|
|
--- a/uClibc++/src/ios.cpp
|
|
+++ uClibc++/src/ios.cpp
|
|
@@ -29,32 +29,31 @@ namespace std{
|
|
|
|
|
|
#ifdef __UCLIBCXX_SUPPORT_CDIR__
|
|
- _UCXXLOCAL int ios_base::Init::init_cnt = 0; //Needed to ensure the static value is created
|
|
|
|
//Create buffers first
|
|
#ifdef __UCLIBCXX_SUPPORT_COUT__
|
|
- _UCXXEXPORT filebuf _cout_filebuf;
|
|
+ _UCXXEXPORT filebuf _cout_filebuf(stdout, ios_base::out);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_CIN__
|
|
- _UCXXEXPORT filebuf _cin_filebuf;
|
|
+ _UCXXEXPORT filebuf _cin_filebuf(stdin, ios_base::in);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_CERR__
|
|
- _UCXXEXPORT filebuf _cerr_filebuf;
|
|
+ _UCXXEXPORT filebuf _cerr_filebuf(stderr, ios_base::out);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_CLOG__
|
|
- _UCXXEXPORT filebuf _clog_filebuf;
|
|
+ _UCXXEXPORT filebuf _clog_filebuf(stderr, ios_base::out);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_WCOUT__
|
|
- _UCXXEXPORT wfilebuf _wcout_filebuf;
|
|
+ _UCXXEXPORT wfilebuf _wcout_filebuf(stdout, ios_base::out);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_WCIN__
|
|
- _UCXXEXPORT wfilebuf _wcin_filebuf;
|
|
+ _UCXXEXPORT wfilebuf _wcin_filebuf(stdin, ios_base::in);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_WCERR__
|
|
- _UCXXEXPORT wfilebuf _wcerr_filebuf;
|
|
+ _UCXXEXPORT wfilebuf _wcerr_filebuf(stderr, ios_base::out);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_WCLOG__
|
|
- _UCXXEXPORT wfilebuf _wclog_filebuf;
|
|
+ _UCXXEXPORT wfilebuf _wclog_filebuf(stderr, ios_base::out);
|
|
#endif
|
|
|
|
//Then create streams
|
|
@@ -62,10 +61,10 @@ namespace std{
|
|
_UCXXEXPORT ostream cout(&_cout_filebuf);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_CIN__
|
|
- _UCXXEXPORT istream cin(&_cin_filebuf);
|
|
+ _UCXXEXPORT istream cin(&_cin_filebuf, &cout);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_CERR__
|
|
- _UCXXEXPORT ostream cerr(&_cerr_filebuf);
|
|
+ _UCXXEXPORT ostream cerr(&_cerr_filebuf, ios_base::unitbuf);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_CLOG__
|
|
_UCXXEXPORT ostream clog(&_clog_filebuf);
|
|
@@ -74,72 +73,15 @@ namespace std{
|
|
_UCXXEXPORT wostream wcout(&_wcout_filebuf);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_WCIN__
|
|
- _UCXXEXPORT wistream wcin(&_wcin_filebuf);
|
|
+ _UCXXEXPORT wistream wcin(&_wcin_filebuf, &wcout);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_WCERR__
|
|
- _UCXXEXPORT wostream wcerr(&_wcerr_filebuf);
|
|
+ _UCXXEXPORT wostream wcerr(&_wcerr_filebuf, ios_base::unitbuf);
|
|
#endif
|
|
#ifdef __UCLIBCXX_SUPPORT_WCLOG__
|
|
_UCXXEXPORT wostream wclog(&_wclog_filebuf);
|
|
#endif
|
|
|
|
-
|
|
- _UCXXEXPORT ios_base::Init::Init(){
|
|
- if(init_cnt == 0){ //Need to construct cout et al
|
|
-#ifdef __UCLIBCXX_SUPPORT_COUT__
|
|
- _cout_filebuf.fp = stdout;
|
|
- _cout_filebuf.openedFor = ios_base::out;
|
|
-#endif
|
|
-#ifdef __UCLIBCXX_SUPPORT_CERR__
|
|
- _cerr_filebuf.fp = stderr;
|
|
- _cerr_filebuf.openedFor = ios_base::out;
|
|
- cerr.mformat |= ios_base::unitbuf;
|
|
-#endif
|
|
-#ifdef __UCLIBCXX_SUPPORT_CLOG__
|
|
- _clog_filebuf.fp = stderr;
|
|
- _clog_filebuf.openedFor = ios_base::out;
|
|
-#endif
|
|
-#ifdef __UCLIBCXX_SUPPORT_CIN__
|
|
- _cin_filebuf.fp = stdin;
|
|
- _cin_filebuf.openedFor = ios_base::in;
|
|
-
|
|
-#ifdef __UCLIBCXX_SUPPORT_COUT__
|
|
- cin.tie(&cout);
|
|
-#endif
|
|
-
|
|
-#endif
|
|
-#ifdef __UCLIBCXX_SUPPORT_WCOUT__
|
|
- _wcout_filebuf.fp = stdout;
|
|
- _wcout_filebuf.openedFor = ios_base::out;
|
|
-#endif
|
|
-#ifdef __UCLIBCXX_SUPPORT_WCERR__
|
|
- _wcerr_filebuf.fp = stderr;
|
|
- _wcerr_filebuf.openedFor = ios_base::out;
|
|
- wcerr.mformat |= ios_base::unitbuf;
|
|
-#endif
|
|
-#ifdef __UCLIBCXX_SUPPORT_WCLOG__
|
|
- _wclog_filebuf.fp = stderr;
|
|
- _wclog_filebuf.openedFor = ios_base::out;
|
|
-#endif
|
|
-#ifdef __UCLIBCXX_SUPPORT_WCIN__
|
|
- _wcin_filebuf.fp = stdin;
|
|
- _wcin_filebuf.openedFor = ios_base::in;
|
|
-
|
|
-#ifdef __UCLIBCXX_SUPPORT_WCOUT__
|
|
- wcin.tie(&wcout);
|
|
-#endif
|
|
-
|
|
-#endif
|
|
- }
|
|
- init_cnt++;
|
|
- }
|
|
-
|
|
- _UCXXEXPORT ios_base::Init::~Init(){
|
|
- --init_cnt;
|
|
- if(init_cnt==0){
|
|
-
|
|
- }
|
|
- }
|
|
#endif
|
|
|
|
|
|
--
|
|
2.25.1
|
|
|