#else
    return unlink(path) == 0 ? 0 : -1;
#endif
}

char * RunCommand(const char* command);

char * Generate_UUID( NitsCallSite cs)
{
    char * uuidString;
    uuidString = (char*)RunCommand("cat /proc/sys/kernel/random/uuid | awk '{print toupper($0)}' | tr -d \"\n\"");

    return uuidString;
}

int GetComputerHostName(_Inout_updates_z_(length) TChar *buffer, unsigned int length)
{
#if defined(_MSC_VER)
    return !GetComputerName(buffer, (LPDWORD)&length);
#else
    return gethostname(buffer, length);
#endif
}

void PAL_SHA256Transform(_In_ void * pInputValue,
    _In_ unsigned int valueLength,
    _Out_ unsigned char hashedValue[SHA256TRANSFORM_DIGEST_LEN])
{
    SHA256_CTX Ctx;    
#if defined(_MSC_VER)
Beispiel #2
0
//******************************************************************************************
int32_t MasterComponent::initEXCEL(PSTR dataLine, float baseSensorRange)
{
	//----------------------------------------------------------
	// Component data was read in, so parse it. First, parse the
	// fields common to all components...
	PSTR next_token = nullptr;
	PSTR field = strtok_s(dataLine, ",", &next_token);
	int32_t ammoAmount = 1;
	health = 1;
	masterID = atoi(field);
	cLoadString(COMPONENT_NAME_START + masterID, name, MAXLEN_COMPONENT_NAME);
	cLoadString(COMPONENT_ABBR_START + masterID, abbreviation, MAXLEN_COMPONENT_ABBREV);
	field = strtok_s(nullptr, ",", &next_token);
	int32_t formIndex;
	for(formIndex = 0; ComponentFormString[formIndex] != nullptr; formIndex++)
		if(strcmp(field, ComponentFormString[formIndex]) == 0)
			break;
	if(ComponentFormString[formIndex] == nullptr)
		return(-1);
	if(strcmp(field, "undefined") == 0)
	{
		masterID = -1;
		return(NO_ERROR);
	}
	form = (ComponentFormType)formIndex;
	field = strtok_s(nullptr, ",", &next_token); // name, ignore
	field = strtok_s(nullptr, ",", &next_token);
	size = atof(field);
	field = strtok_s(nullptr, ",", &next_token);
	float recycleTime = atof(field);
	field = strtok_s(nullptr, ",", &next_token);
	float heat = (uint32_t)atof(field);
	field = strtok_s(nullptr, ",", &next_token);
	tonnage = atof(field);
	field = strtok_s(nullptr, ",", &next_token);
	float damage = atof(field);
	field = strtok_s(nullptr, ",", &next_token);
	CV = atof(field);
	field = strtok_s(nullptr, ",", &next_token);
	resourcePoints = atoi(field);
	field = strtok_s(nullptr, ",", &next_token);
	uint8_t rangeType = 255;
	_Check_return_wat_ _CRTIMP errno_t __cdecl _strlwr_s(_Inout_updates_z_(_Size) PSTR  _Str, _In_ size_t _Size);
	_strlwr(field);
	if(strcmp(field, "0") != 0)
	{
		if(strcmp(field, WeaponRangeString[WEAPON_RANGE_SHORT]) == 0)
			rangeType = WEAPON_RANGE_SHORT;
		else if(strcmp(field, WeaponRangeString[WEAPON_RANGE_MEDIUM]) == 0)
			rangeType = WEAPON_RANGE_MEDIUM;
		else if(strcmp(field, WeaponRangeString[WEAPON_RANGE_LONG]) == 0)
			rangeType = WEAPON_RANGE_LONG;
		else
			Fatal(0, " MasterComponent.initEXCEL: bad weapon range type in compbase ");
	}
	field = strtok_s(nullptr, ",", &next_token);
	for(size_t location = 0; location < NUM_BODY_LOCATIONS; location++)
	{
		if(field)
		{
			if(strcmp(field, "No") == 0)
				criticalSpacesReq[location] = -1;
			else if(strcmp(field, "Yes") == 0)
				criticalSpacesReq[location] = 0;
			else
				criticalSpacesReq[location] = atoi(field);
		}
		field = strtok_s(nullptr, ",", &next_token);
	}
	int32_t ammoType = WEAPON_AMMO_NONE;
	if(field)
	{
		if(strcmp(field, "1") == 0)
			ammoType = WEAPON_AMMO_LIMITED;
		else if(strcmp(field, "SRM") == 0)
			ammoType = WEAPON_AMMO_SRM;
		else if(strcmp(field, "LRM") == 0)
			ammoType = WEAPON_AMMO_LRM;
		else if(strcmp(field, "ST") == 0)
			ammoType = WEAPON_AMMO_ST;
	}
	field = strtok(nullptr, ",");
	int32_t flags = 0;
	if(field)
		flags = atoi(field);
	field = strtok_s(nullptr, ",", &next_token);
	int32_t specialEffect = 0;
	if(field)
		specialEffect = (char)atoi(field);
	field = strtok_s(nullptr, ",", &next_token);
	int32_t ammoMasterId = 0;
	if(field)
		ammoMasterId = (char)atoi(field);
	switch(form)
	{
		case COMPONENT_FORM_SIMPLE:
			//----------------------
			// No additional data...
			break;
		case COMPONENT_FORM_COCKPIT:
			break;
		case COMPONENT_FORM_SENSOR:
			stats.sensor.range = damage * baseSensorRange;
			break;
		case COMPONENT_FORM_ECM:
			stats.ecm.effect = damage;
			field = strtok_s(nullptr, ",", &next_token);
			stats.ecm.range = recycleTime;
			break;
		case COMPONENT_FORM_JAMMER:
			stats.jammer.effect = damage;
			break;
		case COMPONENT_FORM_PROBE:
			stats.probe.effect = damage;
			break;
		case COMPONENT_FORM_ACTUATOR:
			break;
		case COMPONENT_FORM_ENGINE:
			stats.engine.rating = 0;
			break;
		case COMPONENT_FORM_HEATSINK:
			stats.heatsink.dissipation = damage;
			break;
		case COMPONENT_FORM_WEAPON_ENERGY:
		case COMPONENT_FORM_WEAPON_MISSILE:
		case COMPONENT_FORM_WEAPON_BALLISTIC:
			stats.weapon.damage = damage;
			stats.weapon.recycleTime = recycleTime;
			stats.weapon.heat = heat;
			stats.weapon.ammoAmount = 1;
			stats.weapon.ammoType = ammoType;
			stats.weapon.range = rangeType;
			stats.weapon.specialEffect = specialEffect;
			stats.weapon.ammoMasterId = ammoMasterId;
			stats.weapon.flags = ammoType == WEAPON_AMMO_ST ? WEAPON_FLAG_STREAK : 0;
			stats.weapon.ammoAmount = ammoAmount;
			break;
		case COMPONENT_FORM_AMMO:
			stats.ammo.ammoPerTon = recycleTime;
			stats.ammo.explosiveDamage = damage;
			break;
		case COMPONENT_FORM_JUMPJET:
			stats.jumpjet.rangeMod = damage;
			break;
		case COMPONENT_FORM_CASE:
			break;
		case COMPONENT_FORM_LIFESUPPORT:
			break;
		case COMPONENT_FORM_GYROSCOPE:
			break;
		case COMPONENT_FORM_POWER_AMPLIFIER:
			break;
		case COMPONENT_FORM_BULK:
			break;
		default:
			//return(-2);
			NODEFAULT;
	}
	return(NO_ERROR);
}