ReactOSã³ãŒãã確èªããåŸãç§ã¯3ã€ã®é¡ããäžåºŠã«æºããããšãã§ããŸããã ãŸããç§ã¯é·ãéãæ®éã®ãããžã§ã¯ãã«é¢ããèšäºãæžããããšæã£ãŠããŸããã Chromiumãªã©ã®ãããžã§ã¯ãã®ã³ãŒãã確èªããã®ã¯é¢çœããããŸããã é«å質ã§ãããéåžžã®ãããžã§ã¯ãã§ã¯å©çšã§ããªããªãœãŒã¹ããã®å質ã®ç¶æã«è²»ããããŠããŸãã 第äºã«ã倧ããªäŸã§éçåæãã©ã®ããã«å¿ èŠã§ãããã瀺ãããšãã§ããè¯ãäŸãçŸããŸãããç¹ã«ç°çš®ã®åæ£ããŒã ã«ãã£ãŠéçºãããå Žåã§ãã 第äžã«ãPVS-Studioãããè¯ãããã䟿å©ã«ãªã£ãŠãããšãã確èªãåããŸããã
PVS-Studioã¯ã©ãã©ãè¯ããªã£ãŠããŸã
PVS-StudioããŒã«ã®å©ç¹ã«é¢ããŠãæåŸã®ç¬éããå§ããŸãããã ReactOSã¯ãPVS-Studioãæ£ããæ¹åã«éçºãããŠããããšãéæ¥çã«ç¢ºèªããŸãã ã³ããªãã£-ãã³ããªãã£ã®éçåæã[ 1 ]ãªã©ã®ãããŒãŠã§ã€ãã§ReactOSããã§ãã¯ããããšã«é¢ãããã¥ãŒã¹ããããŸãã ãã¡ãããç§ãã¡ã¯ã³ããªãã£ã®å¯èœæ§ãšã¯ã»ã©é ãããšãç¥ã£ãŠããŸãã ããããããã«ãããããããã³ããªãã£ã®ãããã§ãããã€ãã®æ°ãããã¹ãèŠã€ãããŸããããšãPVS-Studioã¯åœŒãã®å šäœã®éŠ¬è»ãšå°ããªã«ãŒããèŠã€ããŸãã ãã®å Žåãã©ãã«ãã³ãŒããéä¿¡ããªãã§ãã ããã ãããžã§ã¯ããååŸããŠç¢ºèªããã ãã§ãã ã ããæã ã¯æ£ããè»éã«ä¹ã£ãŠããŸãã
ReactOSãšã¯äœã§ããïŒ
ReactOSã¯ãWindows XP / 2003ã®ã¢ãŒããã¯ãã£ã«åºã¥ããææ°ã®ç¡æã®ãªãŒãã³ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ãã ã·ã¹ãã ã¯ãŒãããäœæãããMicrosoftã®Windows-NTã¢ãŒããã¯ãã£ãããŒããŠã§ã¢ããã¢ããªã±ãŒã·ã§ã³ã¬ãã«ãŸã§ç¹°ãè¿ãããšãç®çãšããŠããŸãã CãC ++ãããã³ã¢ã»ã³ãã©ã®ãœãŒã¹ã³ãŒãã®éã¯çŽ220ã¡ã¬ãã€ãã§ãã
ããŸããŸãªãªã³ã¯ïŒ
- ReactOSãããžã§ã¯ãã®å ¬åŒãµã€ã ã
- ReactOSã®éçºã«åå ããæ¹æ³ ã
- ãŠã£ãããã£ã¢ ReactOS
- Computerraã®èšäºã ReactOSïŒè¿œãã€ããè¿œãè¶ããŸãã
- ã©ãŒã¯ã¢ã¢ã ReactOS
ReactOSã®ãã°
次ã«ãReactOSã³ãŒãã§çºçãããšã©ãŒã®åŠçã«ã€ããŠèª¬æããŸãã ãã¡ããããããã®ãã¹ãŠãèšäºã«å«ãŸããŠããããã§ã¯ãããŸããã ããã«ãåæäžã«æ°ä»ãããšã©ãŒã説æããããã¹ããã¡ã€ã«ãæçš¿ããŸããã ãã¡ã€ã«ã«ã¯ããã¡ã€ã«åãšè¡çªå·ãå«ã蚺æã¡ãã»ãŒãžãå«ãŸããŠããŸãã ãŸããçãã³ãŒãã§ãšã©ãŒã匷調ããããã€ãã®ã³ã¡ã³ããããŸããã ãããã£ãŠãReactOSãç·šéããã人ã¯ãèšäºã§ã¯ãªãããã®ãã¡ã€ã«ãåèã«ããŠãã ããã
ããã«è¯ãããšã«ãPVS-Studioã䜿çšããŠèªåã§ãããžã§ã¯ããããŠã³ããŒãããŠãã¹ãããŸãã çµå±ã®ãšãããç§ã¯ãããžã§ã¯ãã«ç²ŸéããŠããããç§ãç解ããŠãããšã©ãŒã®ã¿ãæžããŸããã å€ãã®ã³ãŒããã©ã°ã¡ã³ãã«ã€ããŠããšã©ãŒãå«ãŸããŠãããã©ããã¯ããããŸããã ãããã£ãŠãç§ã®åæã¯éåžžã«è¡šé¢çã§ãã 確èªã®ããã«ããŒãéžæããŸãã
ReactOSã§èŠã€ãããšã©ãŒã¯ããŸããŸã§ãã ãã ã®åç©åã åäžã®æåã«ã¿ã€ããã¹ããããŸãã
BOOL WINAPI GetMenuItemInfoA(...) { ... mii->cch = mii->cch; ... }
å®éããmii-> cch = miiW-> cch;ãã®ããã«èšè¿°ããå¿ èŠããããŸãã æçŽãWãã倱ããŸããã ãã®çµæãããã°ã©ã ã¯GetMenuItemInfoAé¢æ°ãä¿¡é Œã§ããªããªããŸããã
ãããŠãããã«1æåã®å¥ã®ã¿ã€ããã¹ããããŸãã ä»åã¯ã2ã€ã®ååã®æ¯èŒãæ£ããæ©èœããŸããã
static void _Stl_loc_combine_names(_Locale_impl* L, const char* name1, const char* name2, locale::category c) { if ((c & locale::all) == 0 || strcmp(name1, name1) == 0) ... }
&&ãšïŒæŒç®åã®éã«ã¯æ··ä¹±ããããŸãã éåžžã«ããããééãã ç§ã¯åœŒããããããŸãã¯ãã¡ã€ã«å±æ§ãæ±ãã»ãšãã©ãã¹ãŠã®ãããžã§ã¯ãã§äŒããŸãã
static LRESULT APIENTRY ACEditSubclassProc() { ... if ((This->options && ACO_AUTOSUGGEST) && ((HWND)wParam != This->hwndListBox)) ... }
æ£ããã³ãŒãã¯ãïŒThis-> optionsïŒACO_AUTOSUGGESTïŒãã®ããã«ãªããŸãã 以äžã®äŸã«ã¯ãé¢é£ãããšã©ãŒãå«ãŸããŠããŸãããã®ãããæ¡ä»¶å šäœãåžžã«falseã«ãªã£ãŠããŸãã
void adns__querysend_tcp(adns_query qu, struct timeval now) { ... if (!(errno == EAGAIN || EWOULDBLOCK || errno == EINTR || errno == ENOSPC || errno == ENOBUFS || errno == ENOMEM)) { ... }
ããèŠããšãã|| EWOULDBLOCK ||ããšããé°æ¹¿ãªæçã«æ°ä»ãããšãã§ããŸãã
ãšããã§ãReactOSã«ã¯ãåžžã«trueãŸãã¯falseã§ããå€ãã®æ¡ä»¶ããããŸããã ããšãã°ãassertïŒïŒãã¯ãå ã«ãããããæããªããã®ããããŸãã ããããç§ã®æèŠã§ã¯ãéèŠãªãã®ããããŸãã
INT WSAAPI connect(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen) { ... /* Check if error code was due to the host not being found */ if ((Status == SOCKET_ERROR) && (ErrorCode == WSAEHOSTUNREACH) && (ErrorCode == WSAENETUNREACH)) { ... }
ãæ¥ç¶ããªã©ã®æ©èœã®å®è£ ã¯ãå¯èœãªéãå®å šã«ãã¹ãããå¿ èŠãããããšã«åæããŸãã ãããŠãããã«ã¯åžžã«åœã®æ¡ä»¶ããããŸãã æ¬ é¥ããã°ããèŠã€ããã®ã¯ããã»ã©ç°¡åã§ã¯ãªãã®ã§ããšã©ãŒã®æ¬è³ªã匷調ããŸãã
(ErrorCode == 10065) && (ErrorCode == 10051)
ã¡ãªã¿ã«ããœã±ããã«é¢é£ããéšåã¯äžè¬ã«çã®ããã«èŠããŸãã ããããããã¯ãLinuxã®äžçã§ã¯SOCKETãéåžžã¯ç¬Šå·ã¿ã€ããšããŠå®£èšãããŠãããšããäºå®ã«ãããã®ã§ãã Windowsã§ã¯ã眲åãããŠããŸããã
typedef UINT_PTR SOCKET;
ãã®çµæãæ¯èŒæŒç®ã«ããŸããŸãªãšã©ãŒããããŸãã
void adns_finish(adns_state ads) { ... if (ads->tcpsocket >= 0) adns_socket_close(ads->tcpsocket); ... }
ãads-> tcpsocket> = 0ããšããè¡šçŸã¯ãåžžã«æ£ããã®ã§æå³ããããŸããã
ãã å¥åŠãªæçããããŸãã ã»ãšãã©ã®å Žåããããã¯æªå®æã§å¿ããããŠããã³ãŒãã®ã»ã¯ã·ã§ã³ã§ãã
if (ERROR_SUCCESS == hres) { Names[count] = HeapAlloc(GetProcessHeap(), 0, strlenW(szValue) + 1); if (Names[count]) strcmpW(Names[count], szValue); }
çµæãäœããã®æ¹æ³ã§äœ¿çšãããªãå ŽåããªããstrcmpWããåŒã³åºãã®ã§ããïŒ
æäœã®åªå 床ã«é¢é£ãããšã©ãŒããããŸãã
VOID NTAPI AtapiDmaInit(...) { ... ULONG treg = 0x54 + (dev < 3) ? (dev << 1) : 7; ... }
ãã®åŒãå®éã«ã©ã®ããã«æ©èœããããæ確ã«ããããã«æ¬åŒ§ãä»ããŸãïŒ
ULONG treg = (0x54 + (dev < 3)) ? (dev << 1) : 7;
倧èŠæš¡ãããžã§ã¯ãã§ã¯ã次ã®ãšã©ãŒãçºçããå¿ èŠããããŸãã ReactOSã«ã¯ã«ããã«ããããŸãã ããã¯è¿œå ã®ã»ãã³ãã³-';'ã§ãã
BOOLEAN CTEScheduleEvent(PCTE_DELAYED_EVENT Event, PVOID Context) { ... if (!Event->Queued); { Event->Queued = TRUE; Event->Context = Context; ExQueueWorkItem(&Event->WorkItem, CriticalWorkQueue); } ... }
ãŸããé åèŠçŽ ã®åæåã§ãšã©ãŒãçºçããŸãã çç±ã¯ããããŸããã 圌ãã¯æåããŠããŸãã ãããããBasicèšèªã®é åã䜿ã£ãæåã®å®éšãæãåºããŸãã
HPALETTE CardWindow::CreateCardPalette() { ... //include button text colours cols[0] = RGB(0, 0, 0); cols[1] = RGB(255, 255, 255); //include the base background colour cols[1] = crBackgnd; //include the standard button colours... cols[3] = CardButton::GetHighlight(crBackgnd); cols[4] = CardButton::GetShadow(crBackgnd); ... }
ã³ãŒãã®ããŸããŸãªèå³æ·±ãã»ã¯ã·ã§ã³ãåŒãç¶ãåŒçšã§ããŸãã æ®å¿µãªãããèšäºã¯é·ããªããããŠãåæ¢ããå¿ èŠããããŸãã ãã®ãã¡ã€ã«ã® ReactOSã§èŠã€ããä»ã®ãšã©ãŒãèŠãããšãã§ããããšãæãåºãããŠãã ããã ãã¶ãŒãã«ã€ããŠã¯ã次ã®ã³ãŒããæäŸããŸãã
#define SWAP(a,b,c) c = a;\ a = b;\ a = c
䜿çšäŸïŒ
BOOL FASTCALL IntEngGradientFillTriangle(...) { ... SWAP(v2,v3,t); ... }
ããã¯åäœã§ãã
éçã³ãŒãåæ
ReactOSã¯ãå®æçãªéçã³ãŒãåæãäžå¯æ¬ ãªãããžã§ã¯ãã®éåžžã«è¯ãäŸã ãšæããŸãã ãããŠãããã§ã®ãã€ã³ãã¯ãéçºè ã®è³æ Œã§ã¯ãããŸããã ãããžã§ã¯ãã¯å€§ãããããŸããŸãªãµãã·ã¹ãã ãå«ãŸããŠããŸãã ããã¯ãå€ãã®äººã ãåžžã«ãã®ãããªãããžã§ã¯ãã«åãçµãã§ããããšãæå³ããŸãã ãããŠã倧èŠæš¡ãªããŒã ã§ã¯ãã ãããåžžã«ããæªãããã°ã©ã ãäœãã誰ããããè¯ãããã°ã©ã ãäœããŸãã 誰ããå¥ã®ã¹ã¿ã€ã«ã䜿çšããŸãã ãããã誰ãééãããå®å šã§ã¯ãããŸããã ãããèŠãŠã
1人ãReactOSã§æ¬¡ã®ããã«æžããŠæžããïŒ
if ((res = setsockopt(....) == -1))
ã³ãŒãã¯ããªããæãããšãããŸããã æ£ãããªãã·ã§ã³ïŒifïŒïŒres = setsockoptïŒ....ïŒïŒ== -1ïŒã æåã«å®æ°ãæžãç¿æ £ã«åºå·ããŠããå Žåãå¶ç¶ã«ifã¹ããŒãã¡ã³ãå ã§èª€ã£ãå²ãåœãŠãè¡ãããšã¯ãããŸããã ããã«ã¯å¥ã®ã¿ã€ãã®ãšã©ãŒããããŸãã ãã ããäžèšã®ã«ãŒã«ã«åŸã£ãŠã³ãŒããèšè¿°ããå Žåãåé¡ã®åŒãifïŒ-1 == res = setsockoptïŒ....ïŒïŒããééããããšã¯ãããŸããã
ãã®æ¹æ³ãç¥ã£ãŠããã ãã§ã¯ãä»ã®äººãå¥ã®æ¹æ³ã§ãšã©ãŒãç¯ãããšãé²ãããšã¯ã§ããŸããã
static DWORD CALLBACK RegistrationProc(LPVOID Parameter) { ... if (0 == LoadStringW(hDllInstance, IDS_UNKNOWN_ERROR, UnknownError, sizeof(UnknownError) / sizeof(UnknownError[0] - 20))) ... }
ããã§ã¯ãæåã¯å®æ°0ãçŸããæžãããŠããŸãããããã¯å¿ èŠã®ãªãå Žæã§æ¬åŒ§ãéããŠããã ãã§ãã éåžžã®ã¿ã€ããã¹ã
ãªãããããã¹ãŠã®äŸãªã®ã§ããïŒ ãããŠã誰ãããã°ã©ããŒã§ã¯ãªããšããäºå®ã¯å®ç§ã§ãã ãŸããã³ãŒãã£ã³ã°æšæºãããã°ã©ãã³ã°æè¡ãèªå·±å¶åŸ¡ããã³ãŒãã«ãšã©ãŒããªãããšãä¿èšŒãããã®ã§ã¯ãããŸããã
倧èŠæš¡ãªãããžã§ã¯ãã§ã¯ãåçåæãéçåæãªã©ã®æ¯æŽæè¡ãå¿ èŠã«ãªããŸãã ç§ã¯åŒ·èª¿ããŸãïŒ
éçã³ãŒãåæã¯ãReactOSããã®ä»ã®å€§èŠæš¡ãããžã§ã¯ãã®éçºãµã€ã¯ã«ã«äžå¯æ¬ ãªèŠçŽ ã§ãããšèããŠããŸãã
ç§ã®å£°æã説æããŸãã ãã®ãããªã·ã¹ãã ã§ã¯ãåäœãã¹ããŸãã¯ååž°ãã¹ãã§ãã¹ããããšãã«ã100ïŒ ã«è¿ãã³ãŒãã«ãã¬ããžãå®çŸããããšã¯äžå¯èœã§ãã å°ãæ確ã«ããŸãã ãã¡ããå¯èœã§ããããã®ãããªãã¹ãã®äœæãšä¿å®ã®ã³ã¹ãã¯å®¹èªã§ããªãã»ã©é«ããªããŸãã
ãã®çç±ã¯ãèããããã·ã¹ãã ç¶æ ã®æ°ãšã³ãŒãåå²ãå®è¡ããèããããæ¹æ³ãéåžžã«å€§ããããã§ãã äžéšã®ãã©ã³ãã¯ã»ãšãã©å¶åŸ¡ãåãåããŸããããããã¯äžèŠã«ãªããŸããã ããã§ãéç解æã®å©ç¹ã確èªã§ããŸãã ããã°ã©ã äžã«ã©ã®ãããã®é »åºŠã§å¶åŸ¡ãååŸããŠãããã¹ãŠã®ã³ãŒãããã§ãã¯ããŸãã
ã»ãšãã©å¶åŸ¡ãããªãã³ãŒãããã§ãã¯ããäŸïŒ
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnProgress(...) { ... if (This->szMimeType[0] != _T('\0')) _tprintf(_T("Length: %I64u [%s]\n"), This->Size, This->szMimeType); else _tprintf(_T("Length: %ull\n"), This->Size); ... }
æãå¯èœæ§ãé«ãã®ã¯ãã³ãŒããæåã¯èª€ã£ãŠèšè¿°ãããŠããããšã§ãã 次ã«ãã¡ãã»ãŒãžãæ£ãã圢æãããŠããªãããšã«æ°ã¥ãããïŒ I64uããšæžããŠä¿®æ£ããŸããã ãããã圌ã¯è¿æã®ã³ãŒãã«æ³šæãæããŸããã§ããã ãããŠããŸã ééã£ããã©ãŒããããïŒ ullãããããŸãã ã©ããããã©ã³ãã¯ãã£ãã«åŒã³åºãããŸããã éç解æã§ã¯ãããèŠéããŸããã å®éã圌ã¯èŠéããŸããã§ããããã®äŸãå®èšŒã§ããããã§ãã
å¥ã®è¯ãäŸã¯ãReactOSã§èŠãå€æ°ã®ã¡ã¢ãªã¯ãªãŒã³ã¢ãããšã©ãŒã§ãã ãªããããªã«ããããããã®ããããããŸããã ã¡ã¢ãªããã£ã±ããã©ããããã¹ãããŠãã人ã¯ããŸããã ãŸãããããã®åçŽãªå Žæã§ééããç¯ãå¯èœæ§ãããããšãç解ããã®ã¯å°é£ã§ãã 次ã«ãé¢æ°å ã§äžæãããã¡ãã¯ãªã¢ããããã©ããã確èªããã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã ããã§ãéç解æã¯åã³æšæºã«éããŸããã ããã€ãã®äŸãæããŸãã å®éãäžå®ã®å€ã§é åãåãããšã©ãŒãå°ãªããšã13åã«ãŠã³ãããŸããã
#define MEMSET_BZERO(p,l) memset((p), 0, (l)) char *SHA384_End(SHA384_CTX* context, char buffer[]) { ... MEMSET_BZERO(context, sizeof(context)); ... }
sizeofïŒã³ã³ããã¹ãïŒã¯æ§é äœã§ã¯ãªããã€ã³ã¿ãŒã®ãµã€ãºãè¿ããããé åã®æåã®ãã€ãã®ã¿ãã¯ãªã¢ããŸãã
#define RtlFillMemory(Destination, Length, Fill) \ memset(Destination, Fill, Length) #define IOPM_FULL_SIZE 8196 HalpRestoreIopm(VOID) { ... RtlFillMemory(HalpSavedIoMap, 0xFF, IOPM_FULL_SIZE); ... }
RtlFillMemoryãã¯ãã䜿çšãããšãã«åŒæ°ãæ··åãããŸãã åŒã³åºãã¯æ¬¡ã®ããã«ãªããŸãã
RtlFillMemory(HalpSavedIoMap, IOPM_FULL_SIZE, 0xFF);
åã³ã¿ããšã¹ããŒã¹
ã³ã¡ã³ãã§ãã®ãããã¯ã«é¢ããæ°ããçœç±ããè°è«ãéå§ããªãããã«äºåã«ãé¡ãããããšæããŸãã æèŠãè¿°ã¹ãŸãã ããªãã¯åœŒã«åæããŠãåæããªããŠãããŸããŸããã ããããè°è«ãã䟡å€ã¯ãããŸããã
å解ã§ããªããã£ã³ãã2ã€ãããŸãã ã³ãŒãã§è¡šã䜿çšãã人ãããŸããããã«ãããã³ãŒãã®è¡šç€ºãèªåã§èª¿æŽã§ããããã«ãªããŸã[ 2 ]ã ä»ã®äººã¯ãããã¯ãŸã æ©èœãããã¿ãã䜿çšããåççãªçç±ã¯ãªããšèšããŸãã éèšããã¯ãæžåŒèšå®ãæãªããããåæ£ããããããã ãã§ãã ç§ã¯ãã®äžã«ããŸã[ 3 ]ã
奜ããªã ãã¿ããæ£ãã䜿çšããå¿ èŠããããšèšãã°ããã¹ãŠãããŸãããã§ãããã æ®å¿µãªãããããã¯ã1ã€ã®ãããžã§ã¯ãã§åç¬ã§äœæ¥ããå€ã®äžçã«çŽé¢ããŠããªã人ã ã«ãã£ãŠèšãããŠããŸãã éããŠãããããžã§ã¯ããåçŽã«å€§èŠæš¡ãªãããžã§ã¯ãã§ã¯ãã©ã®ãã©ãŒã ã§ãã¿ãã䜿çšã§ããå Žåãéåžžã®ã³ãŒãèšèšãå®çŸããããšã¯ã§ããŸããã
ç§ã¯æœè±¡çãªæšè«ãæ±ããŸããã ä»åã¯ãçžæã«è¯ãäŸã瀺ããŸãã ããã§ãReactOSã³ãŒãããã®ãããªäŸã«ãªããŸãã
ReactOSã³ãŒãã£ã³ã°æšæº[ 4 ]ã§ã¯ãçè«çãªèŠ³ç¹ããé©åãªã«ãŒã«ãèšè¿°ãããŠããŸãã
TABã®äœ¿çšã«é¢ããäžè¬çãªæ³šæïŒãã©ãŒãããã«ã¯TABã䜿çšããªãã§ãã ããã ã€ã³ãã³ãã®ã¿ã«ã¿ãã䜿çšãããã©ãŒãããã«ã¯ã¹ããŒã¹ã®ã¿ã䜿çšããŸãã
äŸïŒ NTSTATUS SomeApiïŒINã¿ã€ãParam1ã [ã¹ããŒã¹] INã¿ã€ãParam2ïŒ { [TAB] ULONG MyVar; [TAB] MyVar = 0; [TAB] ifïŒïŒMyVar == 3ïŒ&& [TAB] [sp]ïŒParam1 == TRUEïŒïŒ [TAB] { [TAB] [TAB] CallSomeFuncïŒïŒ; ...
ã¿ããã¡ã³ã¯å¹žãã§ãã ãã ããReactOSã®ãœãŒã¹ã³ãŒããéããšãå€ãã®å Žæã§ç ŽæããæžåŒã衚瀺ãããŸãã ãªãã§ïŒ
çãã¯ãã¡ããæããã§ãã TABãæŒãå Žæãšããã€ãã®ã¹ããŒã¹ãé 眮ããå ŽæãèŠããã®ã¯é£ããããããããäœæ¥ããå¯äžã®ãããžã§ã¯ãã§ã¯ãªãå Žåã ãããã£ãŠã人ã ã¯åžžã«ééããç¯ããŸãã ãããããªããçè«å®¶ã¯ããŸããããå®å家ã§ãªããã°ãªããŸããã äžè¬ã«ã¿ãã®äœ¿çšãçŠæ¢ããå¿ èŠããããŸãã ãããŠããã¹ãŠã®ãã®ããã¹ãŠåãã«ãªããéèšè¡šã䜿ãå§ããç¯äººã¯èŠã€ãããããªããææ¡ããããšãã§ããŸãã
ããã¯ãã³ãŒãã®èšèšã®åŸéã§ã¯ãããŸããïŒ ããã¯äžæ©åé²ã§ãïŒ ããã次ã®èªèã¬ãã«ã§ãã ã«ã¹ã¿ã ã€ã³ãã³ãã®çè«çãªçŸããã¯ãå®è·µãšäž¡ç«ããŸããã ãŸããã³ãŒããæ確ã«æ瀺ãã倧èŠæš¡ãªããŒã ã§éçºã容æã«ããããšãéèŠã§ãã Googleã¯ãããç解ããŠããŸãã ãããŠããããã®æšæºã¯ããã©ãŒãããã«ã¹ããŒã¹ã®ã¿ã䜿çšããŸã[ 5 ]ã ã¿ãã®äœ¿çšãæå±ãã人ã ã¯ãChromiumãéçºããäžæµã®å°é家ã®åæ£ããŒã ãã®ã£ãããæ£ç¢ºã«éžæããçç±ã«ã€ããŠããäžåºŠèããããšããå§ãããŸãã
ãããŠããäžåºŠã ã«ã¹ã¿ã ã€ã³ãã³ãã®çè«çãªçŸããã¯ãå®è·µãšäž¡ç«ããŸããã çè«ãããŸããããªããŠããçè«ãã©ãã»ã©çŸãããã¯é¢ä¿ãããŸããã ãããŠãããã¯ãŸãã«ReactOSã®å Žåã§ãã
ReactOSéçºããŒã ãæšæºãå€æŽããã¿ãã®äœ¿çšãåæ¢ããããšããå§ãããŸãã ã©ã®ã¿ãããšã©ãŒãšèŠãªãããã³ãŒãããåé€ãããå¿ èŠããããŸãã
ãšããã§ããã®æ¹æ³ã䜿çšãããšãReactOSã³ãŒãã§ãã®ãããªäžåèªãèŠã€ããããšãã§ããŸãã
BOOLEAN KdInitSystem(IN ULONG BootPhase, IN PLOADER_PARAMETER_BLOCK LoaderBlock) { ... /* Check if this is a comma, a space or a tab */ if ((*DebugOptionEnd == ',') || (*DebugOptionEnd == ' ') || (*DebugOptionEnd == ' ')) ... }
æåŸã®æ¯èŒã¯ãã¿ãæåãšã®æ¯èŒã§ãããã¹ããŒã¹ã§ã¯ãªãããã§ãã éåžžã®ã³ãŒãã¯ããïŒ* DebugOptionEnd == '\ t'ïŒãã®ããã«ãªããŸãã
ã¿ãã«é¢ãã泚æã ã¿ããæ£ãã䜿çšããæ¹æ³ãå床æããŠããã ãå¿ èŠã¯ãããŸããã ãããŠãããã¯ç§ã®ã³ãŒãã§ã¯ãããŸããã èŠãŠãã ãããéåžžã«å ·äœçãªReactOSãããžã§ã¯ãããããŸãã ã³ãŒãã®åœ¢åŒãäžé©åã§ãã æ°ããããã°ã©ããŒããããžã§ã¯ãã³ãŒããéãããšãå¯èœã«ãããšãã£ã¿ãŒèšå®ã§èšå®ããå¿ èŠã®ããã¿ãæåã®ãµã€ãºãæšæž¬ããªãã¢ã¯ã·ã§ã³ãèããŠãã ããã ãããã«æ£ããæžããªããã°ãªããªãã£ãããšãã粟ç¥ã®ææ³ã«ã¯ãå®çšçãªäŸ¡å€ã¯ãããŸããã
æžèªãªã¹ã
- ReactOS N79ãã¥ãŒã¹ãªãªãŒã¹ã Coverityã®éçåæã http://www.viva64.com/go.php?url=722
- ã³ãŒãã§ã¿ãã®ä»£ããã«ã¹ããŒã¹ã䜿çšããŸãã http://www.viva64.com/go.php?url=725
- ã³ãŒãã§ã¿ãã䜿çšããããã«ææºããæãæ¥ãŸããã http://www.viva64.com/go.php?url=726
- ReactOS ã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã http://www.viva64.com/go.php?url=724
- Google C ++ã¹ã¿ã€ã«ã¬ã€ãã http://www.viva64.com/go.php?url=679