int wmain(int argc, WCHAR **argv)
{
#if !defined(XRE_DONT_SUPPORT_XPSP2)
  WindowsCrtPatch::Init();
#endif

#if defined(_MSC_VER) && _MSC_VER < 1900 && defined(_M_X64)
  // Disable CRT use of FMA3 on non-AVX2 CPUs and on Win7RTM due to bug 1160148
  int cpuid0[4] = {0};
  int cpuid7[4] = {0};
  __cpuid(cpuid0, 0); // Get the maximum supported CPUID function
  __cpuid(cpuid7, 7); // AVX2 is function 7, subfunction 0, EBX, bit 5
  if (cpuid0[0] < 7 || !(cpuid7[1] & 0x20) || !mozilla::IsWin7SP1OrLater()) {
    _set_FMA3_enable(0);
  }
#endif

#ifndef XRE_DONT_PROTECT_DLL_LOAD
  mozilla::SanitizeEnvironmentVariables();
  SetDllDirectoryW(L"");
#endif

  char **argvConverted = new char*[argc + 1];
  if (!argvConverted)
    return 127;

  for (int i = 0; i < argc; ++i) {
    argvConverted[i] = AllocConvertUTF16toUTF8(argv[i]);
    if (!argvConverted[i]) {
      return 127;
    }
  }
  argvConverted[argc] = nullptr;

  // need to save argvConverted copy for later deletion.
  char **deleteUs = new char*[argc+1];
  if (!deleteUs) {
    FreeAllocStrings(argc, argvConverted);
    return 127;
  }
  for (int i = 0; i < argc; i++)
    deleteUs[i] = argvConverted[i];
#ifndef XRE_WANT_ENVIRON
  int result = main(argc, argvConverted);
#else
  // Force creation of the multibyte _environ variable.
  getenv("PATH");
  int result = main(argc, argvConverted, _environ);
#endif

  delete[] argvConverted;
  FreeAllocStrings(argc, deleteUs);

  return result;
}
示例#2
0
文件: obsolete.c 项目: mingpen/OpenNT
LOCAL uchar *AllocNewStr (TENTRY *OldEntry, ushort length)
{
	uchar	   *pNew;

	if ((length + LNGTHSZ) > POOL2SIZE) {
		pNew = Alloc (length + LNGTHSZ);
	}
	else if ((length + LNGTHSZ) > POOLSIZE) {
		pNew = Pool2Alloc ();
	}
	else {
		pNew = PoolAlloc ();
	}
	FreeAllocStrings (OldEntry);
	if ((length + LNGTHSZ) > POOL2SIZE) {
		OldEntry->flags.IsMalloced = TRUE;
	}
	else if ((length + LNGTHSZ) > POOLSIZE) {
		OldEntry->flags.IsPool2 = TRUE;
	}
	else {
		OldEntry->flags.IsPool = TRUE;
	}
	OldEntry->TypeString = pNew;
	return (pNew);
}
示例#3
0
文件: obsolete.c 项目: mingpen/OpenNT
LOCAL void C6CnvtBitfieldType (TENTRY *OldEntry)
{
	uchar *		pchTypeStr;
	uchar *		pchTypeStrStart;
	plfBitfield	pNewType;
	uchar * 	pchDest;
	ushort		usNTotal;			// New length of symbol including length field
	ushort		usNewLength;		// New paded length excluding length field.

	OldEntry->flags.IsNewFormat = TRUE;

	// calculate new length
	// M00SPEED These are all constants
	usNTotal = LNGTHSZ + sizeof(lfBitfield);
	usNewLength = usNTotal - LNGTHSZ;

	pchTypeStrStart = pchTypeStr = OldEntry->TypeString; // get the string
	pchTypeStr += 4;			// Advance to the length field

	// Get memory for new type
	pchDest = Alloc (usNewLength + LNGTHSZ);
	pNewType = (plfBitfield)(pchDest + LNGTHSZ);

	// Insert the new length and new type
	*((ushort *)pchDest) = usNewLength;
	pNewType->leaf = LF_BITFIELD;

	// Copy the length in bits of the object
	pNewType->length = *pchTypeStr++;

	// Copy the base type
	// Note that 0x7c was UNSINT and 0x7d was SGNINT, in CV3 days.

	DASSERT(*pchTypeStr == 0x7c || *pchTypeStr == 0x7d);
	DASSERT(pNewType->length <= 32);
	if (pNewType->length <= 16) {
		 pNewType->type = (*pchTypeStr++ == 0x7d) ? T_SHORT : T_USHORT;
	}
	else {
		 pNewType->type = (*pchTypeStr++ == 0x7d) ? T_LONG : T_ULONG;
	}

	// Copy bit position in the byte, word, ect.
	pNewType->position = *pchTypeStr++;

	// Change entry to point to the new string

	FreeAllocStrings (OldEntry);
	OldEntry->flags.IsMalloced = TRUE;
	OldEntry->TypeString = pchDest;

	pchDest += LNGTHSZ + sizeof (lfBitfield);

	DASSERT(pchDest == OldEntry->TypeString + *((ushort *)(OldEntry->TypeString)) + LNGTHSZ);
}
示例#4
0
int wmain(int argc, WCHAR **argv)
{
#ifndef XRE_DONT_PROTECT_DLL_LOAD
  mozilla::SanitizeEnvironmentVariables();
  SetDllDirectoryW(L"");
#endif

  char **argvConverted = new char*[argc + 1];
  if (!argvConverted)
    return 127;

  for (int i = 0; i < argc; ++i) {
    argvConverted[i] = AllocConvertUTF16toUTF8(argv[i]);
    if (!argvConverted[i]) {
      return 127;
    }
  }
  argvConverted[argc] = nullptr;

  // need to save argvConverted copy for later deletion.
  char **deleteUs = new char*[argc+1];
  if (!deleteUs) {
    FreeAllocStrings(argc, argvConverted);
    return 127;
  }
  for (int i = 0; i < argc; i++)
    deleteUs[i] = argvConverted[i];
#ifndef XRE_WANT_ENVIRON
  int result = main(argc, argvConverted);
#else
  // Force creation of the multibyte _environ variable.
  getenv("PATH");
  int result = main(argc, argvConverted, _environ);
#endif

  delete[] argvConverted;
  FreeAllocStrings(argc, deleteUs);

  return result;
}
示例#5
0
BOOL
WinLaunchChild(const wchar_t *exePath,
               int argc, char **argv,
               HANDLE userToken,
               HANDLE *hProcess)
{
  wchar_t** argvConverted = new wchar_t*[argc];
  if (!argvConverted)
    return FALSE;

  for (int i = 0; i < argc; ++i) {
      argvConverted[i] = reinterpret_cast<wchar_t*>(AllocConvertUTF8toUTF16(argv[i]));
    if (!argvConverted[i]) {
      FreeAllocStrings(i, argvConverted);
      return FALSE;
    }
  }

  BOOL ok = WinLaunchChild(exePath, argc, argvConverted, userToken, hProcess);
  FreeAllocStrings(argc, argvConverted);
  return ok;
}
示例#6
0
文件: obsolete.c 项目: mingpen/OpenNT
LOCAL void C6CnvtLabelType (TENTRY *OldEntry)
{
	uchar *		pchTypeStr;
	plfLabel	pNewType;
	uchar * 	pchDest;
	uchar * 	pchDestBase;		// The start of the new string
	ushort		usNTotal;			// New length of symbol including length field
	ushort		usNewLength;		// New paded length excluding length field.

	DASSERT(!OldEntry->flags.IsNewFormat);

	OldEntry->flags.IsNewFormat = TRUE;
	pchTypeStr = OldEntry->TypeString; // get the string

	// calculate new length
	// M00SPEED These are all constants
	usNTotal = LNGTHSZ + sizeof(lfLabel);
	usNewLength = usNTotal - LNGTHSZ;


	// Get memory for new type
	pchDest = Alloc (usNewLength + LNGTHSZ);
	pchDestBase = pchDest;
	pNewType = (plfLabel)(pchDest + LNGTHSZ);

	// Insert the new length and new type
	*((ushort *)pchDest) = usNewLength;
	pNewType->leaf = LF_LABEL;

	// 0x73 == old LF_FAR, 0x74 == old LF_NEAR
	//Make sure the code label is one of the two types
	DASSERT(*(pchTypeStr + 5) == 0x73 || *(pchTypeStr + 5) == 0x74);

	// Get the new type
	if (*(pchTypeStr + 5) == 0x73) {
		pNewType->mode = CV_LABEL_FAR;
	}
	else {
		pNewType->mode = CV_LABEL_NEAR;
	}

	pchDest += LNGTHSZ + sizeof (lfLabel);

	// Change entry to point to the new string

	FreeAllocStrings (OldEntry);
	OldEntry->flags.IsMalloced = TRUE;
	OldEntry->TypeString = pchDestBase;

	DASSERT(pchDest == OldEntry->TypeString + *((ushort *)(OldEntry->TypeString)) + LNGTHSZ);
}
int wmain(int argc, WCHAR **argv)
{
#ifndef XRE_DONT_PROTECT_DLL_LOAD
  mozilla::SanitizeEnvironmentVariables();
  SetDllDirectoryW(L"");
#endif

#ifdef XRE_WANT_DLL_BLOCKLIST
  SetupDllBlocklist();
#endif
  
  char **argvConverted = new char*[argc + 1];
  if (!argvConverted)
    return 127;

  for (int i = 0; i < argc; ++i) {
    argvConverted[i] = AllocConvertUTF16toUTF8(argv[i]);
    if (!argvConverted[i]) {
      return 127;
    }
  }
  argvConverted[argc] = NULL;

  // need to save argvConverted copy for later deletion.
  char **deleteUs = new char*[argc+1];
  if (!deleteUs) {
    FreeAllocStrings(argc, argvConverted);
    return 127;
  }
  for (int i = 0; i < argc; i++)
    deleteUs[i] = argvConverted[i];
  int result = main(argc, argvConverted);

  delete[] argvConverted;
  FreeAllocStrings(argc, deleteUs);

  return result;
}
BOOL
WinLaunchChild(const PRUnichar *exePath, int argc, char **argv, int needElevation)
{
  PRUnichar** argvConverted = new PRUnichar*[argc];
  if (!argvConverted)
    return FALSE;

  for (int i = 0; i < argc; ++i) {
    argvConverted[i] = AllocConvertUTF8toUTF16(argv[i]);
    if (!argvConverted[i]) {
      return FALSE;
    }
  }

  BOOL ok = WinLaunchChild(exePath, argc, argvConverted, needElevation);
  FreeAllocStrings(argc, argvConverted);
  return ok;
}
示例#9
0
文件: obsolete.c 项目: mingpen/OpenNT
LOCAL void C6CnvtCobol (TENTRY *OldEntry)
{
	uchar *		pchTypeStr;
	uchar * 	pchDest;
	ushort		usNTotal;			// New length of symbol including length field
	ushort		usNewLength;		// New paded length excluding length field.
	plfCobol1	pNewType;

	DASSERT(!OldEntry->flags.IsNewFormat);
	IsMFCobol = TRUE;
	OldEntry->flags.IsNewFormat = TRUE;
	pchTypeStr = OldEntry->TypeString;

	// calculate new length.  Since all we are doing is copying the old
	// data, we just increase the length by to allow for large record type

	usNTotal = LNGTHSZ + *((ushort UNALIGNED *)(pchTypeStr + 1)) + 1;
	usNewLength = usNTotal - LNGTHSZ;

	// Get memory for new type

	pchDest = Alloc (usNTotal);
	pNewType = (plfCobol1)(pchDest + LNGTHSZ);

	// Insert the new length and new type and copy the remainder of
	// of the type string over

	*((ushort *)pchDest) = usNewLength;
	pNewType->leaf = LF_COBOL1;
	memmove (&pNewType->data, pchTypeStr + 4, *((ushort UNALIGNED *)(pchTypeStr + 1)) - 1);

	// Change entry to point to the new string

	FreeAllocStrings (OldEntry);
	OldEntry->flags.IsMalloced = TRUE;
	OldEntry->TypeString = pchDest;
}
示例#10
0
文件: obsolete.c 项目: mingpen/OpenNT
LOCAL void C6CnvtArgList (ushort usArgList, ushort usCount)
{
	uchar *		pchTypeStr;
	uchar * 	pchTypeStrBase; 	// The base of the original type string
	plfArgList	plf;
	ushort		usNTotal;			// New length of symbol including length field
	ushort		usNewLength;		// New paded length excluding length field.
	ushort		usfInTmp;			// True if string stored in temporary buffer
	uchar * 	pchDest;
	ushort		i;
	uchar * 	pchDestBase;
	TENTRY *OldEntry;
	CV_typ_t	forward;

	OldEntry = GetTypeEntry ((CV_typ_t)(usArgList - 512), &forward);
	if (OldEntry->flags.IsNewFormat) {
	    return;
	}

	OldEntry->flags.IsNewFormat = TRUE;
	pchTypeStr = OldEntry->TypeString; // get the string
	pchTypeStrBase = pchTypeStr;
	DASSERT((pchTypeStr[3] == OLF_LIST) || (pchTypeStr[3] == OLF_ARGLIST) ||
	  ((usCount != 0) && (pchTypeStr[3] == OLF_NIL)));

	// calculate new length

	usNTotal = LNGTHSZ + offsetof (lfArgList, arg) + (sizeof(CV_typ_t) * usCount);
	usNewLength = usNTotal - LNGTHSZ;

	// Get some memory to put the result in

	if (usNewLength + LNGTHSZ <= LENGTH (pchTypeStr) + 3) {
		// Get some scratch memory so we don't wipe out the memory we are
		// are attempting to rewrite.

		usfInTmp = TRUE;
		pchDest = GetScratchString (usNewLength + LNGTHSZ);
	}
	else {
		usfInTmp = FALSE;
		pchDest = Alloc (usNewLength + LNGTHSZ);
	}
	pchDestBase = pchDest;

	pchTypeStr += 4;		// Skip to the arguments;
	*((ushort*)pchDest)++ = usNewLength;
	plf = (plfArgList) pchDest;
	plf->leaf = LF_ARGLIST;
	plf->count = usCount;

	// Loop through copying the indexes from the old to the new.

	for (i = 0; i < usCount; i++) {
		plf->arg[i] = getindex (pchTypeStr);
	}
	pchDest = (uchar *) &(plf->arg[i]);

	if (usfInTmp) {
		// Copy the new string over the old one
		memcpy (OldEntry->TypeString, pchDestBase, usNewLength + LNGTHSZ);
		DASSERT(pchDest == pchDestBase + usNewLength + LNGTHSZ);
	}
	else {
		FreeAllocStrings (OldEntry);
		OldEntry->flags.IsMalloced = TRUE;
		OldEntry->TypeString = pchDestBase;
		DASSERT(pchDest == OldEntry->TypeString + usNewLength + LNGTHSZ);
	}
}