std::locale设置不当导致异常std::bad_cast

本文探讨了C++中std::locale的使用方法,包括如何查看和修改区域设置,以及不当设置可能导致的std::bad_cast异常。通过示例代码展示了locale在字符类型处理和输出方式上的作用。

std::locale 区域一般和变量类型,输出方式有关

查看和修改locale可以通过如下方式:
 

std::locale loc(std::locale(), new std::ctype<char>);
std::locale::global( std::locale("") );

std::cout << "The default locale is " << std::locale().name() << '\n'
          << "The user's locale is " << std::locale("").name() << '\n'
          << "A nameless locale is " << loc.name() << '\n';

有的设置不当 会导致程序跑出异常:std::bad_cast

请仔细阅读和分析下面函数,进行优化后,采用C/C++11标准,完整推导并重构可编译的全部代码 特别注意: 1.保持所有原始功能不变 2.提高执行效率,降低计算复杂度 3.已经给定的结构体名字和元素不要更改,详细的中文注释 4.自动添加中文注释说明功能逻辑 5.不使用 auto,使用显式 for 循环 6.结构体采用32位定义 7.不要使用小函数,保持原始的函数定义 __int64 __fastcall hddp::Driver::parse_file(hddp::Driver *this, const std::string *a2) { std::ostream *v3; // rbx __int64 v4; // rax _BYTE *v5; // rbp char v6; // al std::ostream *v7; // rax __int64 v8; // r15 char *v9; // rbp char *v10; // rax __int64 v11; // rax _BYTE *v12; // r12 char v13; // al std::ostream *v14; // rax __int64 v15; // r12 __int64 v16; // r12 std::ostream *v17; // r12 __int64 v18; // rax _BYTE *v19; // r14 char v20; // al std::ostream *v21; // rax char *v22; // r13 unsigned int v23; // r12d __int64 v24; // rdi __int64 v26; // rax _BYTE *v27; // r12 char v28; // al std::ostream *v29; // rax __int64 v30; // rax _BYTE *v31; // r12 char v32; // al std::ostream *v33; // rax __int64 v34; // rax _BYTE *v35; // r12 char v36; // al std::ostream *v37; // rax __int64 v38; // r12 std::ostream *v39; // r12 _BYTE *v40; // r14 char v41; // al __int64 v42; // rax _BYTE *v43; // r12 char v44; // al std::ostream *v45; // rax unsigned __int16 v46; // r12 std::ostream *v47; // r15 __int64 v48; // rax _BYTE *v49; // r12 char v50; // al std::ostream *v51; // rax __int64 v52; // rsi size_t n; // rdx __int64 v54; // rax _BYTE *v55; // rbp char v56; // al std::ostream *v57; // rax __int64 v58; // rbp std::ostream *v59; // rbp _BYTE *v60; // r12 char v61; // al std::ostream *v62; // rax char *v63; // rdi char *v64; // rdi __int64 v65; // rax _BYTE *v66; // r12 char v67; // al std::ostream *v68; // rax __int64 v69; // r12 unsigned int v70; // r12d __int64 v71; // rax _BYTE *v72; // rbp char v73; // al std::ostream *v74; // rax __int64 v75; // rbp __int64 v76; // rbp __int64 v77; // rax _BYTE *v78; // r12 char v79; // al std::ostream *v80; // rax __int64 *v81; // rax __int64 v82; // rdi char **v83; // rax char **v84; // rax unsigned __int64 v85; // rsi __int64 *v86; // rax char *v87; // rdi char *v88; // rdi __int64 v89; // rdi __int64 v90; // rdi __int64 v91; // rbp __int64 v92; // rax __int64 v93; // rbp __int64 v94; // rax _BYTE *v95; // rbp char v96; // al std::ostream *v97; // rax std::ostream *v98; // r14 __int64 v99; // rax _BYTE *v100; // rbp char v101; // al std::ostream *v102; // rax std::ostream *v103; // r14 __int64 v104; // rax _BYTE *v105; // rbp char v106; // al std::ostream *v107; // rax __int64 v108; // rax _BYTE *v109; // rbp char v110; // al std::ostream *v111; // rax HDDMDevice *Device; // rax __int64 v113; // rdx __int64 v114; // rdx __int64 v115; // rdi __int64 v116; // rdi __int64 v117; // rax _BYTE *v118; // r12 char v119; // al std::ostream *v120; // rax __int64 v121; // r12 int v122; // eax int v123; // eax int v124; // eax int v125; // edx int v126; // edx int v127; // ecx int v128; // esi int v129; // eax int v130; // eax int v131; // ecx int v132; // ecx int v133; // ecx int v134; // esi int v135; // eax int v136; // edx int v137; // eax int v138; // eax int v139; // ecx int v140; // ecx int v141; // edx int v142; // eax int v143; // eax int v144; // edx int v145; // edx char *v146; // [rsp+8h] [rbp-AC0h] char *v148; // [rsp+18h] [rbp-AB0h] __int64 v149; // [rsp+20h] [rbp-AA8h] std::string *Device_1; // [rsp+28h] [rbp-AA0h] std::string *Device_2; // [rsp+28h] [rbp-AA0h] _QWORD v152[2]; // [rsp+60h] [rbp-A68h] BYREF char *v153; // [rsp+70h] [rbp-A58h] BYREF void *s1[2]; // [rsp+80h] [rbp-A48h] BYREF __int64 v155; // [rsp+90h] [rbp-A38h] BYREF _QWORD v156[2]; // [rsp+A0h] [rbp-A28h] BYREF __int64 v157; // [rsp+B0h] [rbp-A18h] BYREF _QWORD v158[2]; // [rsp+C0h] [rbp-A08h] BYREF _QWORD v159[2]; // [rsp+D0h] [rbp-9F8h] BYREF _QWORD v160[2]; // [rsp+E0h] [rbp-9E8h] BYREF _QWORD v161[2]; // [rsp+F0h] [rbp-9D8h] BYREF _BYTE v162[272]; // [rsp+100h] [rbp-9C8h] BYREF char *v163; // [rsp+210h] [rbp-8B8h] BYREF _QWORD v164[7]; // [rsp+218h] [rbp-8B0h] BYREF __int64 v165; // [rsp+250h] [rbp-878h] BYREF __int64 v166; // [rsp+280h] [rbp-848h] BYREF _QWORD v167[28]; // [rsp+308h] [rbp-7C0h] BYREF char v168; // [rsp+3E8h] [rbp-6E0h] char v169; // [rsp+3E9h] [rbp-6DFh] __int64 v170; // [rsp+3F0h] [rbp-6D8h] __int64 v171; // [rsp+3F8h] [rbp-6D0h] __int64 v172; // [rsp+400h] [rbp-6C8h] __int64 v173; // [rsp+408h] [rbp-6C0h] char *v174; // [rsp+410h] [rbp-6B8h] BYREF _QWORD v175[7]; // [rsp+418h] [rbp-6B0h] BYREF __int64 v176; // [rsp+450h] [rbp-678h] BYREF __int64 v177; // [rsp+480h] [rbp-648h] BYREF _QWORD v178[28]; // [rsp+508h] [rbp-5C0h] BYREF char v179; // [rsp+5E8h] [rbp-4E0h] char v180; // [rsp+5E9h] [rbp-4DFh] __int64 v181; // [rsp+5F0h] [rbp-4D8h] __int64 v182; // [rsp+5F8h] [rbp-4D0h] __int64 v183; // [rsp+600h] [rbp-4C8h] __int64 v184; // [rsp+608h] [rbp-4C0h] char *v185; // [rsp+610h] [rbp-4B8h] BYREF __int64 v186; // [rsp+618h] [rbp-4B0h] _QWORD v187[7]; // [rsp+620h] [rbp-4A8h] BYREF __int64 v188; // [rsp+658h] [rbp-470h] BYREF __int64 v189; // [rsp+688h] [rbp-440h] BYREF _QWORD v190[4]; // [rsp+710h] [rbp-3B8h] BYREF int v191; // [rsp+730h] [rbp-398h] __int64 v192; // [rsp+7E8h] [rbp-2E0h] char v193; // [rsp+7F0h] [rbp-2D8h] char v194; // [rsp+7F1h] [rbp-2D7h] __int64 v195; // [rsp+7F8h] [rbp-2D0h] __int64 v196; // [rsp+800h] [rbp-2C8h] __int64 v197; // [rsp+808h] [rbp-2C0h] __int64 v198; // [rsp+810h] [rbp-2B8h] _BYTE v199[680]; // [rsp+820h] [rbp-2A8h] BYREF std::string::string((std::string *)v152, a2); std::string::append((std::string *)v152, ".grid", 5u); std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Parsing ", 8); v3 = (std::ostream *)std::__ostream_insert<char,std::char_traits<char>>( &std::cout, v152[0], *(_QWORD *)(v152[0] - 24LL)); std::__ostream_insert<char,std::char_traits<char>>(v3, " to generate the XNG device files.", 34); v4 = *(_QWORD *)(*(_QWORD *)v3 - 24LL); v5 = *(_BYTE **)((char *)v3 + v4 + 240); if ( !v5 ) std::__throw_bad_cast(); if ( v5[56] ) { v6 = v5[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)v3 + v4 + 240)); v6 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v5 + 48LL))(v5, 10); } v7 = (std::ostream *)std::ostream::put(v3, v6); std::ostream::flush(v7); v8 = v152[0]; std::ios_base::ios_base((std::ios_base *)v190); v192 = 0; v193 = 0; v194 = 0; v195 = 0; v196 = 0; v197 = 0; v198 = 0; v190[0] = (char *)&`vtable for'std::ios + 16; v9 = (char *)`VTT for'std::ifstream[1]; v10 = (char *)`VTT for'std::ifstream[2]; v185 = v9; v146 = v10; *(char **)((char *)&v185 + *((_QWORD *)v9 - 3)) = v10; v186 = 0; std::ios::init((char *)&v185 + *((_QWORD *)v185 - 3), 0); v185 = (char *)&`vtable for'std::ifstream + 24; v190[0] = (char *)&`vtable for'std::ifstream + 64; std::filebuf::basic_filebuf(v187); std::ios::init(v190, v187); if ( std::filebuf::open(v187, v8, 8) ) std::ios::clear((char *)&v185 + *((_QWORD *)v185 - 3), 0); else std::ios::clear((char *)&v185 + *((_QWORD *)v185 - 3), *(_DWORD *)((char *)&v185 + *((_QWORD *)v185 - 3) + 32) | 4u); if ( !v191 ) { std::string::assign((hddp::Driver *)((char *)this + 8), (const std::string *)v152); hddp::Scanner::Scanner(v199, &v185, (char *)this + 8, 0); hddp::Scanner::set_debug((hddp::Scanner *)v199, *(_BYTE *)this); if ( getenv("TRACE_HDDPSCANNER") ) hddp::Scanner::set_debug((hddp::Scanner *)v199, 1); *((_QWORD *)this + 2) = v199; hddp::Parser::Parser((hddp::Parser *)v162, this); hddp::Parser::set_debug_level((hddp::Parser *)v162, *((unsigned __int8 *)this + 1)); if ( getenv("TRACE_HDDPPARSER") ) hddp::Parser::set_debug_level((hddp::Parser *)v162, 1); if ( (unsigned int)hddp::Parser::parse((hddp::Parser *)v162) ) { v34 = *(_QWORD *)(std::cerr - 24LL); v35 = *(_BYTE **)((char *)&std::cerr + v34 + 240); if ( !v35 ) std::__throw_bad_cast(); if ( v35[56] ) { v36 = v35[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cerr + v34 + 240)); v36 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v35 + 48LL))(v35, 10); } v37 = (std::ostream *)std::ostream::put((std::ostream *)&std::cerr, v36); v38 = std::ostream::flush(v37); std::__ostream_insert<char,std::char_traits<char>>(v38, "ERROR:", 6); std::__ostream_insert<char,std::char_traits<char>>( v38, "/wrk/2016.3/continuous/2016_09_26_1671147/src/shared/device/devparse/HDDPDriver.cxx", 83); std::__ostream_insert<char,std::char_traits<char>>(v38, ":", 1); v39 = (std::ostream *)std::ostream::operator<<(v38, 547); std::__ostream_insert<char,std::char_traits<char>>(v39, ": ", 2); std::__ostream_insert<char,std::char_traits<char>>(v39, "Parsing failed", 14); v40 = *(_BYTE **)((char *)v39 + *(_QWORD *)(*(_QWORD *)v39 - 24LL) + 240); if ( !v40 ) std::__throw_bad_cast(); } else if ( *((_QWORD *)this + 3) ) { std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Checking ...", 12); v26 = *(_QWORD *)(std::cout - 24LL); v27 = *(_BYTE **)((char *)&std::cout + v26 + 240); if ( !v27 ) std::__throw_bad_cast(); if ( v27[56] ) { v28 = v27[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cout + v26 + 240)); v28 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v27 + 48LL))(v27, 10); } v29 = (std::ostream *)std::ostream::put((std::ostream *)&std::cout, v28); std::ostream::flush(v29); (*(void (__fastcall **)(_QWORD, _QWORD))(**((_QWORD **)this + 3) + 24LL))(*((_QWORD *)this + 3), 0); if ( hddp::HDDP_Error::numErrors > 0 ) { std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Semantic errors found ... exiting ... ", 38); v30 = *(_QWORD *)(std::cout - 24LL); v31 = *(_BYTE **)((char *)&std::cout + v30 + 240); if ( !v31 ) std::__throw_bad_cast(); if ( v31[56] ) { v32 = v31[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cout + v30 + 240)); v32 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v31 + 48LL))(v31, 10); } v33 = (std::ostream *)std::ostream::put((std::ostream *)&std::cout, v32); goto LABEL_30; } std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Elaborating ...", 15); v42 = *(_QWORD *)(std::cout - 24LL); v43 = *(_BYTE **)((char *)&std::cout + v42 + 240); if ( !v43 ) std::__throw_bad_cast(); if ( v43[56] ) { v44 = v43[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cout + v42 + 240)); v44 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v43 + 48LL))(v43, 10); } v45 = (std::ostream *)std::ostream::put((std::ostream *)&std::cout, v44); std::ostream::flush(v45); (*(void (__fastcall **)(_QWORD))(**((_QWORD **)this + 3) + 32LL))(*((_QWORD *)this + 3)); v46 = *(_WORD *)(*((_QWORD *)this + 3) + 240LL); std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Parsing completed successfully, version ", 40); v47 = (std::ostream *)std::ostream::_M_insert<unsigned long>(&std::cout, v46); v48 = *(_QWORD *)(*(_QWORD *)v47 - 24LL); v49 = *(_BYTE **)((char *)v47 + v48 + 240); if ( !v49 ) std::__throw_bad_cast(); if ( v49[56] ) { v50 = v49[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)v47 + v48 + 240)); v50 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v49 + 48LL))(v49, 10); } v51 = (std::ostream *)std::ostream::put(v47, v50); std::ostream::flush(v51); v52 = *(_QWORD *)(*((_QWORD *)this + 3) + 48LL); *((_QWORD *)this + 4) = v52; if ( v52 ) { std::string::string((std::string *)&v153, (const std::string *)(v52 + 48)); std::string::string((std::string *)s1, (const std::string *)(*((_QWORD *)this + 4) + 56LL)); n = *((_QWORD *)s1[0] - 3); if ( n == *(_QWORD *)(*(_QWORD *)a2 - 24LL) && !memcmp(s1[0], *(const void **)a2, n) ) { if ( !std::filebuf::close(v187) ) std::ios::clear( (char *)&v185 + *((_QWORD *)v185 - 3), *(_DWORD *)((char *)&v185 + *((_QWORD *)v185 - 3) + 32) | 4u); hddp::Driver::annotate_tilenames(this, a2); hddp::Driver::annotate_sites(this, a2); v70 = dword_99305D0; if ( !dword_99305D0 ) { HDDMDevice::setrecursivedeviceid(*((HDDMDevice **)this + 4), **((_BYTE **)this + 4) & 0xF); HDDMDevice::printXdlrc(*((HDDMDevice **)this + 4)); std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Generating XNG file names... ", 29); v77 = *(_QWORD *)(std::cout - 24LL); v78 = *(_BYTE **)((char *)&std::cout + v77 + 240); if ( !v78 ) std::__throw_bad_cast(); if ( v78[56] ) { v79 = v78[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cout + v77 + 240)); v79 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v78 + 48LL))(v78, 10); } v80 = (std::ostream *)std::ostream::put((std::ostream *)&std::cout, v79); std::ostream::flush(v80); std::string::string(v156, ".xng", &v163); v81 = (__int64 *)std::string::insert((std::string *)v156, 0, (const char *)s1[0], *((_QWORD *)s1[0] - 3)); v155 = *v81; *v81 = (__int64)&std::string::_Rep::_S_empty_rep_storage + 24; v82 = v156[0] - 24LL; if ( (_UNKNOWN *)(v156[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v135 = _InterlockedExchangeAdd((volatile signed __int32 *)(v156[0] - 8LL), 0xFFFFFFFF); } else { v136 = *(_DWORD *)(v156[0] - 8LL); *(_DWORD *)(v156[0] - 8LL) = v136 - 1; v135 = v136; } if ( v135 <= 0 ) std::string::_Rep::_M_destroy(v82, &v174); } std::string::string(v159, ".xng", v160); std::string::string(v158, "_", v156); v83 = (char **)std::string::insert((std::string *)v158, 0, v153, *((_QWORD *)v153 - 3)); v163 = *v83; *v83 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24; v84 = (char **)std::string::append((std::string *)&v163, (const std::string *)s1); v174 = *v84; *v84 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24; v85 = *(_QWORD *)(v159[0] - 24LL) + *((_QWORD *)v174 - 3); if ( v85 <= *((_QWORD *)v174 - 2) || v85 > *(_QWORD *)(v159[0] - 16LL) ) v86 = (__int64 *)std::string::append((std::string *)&v174, (const std::string *)v159); else v86 = (__int64 *)std::string::insert((std::string *)v159, 0, v174, *((_QWORD *)v174 - 3)); v157 = *v86; *v86 = (__int64)&std::string::_Rep::_S_empty_rep_storage + 24; v87 = v174 - 24; if ( v174 - 24 != (char *)&std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v124 = _InterlockedExchangeAdd((volatile signed __int32 *)v174 - 2, 0xFFFFFFFF); } else { v126 = *((_DWORD *)v174 - 2); *((_DWORD *)v174 - 2) = v126 - 1; v124 = v126; } if ( v124 <= 0 ) std::string::_Rep::_M_destroy(v87, v161); } v88 = v163 - 24; if ( v163 - 24 != (char *)&std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v123 = _InterlockedExchangeAdd((volatile signed __int32 *)v163 - 2, 0xFFFFFFFF); } else { v125 = *((_DWORD *)v163 - 2); *((_DWORD *)v163 - 2) = v125 - 1; v123 = v125; } if ( v123 <= 0 ) std::string::_Rep::_M_destroy(v88, &v174); } v89 = v158[0] - 24LL; if ( (_UNKNOWN *)(v158[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v143 = _InterlockedExchangeAdd((volatile signed __int32 *)(v158[0] - 8LL), 0xFFFFFFFF); } else { v145 = *(_DWORD *)(v158[0] - 8LL); *(_DWORD *)(v158[0] - 8LL) = v145 - 1; v143 = v145; } if ( v143 <= 0 ) std::string::_Rep::_M_destroy(v89, &v174); } v90 = v159[0] - 24LL; if ( (_UNKNOWN *)(v159[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v142 = _InterlockedExchangeAdd((volatile signed __int32 *)(v159[0] - 8LL), 0xFFFFFFFF); } else { v144 = *(_DWORD *)(v159[0] - 8LL); *(_DWORD *)(v159[0] - 8LL) = v144 - 1; v142 = v144; } if ( v142 <= 0 ) std::string::_Rep::_M_destroy(v90, &v174); } v91 = v155; std::ios_base::ios_base((std::ios_base *)v167); v167[27] = 0; v168 = 0; v169 = 0; v170 = 0; v171 = 0; v172 = 0; v173 = 0; v167[0] = (char *)&`vtable for'std::ios + 16; v92 = `VTT for'std::ofstream[2]; v163 = (char *)`VTT for'std::ofstream[1]; v149 = v92; v148 = v163; *(_QWORD *)((char *)&v164[-1] + *((_QWORD *)v163 - 3)) = v92; std::ios::init((char *)&v164[-1] + *((_QWORD *)v163 - 3), 0); v163 = (char *)&`vtable for'std::ofstream + 24; v167[0] = (char *)&`vtable for'std::ofstream + 64; std::filebuf::basic_filebuf(v164); std::ios::init(v167, v164); if ( std::filebuf::open(v164, v91, 20) ) std::ios::clear((char *)&v164[-1] + *((_QWORD *)v163 - 3), 0); else std::ios::clear( (char *)&v164[-1] + *((_QWORD *)v163 - 3), *(_DWORD *)((char *)&v164[3] + *((_QWORD *)v163 - 3)) | 4u); v93 = v157; std::ios_base::ios_base((std::ios_base *)v178); v178[27] = 0; v179 = 0; v180 = 0; v181 = 0; v182 = 0; v183 = 0; v184 = 0; v178[0] = (char *)&`vtable for'std::ios + 16; v174 = v148; *(_QWORD *)((char *)&v175[-1] + *((_QWORD *)v148 - 3)) = v149; std::ios::init((char *)&v175[-1] + *((_QWORD *)v174 - 3), 0); v174 = (char *)&`vtable for'std::ofstream + 24; v178[0] = (char *)&`vtable for'std::ofstream + 64; std::filebuf::basic_filebuf(v175); std::ios::init(v178, v175); if ( std::filebuf::open(v175, v93, 20) ) std::ios::clear((char *)&v175[-1] + *((_QWORD *)v174 - 3), 0); else std::ios::clear( (char *)&v175[-1] + *((_QWORD *)v174 - 3), *(_DWORD *)((char *)&v175[3] + *((_QWORD *)v174 - 3)) | 4u); std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Writing new-style XNG", 21); v94 = *(_QWORD *)(std::cout - 24LL); v95 = *(_BYTE **)((char *)&std::cout + v94 + 240); if ( !v95 ) std::__throw_bad_cast(); if ( v95[56] ) { v96 = v95[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cout + v94 + 240)); v96 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v95 + 48LL))(v95, 10); } v97 = (std::ostream *)std::ostream::put((std::ostream *)&std::cout, v96); std::ostream::flush(v97); HDDMDevice::writeme_pb( *((_QWORD *)this + 4), (__int64)&v163, (__int64)&v174, *(_WORD *)(*((_QWORD *)this + 3) + 240LL)); if ( !std::filebuf::close(v164) ) std::ios::clear( (char *)&v164[-1] + *((_QWORD *)v163 - 3), *(_DWORD *)((char *)&v164[3] + *((_QWORD *)v163 - 3)) | 4u); if ( !std::filebuf::close(v175) ) std::ios::clear( (char *)&v175[-1] + *((_QWORD *)v174 - 3), *(_DWORD *)((char *)&v175[3] + *((_QWORD *)v174 - 3)) | 4u); std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Wrote part file ", 16); v98 = (std::ostream *)std::__ostream_insert<char,std::char_traits<char>>( &std::cout, v155, *(_QWORD *)(v155 - 24)); v99 = *(_QWORD *)(*(_QWORD *)v98 - 24LL); v100 = *(_BYTE **)((char *)v98 + v99 + 240); if ( !v100 ) std::__throw_bad_cast(); if ( v100[56] ) { v101 = v100[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)v98 + v99 + 240)); v101 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v100 + 48LL))(v100, 10); } v102 = (std::ostream *)std::ostream::put(v98, v101); std::ostream::flush(v102); std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Wrote arch file ", 16); v103 = (std::ostream *)std::__ostream_insert<char,std::char_traits<char>>( &std::cout, v157, *(_QWORD *)(v157 - 24)); v104 = *(_QWORD *)(*(_QWORD *)v103 - 24LL); v105 = *(_BYTE **)((char *)v103 + v104 + 240); if ( !v105 ) std::__throw_bad_cast(); if ( v105[56] ) { v106 = v105[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)v103 + v104 + 240)); v106 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v105 + 48LL))(v105, 10); } v107 = (std::ostream *)std::ostream::put(v103, v106); std::ostream::flush(v107); std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Writing xdlrc ...", 17); v108 = *(_QWORD *)(std::cout - 24LL); v109 = *(_BYTE **)((char *)&std::cout + v108 + 240); if ( !v109 ) std::__throw_bad_cast(); if ( v109[56] ) { v110 = v109[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cout + v108 + 240)); v110 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v109 + 48LL))(v109, 10); } v111 = (std::ostream *)std::ostream::put((std::ostream *)&std::cout, v110); std::ostream::flush(v111); std::string::string(v161, "", v158); std::string::string(v160, "", v156); Device = HDDMDeviceCache::loadDevice( (HDDMDeviceCache *)HDDMDeviceCache::m_devcache, (const std::string *)&v155, (const std::string *)&v157, (const std::string *)v160, (const std::string *)v161); v113 = v160[0] - 24LL; if ( (_UNKNOWN *)(v160[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v127 = _InterlockedExchangeAdd((volatile signed __int32 *)(v160[0] - 8LL), 0xFFFFFFFF); } else { v128 = *(_DWORD *)(v160[0] - 8LL); *(_DWORD *)(v160[0] - 8LL) = v128 - 1; v127 = v128; } if ( v127 <= 0 ) { Device_1 = (std::string *)Device; std::string::_Rep::_M_destroy(v113, v159); Device = (HDDMDevice *)Device_1; } } v114 = v161[0] - 24LL; if ( (_UNKNOWN *)(v161[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v131 = _InterlockedExchangeAdd((volatile signed __int32 *)(v161[0] - 8LL), 0xFFFFFFFF); } else { v134 = *(_DWORD *)(v161[0] - 8LL); *(_DWORD *)(v161[0] - 8LL) = v134 - 1; v131 = v134; } if ( v131 <= 0 ) { Device_2 = (std::string *)Device; std::string::_Rep::_M_destroy(v114, v160); Device = (HDDMDevice *)Device_2; } } HDDMDevice::printXdlrc(Device); v175[0] = (char *)&`vtable for'std::filebuf + 16; v174 = (char *)&`vtable for'std::ofstream + 24; v178[0] = (char *)&`vtable for'std::ofstream + 64; std::filebuf::close(v175); std::__basic_file<char>::~__basic_file(&v177); v175[0] = (char *)&`vtable for'std::streambuf + 16; std::locale::~locale((std::locale *)&v176); v174 = v148; *(_QWORD *)((char *)&v175[-1] + *((_QWORD *)v148 - 3)) = v149; v178[0] = (char *)&`vtable for'std::ios + 16; std::ios_base::~ios_base((std::ios_base *)v178); v163 = (char *)&`vtable for'std::ofstream + 24; v167[0] = (char *)&`vtable for'std::ofstream + 64; v164[0] = (char *)&`vtable for'std::filebuf + 16; std::filebuf::close(v164); std::__basic_file<char>::~__basic_file(&v166); v164[0] = (char *)&`vtable for'std::streambuf + 16; std::locale::~locale((std::locale *)&v165); v163 = v148; *(_QWORD *)((char *)&v164[-1] + *((_QWORD *)v148 - 3)) = v149; v167[0] = (char *)&`vtable for'std::ios + 16; std::ios_base::~ios_base((std::ios_base *)v167); v115 = v157 - 24; if ( (_UNKNOWN *)(v157 - 24) != &std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v130 = _InterlockedExchangeAdd((volatile signed __int32 *)(v157 - 8), 0xFFFFFFFF); } else { v133 = *(_DWORD *)(v157 - 8); *(_DWORD *)(v157 - 8) = v133 - 1; v130 = v133; } if ( v130 <= 0 ) std::string::_Rep::_M_destroy(v115, v161); } v116 = v155 - 24; if ( (_UNKNOWN *)(v155 - 24) != &std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v129 = _InterlockedExchangeAdd((volatile signed __int32 *)(v155 - 8), 0xFFFFFFFF); } else { v132 = *(_DWORD *)(v155 - 8); *(_DWORD *)(v155 - 8) = v132 - 1; v129 = v132; } if ( v129 <= 0 ) std::string::_Rep::_M_destroy(v116, v161); } v23 = 1; goto LABEL_61; } v71 = *(_QWORD *)(std::cerr - 24LL); v72 = *(_BYTE **)((char *)&std::cerr + v71 + 240); if ( !v72 ) std::__throw_bad_cast(); if ( v72[56] ) { v73 = v72[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cerr + v71 + 240)); v73 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v72 + 48LL))(v72, 10); } v74 = (std::ostream *)std::ostream::put((std::ostream *)&std::cerr, v73); v75 = std::ostream::flush(v74); std::__ostream_insert<char,std::char_traits<char>>(v75, "ERROR:", 6); std::__ostream_insert<char,std::char_traits<char>>( v75, "/wrk/2016.3/continuous/2016_09_26_1671147/src/shared/device/devparse/HDDPDriver.cxx", 83); std::__ostream_insert<char,std::char_traits<char>>(v75, ":", 1); v76 = std::ostream::operator<<(v75, 608); std::__ostream_insert<char,std::char_traits<char>>(v76, ": ", 2); v59 = (std::ostream *)std::ostream::_M_insert<unsigned long>(v76, v70); std::__ostream_insert<char,std::char_traits<char>>( v59, " parsing errors occurred during annotation, cannot continue.", 60); v60 = *(_BYTE **)((char *)v59 + *(_QWORD *)(*(_QWORD *)v59 - 24LL) + 240); if ( !v60 ) std::__throw_bad_cast(); } else { v54 = *(_QWORD *)(std::cerr - 24LL); v55 = *(_BYTE **)((char *)&std::cerr + v54 + 240); if ( !v55 ) std::__throw_bad_cast(); if ( v55[56] ) { v56 = v55[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cerr + v54 + 240)); v56 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v55 + 48LL))(v55, 10); } v57 = (std::ostream *)std::ostream::put((std::ostream *)&std::cerr, v56); v58 = std::ostream::flush(v57); std::__ostream_insert<char,std::char_traits<char>>(v58, "ERROR:", 6); std::__ostream_insert<char,std::char_traits<char>>( v58, "/wrk/2016.3/continuous/2016_09_26_1671147/src/shared/device/devparse/HDDPDriver.cxx", 83); std::__ostream_insert<char,std::char_traits<char>>(v58, ":", 1); v59 = (std::ostream *)std::ostream::operator<<(v58, 591); std::__ostream_insert<char,std::char_traits<char>>(v59, ": ", 2); std::__ostream_insert<char,std::char_traits<char>>( v59, "PICNAME in grid file should match the name if ${picname}.grid file", 66); v60 = *(_BYTE **)((char *)v59 + *(_QWORD *)(*(_QWORD *)v59 - 24LL) + 240); if ( !v60 ) std::__throw_bad_cast(); } if ( v60[56] ) { v61 = v60[67]; } else { std::ctype<char>::_M_widen_init(v60); v61 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v60 + 48LL))(v60, 10); } v62 = (std::ostream *)std::ostream::put(v59, v61); std::ostream::flush(v62); v23 = 0; LABEL_61: v63 = (char *)s1[0] - 24; if ( (char *)s1[0] - 24 != (char *)&std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v138 = _InterlockedExchangeAdd((volatile signed __int32 *)s1[0] - 2, 0xFFFFFFFF); } else { v140 = *((_DWORD *)s1[0] - 2); *((_DWORD *)s1[0] - 2) = v140 - 1; v138 = v140; } if ( v138 <= 0 ) std::string::_Rep::_M_destroy(v63, v161); } v64 = v153 - 24; if ( v153 - 24 != (char *)&std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v137 = _InterlockedExchangeAdd((volatile signed __int32 *)v153 - 2, 0xFFFFFFFF); } else { v139 = *((_DWORD *)v153 - 2); *((_DWORD *)v153 - 2) = v139 - 1; v137 = v139; } if ( v137 <= 0 ) std::string::_Rep::_M_destroy(v64, v161); } v9 = (char *)`VTT for'std::ifstream[1]; v22 = (char *)`VTT for'std::ifstream[2]; goto LABEL_31; } v117 = *(_QWORD *)(std::cerr - 24LL); v118 = *(_BYTE **)((char *)&std::cerr + v117 + 240); if ( !v118 ) std::__throw_bad_cast(); if ( v118[56] ) { v119 = v118[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cerr + v117 + 240)); v119 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v118 + 48LL))(v118, 10); } v120 = (std::ostream *)std::ostream::put((std::ostream *)&std::cerr, v119); v121 = std::ostream::flush(v120); std::__ostream_insert<char,std::char_traits<char>>(v121, "ERROR:", 6); std::__ostream_insert<char,std::char_traits<char>>( v121, "/wrk/2016.3/continuous/2016_09_26_1671147/src/shared/device/devparse/HDDPDriver.cxx", 83); std::__ostream_insert<char,std::char_traits<char>>(v121, ":", 1); v39 = (std::ostream *)std::ostream::operator<<(v121, 580); std::__ostream_insert<char,std::char_traits<char>>(v39, ": ", 2); std::__ostream_insert<char,std::char_traits<char>>(v39, "GetFinalDevice operation failed", 31); v40 = *(_BYTE **)((char *)v39 + *(_QWORD *)(*(_QWORD *)v39 - 24LL) + 240); if ( !v40 ) std::__throw_bad_cast(); } else { v65 = *(_QWORD *)(std::cerr - 24LL); v66 = *(_BYTE **)((char *)&std::cerr + v65 + 240); if ( !v66 ) std::__throw_bad_cast(); if ( v66[56] ) { v67 = v66[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cerr + v65 + 240)); v67 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v66 + 48LL))(v66, 10); } v68 = (std::ostream *)std::ostream::put((std::ostream *)&std::cerr, v67); v69 = std::ostream::flush(v68); std::__ostream_insert<char,std::char_traits<char>>(v69, "ERROR:", 6); std::__ostream_insert<char,std::char_traits<char>>( v69, "/wrk/2016.3/continuous/2016_09_26_1671147/src/shared/device/devparse/HDDPDriver.cxx", 83); std::__ostream_insert<char,std::char_traits<char>>(v69, ":", 1); v39 = (std::ostream *)std::ostream::operator<<(v69, 556); std::__ostream_insert<char,std::char_traits<char>>(v39, ": ", 2); std::__ostream_insert<char,std::char_traits<char>>(v39, "XNG Device could not be created successfully", 44); v40 = *(_BYTE **)((char *)v39 + *(_QWORD *)(*(_QWORD *)v39 - 24LL) + 240); if ( !v40 ) std::__throw_bad_cast(); } if ( v40[56] ) { v41 = v40[67]; } else { std::ctype<char>::_M_widen_init(v40); v41 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v40 + 48LL))(v40, 10); } v33 = (std::ostream *)std::ostream::put(v39, v41); LABEL_30: std::ostream::flush(v33); v22 = v146; v23 = 0; LABEL_31: hddp::Parser::~Parser((hddp::Parser *)v162); hddp::Scanner::~Scanner((hddp::Scanner *)v199); goto LABEL_14; } v11 = *(_QWORD *)(std::cerr - 24LL); v12 = *(_BYTE **)((char *)&std::cerr + v11 + 240); if ( !v12 ) std::__throw_bad_cast(); if ( v12[56] ) { v13 = v12[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cerr + v11 + 240)); v13 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v12 + 48LL))(v12, 10); } v14 = (std::ostream *)std::ostream::put((std::ostream *)&std::cerr, v13); v15 = std::ostream::flush(v14); std::__ostream_insert<char,std::char_traits<char>>(v15, "ERROR:", 6); std::__ostream_insert<char,std::char_traits<char>>( v15, "/wrk/2016.3/continuous/2016_09_26_1671147/src/shared/device/devparse/HDDPDriver.cxx", 83); std::__ostream_insert<char,std::char_traits<char>>(v15, ":", 1); v16 = std::ostream::operator<<(v15, 526); std::__ostream_insert<char,std::char_traits<char>>(v16, ": ", 2); std::__ostream_insert<char,std::char_traits<char>>(v16, "File ", 5); v17 = (std::ostream *)std::__ostream_insert<char,std::char_traits<char>>(v16, v152[0], *(_QWORD *)(v152[0] - 24LL)); std::__ostream_insert<char,std::char_traits<char>>(v17, " could not be opened for parsing", 32); v18 = *(_QWORD *)(*(_QWORD *)v17 - 24LL); v19 = *(_BYTE **)((char *)v17 + v18 + 240); if ( !v19 ) std::__throw_bad_cast(); if ( v19[56] ) { v20 = v19[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)v17 + v18 + 240)); v20 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v19 + 48LL))(v19, 10); } v21 = (std::ostream *)std::ostream::put(v17, v20); std::ostream::flush(v21); v22 = v146; v23 = 0; LABEL_14: v185 = (char *)&`vtable for'std::ifstream + 24; v190[0] = (char *)&`vtable for'std::ifstream + 64; v187[0] = (char *)&`vtable for'std::filebuf + 16; std::filebuf::close(v187); std::__basic_file<char>::~__basic_file(&v189); v187[0] = (char *)&`vtable for'std::streambuf + 16; std::locale::~locale((std::locale *)&v188); v185 = v9; *(char **)((char *)&v185 + *((_QWORD *)v9 - 3)) = v22; v186 = 0; v190[0] = (char *)&`vtable for'std::ios + 16; std::ios_base::~ios_base((std::ios_base *)v190); v24 = v152[0] - 24LL; if ( (_UNKNOWN *)(v152[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v122 = _InterlockedExchangeAdd((volatile signed __int32 *)(v152[0] - 8LL), 0xFFFFFFFF); } else { v141 = *(_DWORD *)(v152[0] - 8LL); *(_DWORD *)(v152[0] - 8LL) = v141 - 1; v122 = v141; } if ( v122 <= 0 ) std::string::_Rep::_M_destroy(v24, v161); } return v23; }
10-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值