Bump GPLv2+ to GPLv3+ for some files, clarify BSD 2-clause. Everything else stays under GPLv3+. New Linking Exception exempts resulting executables from LGPLv3 section 4. Add CONTRIBUTORS file to keep track of licensing. Remove 'Copyright Red Hat Inc' comments. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* module_info.cc
 | 
						|
 | 
						|
   Written by Egor Duda <deo@logos-m.ru>
 | 
						|
 | 
						|
This file is part of Cygwin.
 | 
						|
 | 
						|
This software is a copyrighted work licensed under the terms of the
 | 
						|
Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
 | 
						|
details. */
 | 
						|
 | 
						|
#include <stdlib.h>
 | 
						|
#include <windows.h>
 | 
						|
#include <psapi.h>
 | 
						|
#include "loadlib.h"
 | 
						|
 | 
						|
/* Returns full name of Dll, which is loaded by hProcess at BaseAddress.
 | 
						|
   Uses psapi.dll. */
 | 
						|
 | 
						|
char *
 | 
						|
psapi_get_module_name (HANDLE hProcess, LPVOID BaseAddress)
 | 
						|
{
 | 
						|
  DWORD len;
 | 
						|
  MODULEINFO mi;
 | 
						|
  unsigned int i;
 | 
						|
  HMODULE dh_buf[1];
 | 
						|
  HMODULE *DllHandle = dh_buf;
 | 
						|
  DWORD cbNeeded;
 | 
						|
  BOOL ok;
 | 
						|
 | 
						|
  char name_buf[MAX_PATH + 1];
 | 
						|
 | 
						|
  ok = EnumProcessModules (hProcess, DllHandle, sizeof (HMODULE), &cbNeeded);
 | 
						|
 | 
						|
  if (!ok || !cbNeeded)
 | 
						|
    goto failed;
 | 
						|
  DllHandle = (HMODULE *) malloc (cbNeeded);
 | 
						|
  if (!DllHandle)
 | 
						|
    goto failed;
 | 
						|
  ok = EnumProcessModules (hProcess, DllHandle, cbNeeded, &cbNeeded);
 | 
						|
  if (!ok)
 | 
						|
    {
 | 
						|
      free (DllHandle);
 | 
						|
      goto failed;
 | 
						|
    }
 | 
						|
 | 
						|
  for (i = 0; i < cbNeeded / sizeof (HMODULE); i++)
 | 
						|
    {
 | 
						|
      if (!GetModuleInformation (hProcess, DllHandle[i], &mi, sizeof (mi)))
 | 
						|
	{
 | 
						|
	  free (DllHandle);
 | 
						|
	  goto failed;
 | 
						|
	}
 | 
						|
 | 
						|
      len = GetModuleFileNameExA (hProcess, DllHandle[i], name_buf, MAX_PATH);
 | 
						|
      if (len == 0)
 | 
						|
	{
 | 
						|
	  free (DllHandle);
 | 
						|
	  goto failed;
 | 
						|
	}
 | 
						|
 | 
						|
      if (mi.lpBaseOfDll == BaseAddress)
 | 
						|
	{
 | 
						|
	  free (DllHandle);
 | 
						|
	  return strdup (name_buf);
 | 
						|
	}
 | 
						|
    }
 | 
						|
 | 
						|
failed:
 | 
						|
  return NULL;
 | 
						|
}
 |