Mercurial > ecos
diff host/tools/ecostest/common/eCosTestUtils.cpp @ 76:435cced73e2f ecos-v1_3_1-release
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
| author | jlarmour |
|---|---|
| date | Tue, 28 Mar 2000 14:10:45 +0000 |
| parents | |
| children | 6736c52df507 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/host/tools/ecostest/common/eCosTestUtils.cpp @@ -0,0 +1,182 @@ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This program is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//================================================================= +// +// eCosTestUtils.cpp +// +// Utility functions +// +//================================================================= +//================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): sdf +// Contributors: sdf +// Date: 1999-04-01 +// Description: This class contains utility functions for use in the testing infrastructure +// Usage: +// +//####DESCRIPTIONEND#### + +#include "eCosStd.h" +#include "eCosTestUtils.h" +#include "eCosThreadUtils.h" +#include "eCosTrace.h" + +LPCTSTR const CeCosTestUtils::Tail(LPCTSTR const pszFile) +{ + LPCTSTR pszTail=_tcsrchr(pszFile,_TCHAR('/')); + if(0==pszTail){ + pszTail=_tcsrchr(pszFile,_TCHAR('\\')); + } + return (0==pszTail)?pszFile:pszTail+1; +} + +LPCTSTR CeCosTestUtils::HostName() +{ + static bool bFirstTime=true; + static String str; + static int nErr; + if(bFirstTime){ + char szMyname[256]; + nErr=gethostname(szMyname,sizeof szMyname); + bFirstTime=false; + if(0==nErr){ + str=String::CStrToUnicodeStr(szMyname); + } else { + str=_T(""); + } + } + return str; +} + +LPCTSTR CeCosTestUtils::SimpleHostName() +{ + static bool bFirstTime=true; + static String str; + if(bFirstTime){ + str=HostName(); + // Remove all after a '.' + LPCTSTR c=_tcschr(str,_TCHAR('.')); + if(c){ + str.SetLength(c-(LPCTSTR )str); + } + bFirstTime=false; + } + return str; +} + + + +// File iterator. Gets next file in directory, avoiding _T(".") and _T("..") +bool CeCosTestUtils::NextFile (void *&pHandle,String &str) +{ +#ifdef _WIN32 + WIN32_FIND_DATA fd; + while(FindNextFile((HANDLE)pHandle,&fd)){ + LPCTSTR pszName=fd.cFileName; +#else // UNIX + struct dirent *d; + while((d=readdir((DIR *)pHandle))){ + LPCTSTR pszName=d->d_name; +#endif + if(pszName[0]!='.'){ + str=pszName; + return true; + } + } + return false; + } + + // Start file iteration and return first file. +bool CeCosTestUtils::StartSearch (void *&pHandle,String &str) + { +#ifdef _WIN32 + WIN32_FIND_DATA fd; + pHandle=(void *)FindFirstFile (_T("*.*"), &fd); + if(INVALID_HANDLE_VALUE==(HANDLE)pHandle){ + ERROR(_T("Failed to open dir\n")); + return false; + } else if (fd.cFileName[0]=='.') { + return NextFile((HANDLE)pHandle,str); + } else { + str=String(fd.cFileName); + return true; + } +#else // UNIX + pHandle=(void *)opendir(_T(".")); + if(0==pHandle){ + ERROR(_T("Failed to open dir\n")); + return false; + } + return NextFile(pHandle,str); +#endif + } + + // End file iteration +void CeCosTestUtils::EndSearch (void *&pHandle) + { +#ifdef _WIN32 + FindClose((HANDLE)pHandle); +#else // UNIX + closedir((DIR *)pHandle); +#endif +} + + +// deal with common command-line actions +bool CeCosTestUtils::CommandLine(int &argc,TCHAR **argv) +{ + for(int i=1;i<argc;i++){ + if(_TCHAR('-')==*argv[i]){ + if(0==_tcscmp(argv[i],_T("-v"))){ + CeCosTrace ::EnableTracing(true); + // Shuffle the command line down to remove that which we have just seen: + for(TCHAR **a=argv+i;(a[0]=a[1]);a++); + argc--;i--; // counteract the increment + } else if(0==_tcscmp(argv[i],_T("-o"))){ + if(i+1<argc){ + if(!CeCosTrace::SetOutput(argv[i+1])){ + ERROR(_T("Failed to direct output to %s\n"),argv[i+1]); + } + // Shuffle the command line down to remove that which we have just seen: + for(TCHAR **a=argv+i;(a[0]=a[2]);a++); + argc-=2;i-=2; // counteract the increment + } else { + return false; + } + } else if(0==_tcscmp(argv[i],_T("-version"))){ + const TCHAR *pszTail=_tcsrchr(argv[0],_TCHAR('/')); + if(0==pszTail){ + pszTail=_tcsrchr(argv[0],_TCHAR('\\')); + } + _tprintf (_T("%s %s (%s %s)\n"), (0==pszTail)?argv[0]:pszTail+1,ECOS_VERSION, __DATE__, __TIME__); + exit(0); + } + } + } + return true; +} +
