Make your own free website on Tripod.com
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

apicache.cpp

Go to the documentation of this file.
00001 /*
00002  * PeRdr - PE file disassembler
00003  * Copyright (C) 1999-2002 Frediano Ziglio
00004  * -----
00005  *
00006  * This program is free software; you can redistribute it and/or modify
00007  * it under the terms of the GNU General Public License as published by
00008  * the Free Software Foundation; either version 2 of the License, or
00009  * (at your option) any later version.
00010  *
00011  * This program is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with this program; if not, write to the Free Software
00018  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00019  * -----
00020  *
00021  * INFORMATION
00022  *   www: http://freddy77.tripod.com/perdr/
00023  *     e-mail: freddy77@angelfire.com
00024  *     */
00025 #include "global.h"
00026 #ifdef HAVE_HDRSTOP
00027 #pragma hdrstop
00028 #endif
00029 
00030 #include <algorithm>
00031 #include "apicache.h"
00032 #include "apiexp.h"
00033 
00034 using namespace std;
00035 
00036 bool ApiCache::GetFullApiName(std::string& out,const char* dllName,int ordinal)
00037 {
00038         // find dll
00039         // FIXME do a best search, dll should be ordered
00040         const DllFunctions *dll;
00041         for(dll = cachedDlls; ; )
00042         {
00043                 if (stricmp(dll->name,dllName)==0)
00044                         break;
00045                 ++dll;
00046                 if (dll == (cachedDlls + numCachedDlls) )
00047                         return false;
00048         }
00049 
00050         // find function
00051         const int *pend = dll->ords + dll->count;
00052         const int *p = lower_bound(dll->ords,pend,ordinal);
00053         if ( pend == p || *p != ordinal)
00054                 return false;
00055         out = dll->names[p-dll->ords];
00056         return true;
00057 }
00058 

Generated on Mon Jan 13 22:20:33 2003 for perdr by doxygen1.2.15