ecostestutils.cpp
来自「基于ecos的redboot」· C++ 代码 · 共 269 行
CPP
269 行
//####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 "eCosSocket.h"
#include "eCosTestUtils.h"
#include "eCosThreadUtils.h"
#include "eCosTrace.h"
#include "TestResource.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;
}
// 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,bool bRequireResourceServer)
{
LPCTSTR psz=_tgetenv(_T("RESOURCESERVER"));
if(psz && !CTestResource::SetResourceServer(psz)){
_ftprintf(stderr,_T("Illegal host:port '%s' defined in RESOURCESERVER environment variable\n"),psz);
return false;
}
for(int i=1;i<argc;i++){
if(_TCHAR('-')==*argv[i]){
if(0==_tcscmp(argv[i],_T("-v"))){
CeCosTrace::EnableTracing((CeCosTrace::TraceLevel)MAX(CeCosTrace::TracingEnabled(),CeCosTrace::TRACE_LEVEL_TRACE));
// 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("-V"))){
CeCosTrace::EnableTracing((CeCosTrace::TraceLevel)MAX(CeCosTrace::TracingEnabled(),CeCosTrace::TRACE_LEVEL_VTRACE));
// 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])){
_ftprintf(stderr,_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("-O"))){
if(i+1<argc){
if(!CeCosTrace::SetError(argv[i+1])){
_ftprintf(stderr,_T("Failed to direct error 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("-r"))){
if(i+1<argc){
if(!CTestResource::SetResourceServer(argv[i+1])){
_ftprintf(stderr,_T("Illegal host:port '%s'\n"),argv[i+1]);
return false;
}
// 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);
}
}
}
if(!CeCosSocket::Init() || !CeCosTestPlatform::Load()){
return false;
}
#ifndef _WIN32
sigset_t mask;
// Clean out all the signals
sigemptyset(&mask);
// Add our sigpipe
sigaddset(&mask, SIGPIPE);
sigprocmask(SIG_SETMASK, &mask, NULL);
#endif
if(CTestResource::ResourceServerSet()){
if(CTestResource::Load()){
_ftprintf(stderr,_T("Connected to resource server %s\n"),(LPCTSTR)CTestResource::GetResourceServer());
} else {
_ftprintf(stderr,_T("Can't load from resource server %s\n"),(LPCTSTR)CTestResource::GetResourceServer());
return false;
}
} else if (bRequireResourceServer) {
_ftprintf(stderr,_T("You must specify a resource server using either the -r switch or by setting the RESOURCESERVER environment variable\n"));
return false;
}
return true;
}
void CeCosTestUtils::UsageMessage(bool bRequireResourceServer)
{
_ftprintf(stderr,
_T(" -o file : send standard output to named file\n")
_T(" -O file : send standard error to named file\n"));
if(bRequireResourceServer){
_ftprintf(stderr,
_T(" -r host:port : use this host:port as resourceserver [or set the RESOURCESERVER environment variable]\n")
);
}
_ftprintf(stderr,
_T(" -v : vebose mode - trace to stderr\n")
_T(" -V : very verbose mode - trace to stderr\n")
_T(" -version : print a version string\n")
);
}
const String CeCosTestUtils::HomeFile (LPCTSTR pszFile)
{
String strFile;
#ifdef _WIN32
LPCTSTR psz=_tgetenv(_T("HOMEDRIVE"));
if(psz){
strFile=psz;
psz=_tgetenv(_T("HOMEPATH"));
if(psz){
strFile+=psz;
}
if(_TCHAR('\\')!=strFile[strFile.size()-1]){
strFile+=_TCHAR('\\');
}
strFile+=pszFile;
}
#else // UNIX
LPCTSTR psz=_tgetenv(_T("HOME"));
if(psz){
strFile=psz;
strFile+=_TCHAR('/');
strFile+=pszFile;
}
#endif
return strFile;
}
bool CeCosTestUtils::Exists(LPCTSTR pszFile)
{
struct _stat buf;
return (0==_tstat(pszFile,&buf));
}
bool CeCosTestUtils::IsFile(LPCTSTR pszFile)
{
struct _stat buf;
return 0==_tstat(pszFile,&buf) && 0==(S_IFDIR&buf.st_mode);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?