URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [ecos-2.0/] [tools/] [src/] [tools/] [ecostest/] [common/] [eCosTestUtils.cpp] - Rev 1765
Compare with Previous | Blame | View Log
//####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); }