示例#1
0
/* 
 * Updates the space-object to reflect what empire it is currently inside
 * announces both inbound and outbound and also when you enter and depart
 */
void up_empire (void)
{
	double dx, dy, dz;
	int index = 0;
	aspace_borders *si = NULL;

	for (index = 1; index <= im_count(border_map); index++)
	{
		si = im_find(border_map, index);
		
		if (si != NULL) {
			dx = (si->x - sdb[n].coords.x) / PARSEC;
			dy = (si->y - sdb[n].coords.y) / PARSEC;
			dz = (si->z - sdb[n].coords.z) / PARSEC;
			if ((dx * dx + dy * dy + dz * dz) < (si->radius * si->radius)) {
	
				if (sdb[n].move.empire != index) {
					if ((int)get_random_long(0,100) < ((int) (sdb[n].sensor.lrs_signature * sdb[n].sensor.visibility * 100.0))) {
						alert_exit_empire(n);
						alert_border_cross (n, sdb[n].move.empire, 0);
					}
					sdb[n].move.empire = index;
					if ((int)get_random_long(0,100) < ((int) (sdb[n].sensor.lrs_signature * sdb[n].sensor.visibility * 100.0))) {
						alert_enter_empire(n);
						alert_border_cross (n, sdb[n].move.empire, 1);
					}
				}
				break;
			}
		}
	}
	return;
}
示例#2
0
unsigned long arch_mmap_rnd(void)
{
	unsigned long rnd;

	if (mmap_is_ia32())
#ifdef CONFIG_COMPAT
		rnd = get_random_long() & ((1UL << mmap_rnd_compat_bits) - 1);
#else
		rnd = get_random_long() & ((1UL << mmap_rnd_bits) - 1);
#endif
	else
示例#3
0
static unsigned long mmap_rnd(void)
{
	unsigned long rnd = 0;

	if (current->flags & PF_RANDOMIZE) {
		/* 8MB for 32bit, 1GB for 64bit */
		if (is_32bit_task())
			rnd = get_random_long() % (1UL<<(23-PAGE_SHIFT));
		else
			rnd = get_random_long() % (1UL<<(30-PAGE_SHIFT));
	}
	return rnd << PAGE_SHIFT;
}
示例#4
0
文件: mmap.c 项目: 0x7f454c46/linux
unsigned long arch_mmap_rnd(void)
{
	unsigned long rnd;

#ifdef CONFIG_COMPAT
	if (TASK_IS_32BIT_ADDR)
		rnd = get_random_long() & ((1UL << mmap_rnd_compat_bits) - 1);
	else
#endif /* CONFIG_COMPAT */
		rnd = get_random_long() & ((1UL << mmap_rnd_bits) - 1);

	return rnd << PAGE_SHIFT;
}
static unsigned long mmap_rnd(void)
{
	unsigned long rnd = 0;

	if (current->flags & PF_RANDOMIZE) {
		if (mmap_is_ia32())
#ifdef CONFIG_COMPAT
			rnd = get_random_long() & ((1UL << mmap_rnd_compat_bits) - 1);
#else
			rnd = get_random_long() & ((1UL << mmap_rnd_bits) - 1);
#endif
		else
			rnd = get_random_long() & ((1UL << mmap_rnd_bits) - 1);
	}
示例#6
0
/*
 * Since get_random_int() returns the same value within a 1 jiffy window, we
 * will almost always get the same randomisation for the stack and mmap
 * region. This will mean the relative distance between stack and mmap will be
 * the same.
 *
 * To avoid this we can shift the randomness by 1 bit.
 */
static unsigned long mmap_rnd(void)
{
	unsigned long rnd = 0;

	if (current->flags & PF_RANDOMIZE) {
#ifdef CONFIG_COMPAT
		if (test_thread_flag(TIF_32BIT))
			rnd = get_random_long() & ((1UL << mmap_rnd_compat_bits) - 1);
		else
#endif
			rnd = get_random_long() & ((1UL << mmap_rnd_bits) - 1);
	}
	return rnd << (PAGE_SHIFT + 1);
}
static unsigned long mmap_rnd(void)
{
	unsigned long rnd = 0;

	/*
	*  8 bits of randomness in 32bit mmaps, 20 address space bits
	* 28 bits of randomness in 64bit mmaps, 40 address space bits
	*/
	if (current->flags & PF_RANDOMIZE) {
 #ifdef CONFIG_COMPAT
			rnd = get_random_long() & ((1UL << mmap_rnd_compat_bits) - 1);
 #else
			rnd = get_random_long() & ((1UL << mmap_rnd_bits) - 1);
 #endif
 		else
示例#8
0
static struct task_struct *dup_task_struct(struct task_struct *orig)
{
	struct task_struct *tsk;
	struct thread_info *ti;
	unsigned long *stackend;

	int err;

	prepare_to_copy(orig);

	tsk = alloc_task_struct();
	if (!tsk)
		return NULL;

	ti = alloc_thread_info(tsk);
	if (!ti) {
		free_task_struct(tsk);
		return NULL;
	}

 	err = arch_dup_task_struct(tsk, orig);
	if (err)
		goto out;

	tsk->stack = ti;

	err = prop_local_init_single(&tsk->dirties);
	if (err)
		goto out;

	setup_thread_stack(tsk, orig);
	stackend = end_of_stack(tsk);
	*stackend = STACK_END_MAGIC;	/* for overflow detection */

#ifdef CONFIG_CC_STACKPROTECTOR
	tsk->stack_canary = get_random_long();
#endif

	/* One for us, one for whoever does the "release_task()" (usually parent) */
	atomic_set(&tsk->usage,2);
	atomic_set(&tsk->fs_excl, 0);
#ifdef CONFIG_BLK_DEV_IO_TRACE
	tsk->btrace_seq = 0;
#endif
	tsk->splice_pipe = NULL;

	account_kernel_stack(ti, 1);

	return tsk;

out:
	free_thread_info(ti);
	free_task_struct(tsk);
	return NULL;
}
示例#9
0
/* Essentially the same as PowerPC.  */
static unsigned long mmap_rnd(void)
{
	unsigned long rnd = 0UL;

	if (current->flags & PF_RANDOMIZE) {
		unsigned long val = get_random_long();
		if (test_thread_flag(TIF_32BIT))
			rnd = (val % (1UL << (23UL-PAGE_SHIFT)));
		else
			rnd = (val % (1UL << (30UL-PAGE_SHIFT)));
	}
	return rnd << PAGE_SHIFT;
}
示例#10
0
文件: mmap.c 项目: 0x7f454c46/linux
static inline unsigned long brk_rnd(void)
{
	unsigned long rnd = get_random_long();

	rnd = rnd << PAGE_SHIFT;
	/* 8MB for 32bit, 256MB for 64bit */
	if (TASK_IS_32BIT_ADDR)
		rnd = rnd & 0x7ffffful;
	else
		rnd = rnd & 0xffffffful;

	return rnd;
}
示例#11
0
void arch_pick_mmap_layout(struct mm_struct *mm)
{
	unsigned long random_factor = 0UL;

	if ((current->flags & PF_RANDOMIZE) &&
	    !(current->personality & ADDR_NO_RANDOMIZE))

	random_factor = (get_random_long() % (1 << mmap_rnd_bits)) << PAGE_SHIFT;

	if (mmap_is_legacy()) {
		mm->mmap_base = TASK_UNMAPPED_BASE + random_factor;
		mm->get_unmapped_area = arch_get_unmapped_area;
		mm->unmap_area = arch_unmap_area;
	} else {
		mm->mmap_base = mmap_base(random_factor);
		mm->get_unmapped_area = arch_get_unmapped_area_topdown;
		mm->unmap_area = arch_unmap_area_topdown;
	}
}
示例#12
0
void arch_pick_mmap_layout(struct mm_struct *mm)
{
	unsigned long random_factor = 0UL;

	if (current->flags & PF_RANDOMIZE) {
		random_factor = get_random_long();
		random_factor = random_factor << PAGE_SHIFT;
		if (TASK_IS_32BIT_ADDR)
			random_factor &= 0xfffffful;
		else
			random_factor &= 0xffffffful;
	}

	if (mmap_is_legacy()) {
		mm->mmap_base = TASK_UNMAPPED_BASE + random_factor;
		mm->get_unmapped_area = arch_get_unmapped_area;
	} else {
		mm->mmap_base = mmap_base(random_factor);
		mm->get_unmapped_area = arch_get_unmapped_area_topdown;
	}
}
示例#13
0
void damage_main (int x, double damage)
{
	if (!sdb[x].main.exist || sdb[x].main.damage == -1.0)
		return;
	if (sdb[x].power.main != 0.0
	  && sdb[x].main.damage > 0.0
  	  && (sdb[x].main.damage - damage / sdb[x].main.gw <= 0.0)) {
		alert_main_overload(x);
	}
	sdb[x].main.damage -= damage / sdb[x].main.gw;
	if (sdb[x].main.damage < -1.0) {
		sdb[x].main.damage = -1.0;
		if (sdb[x].power.main != 0.0) {
			do_all_console_notify(x, tprintf(ansi_warn("%s core breach."), system_name[8]));
			damage_structure(x, sdb[x].power.main * (get_random_long(0,100) + 1.0));
		}
	}
	do_console_notify(x, console_engineering, console_damage, 0,
	  ansi_alert(tprintf("%s%s%s: %s %s",
	  ANSI_CYAN, system_name[8], ANSI_WHITE,
	  unparse_percent(sdb[x].main.damage),
	  unparse_damage(sdb[x].main.damage))));
	return;
}
示例#14
0
	return sysctl_legacy_va_layout;
}

unsigned long arch_mmap_rnd(void)
{
	unsigned long rnd;

	if (mmap_is_ia32())
#ifdef CONFIG_COMPAT
		rnd = get_random_long() & ((1UL << mmap_rnd_compat_bits) - 1);
#else
		rnd = get_random_long() & ((1UL << mmap_rnd_bits) - 1);
#endif
	else
		rnd = get_random_long() & ((1UL << mmap_rnd_bits) - 1);

	return rnd << PAGE_SHIFT;
}

static unsigned long mmap_base(unsigned long rnd)
{
	unsigned long gap = rlimit(RLIMIT_STACK);

	if (gap < MIN_GAP)
		gap = MIN_GAP;
	else if (gap > MAX_GAP)
		gap = MAX_GAP;

	return PAGE_ALIGN(TASK_SIZE - gap - rnd);
}
示例#15
0
int debug_space (int x)
{
	register int i, bug = 1;

/* --- OBJECT ------------------------------------------------------------- */

	if (sdb[x].structure.type <= 0) {
		sdb[x].structure.type = 0;
		bug = 0;
	}
	if (!SpaceObj(sdb[x].object) || !GoodObject(sdb[x].object)) {
		sdb[x].object = 0;
		sdb[x].structure.type = 0;
		bug = 0;
	}

/* --- LOCATION ----------------------------------------------------------- */

	sdb[x].location = 0;
	for (i = MIN_SPACE_OBJECTS ; i <= max_space_objects ; ++i)
		if (SpaceObj(sdb[i].object)) {
			if (Location(sdb[i].object) == sdb[x].object)
				sdb[i].location = x;
			if (Location(sdb[x].object) == sdb[i].object)
				sdb[x].location = i;
		}

/* --- MAIN --------------------------------------------------------------- */

	if (!sdb[x].main.exist || sdb[x].main.gw <= 0) {
		sdb[x].main.damage = 0.0;
		sdb[x].main.exist = 0;
		sdb[x].main.gw = 0.0;
		sdb[x].main.in = 0.0;
		sdb[x].main.out = 0.0;
		sdb[x].power.main = 0.0;
	}

/* --- AUX ---------------------------------------------------------------- */

	if (!sdb[x].aux.exist || sdb[x].aux.gw <= 0) {
		sdb[x].aux.damage = 0.0;
		sdb[x].aux.exist = 0;
		sdb[x].aux.gw = 0.0;
		sdb[x].aux.in = 0.0;
		sdb[x].aux.out = 0.0;
		sdb[x].power.aux = 0.0;
	}

/* --- BATT --------------------------------------------------------------- */

	if (!sdb[x].batt.exist || sdb[x].batt.gw <= 0) {
		sdb[x].batt.damage = 0.0;
		sdb[x].batt.exist = 0;
		sdb[x].batt.gw = 0.0;
		sdb[x].batt.in = 0.0;
		sdb[x].batt.out = 0.0;
		sdb[x].fuel.reserves = 0.0;
		sdb[x].power.batt = 0.0;
	}

/* --- ALLOCATE ----------------------------------------------------------- */

	if (!sdb[x].main.exist && !sdb[x].aux.exist && !sdb[x].batt.exist) {
		sdb[x].alloc.helm = 0.0;
		sdb[x].alloc.tactical = 0.0;
		sdb[x].alloc.operations = 1.0;
		sdb[x].alloc.movement = 0.0;
		sdb[x].alloc.shields = 0.0;
		for (i = 0 ; i < MAX_SHIELD_NAME ; ++i)
			sdb[x].alloc.shield[i] = 0.0;
		sdb[x].alloc.cloak = 0.0;
		sdb[x].alloc.beams = 0.0;
		sdb[x].alloc.missiles = 0.0;
		sdb[x].alloc.sensors = 0.0;
		sdb[x].alloc.ecm = 0.0;
		sdb[x].alloc.eccm = 0.0;
		sdb[x].alloc.transporters = 0.0;
		sdb[x].alloc.tractors = 0.0;
		sdb[x].alloc.miscellaneous = 1.0;
		sdb[x].power.total = 0.0;
		sdb[x].beam.in = 0.0;
		sdb[x].beam.out = 0.0;
		sdb[x].missile.in = 0.0;
		sdb[x].missile.out = 0.0;
	}

/* --- BEAM --------------------------------------------------------------- */

	if (!sdb[x].beam.exist || sdb[x].beam.banks <= 0) {
		sdb[x].beam.banks = 0;
		sdb[x].beam.exist = 0;
		sdb[x].beam.freq = 0.0;
		sdb[x].beam.in = 0.0;
		sdb[x].beam.out = 0.0;
		for (i = 0; i < MAX_BEAM_BANKS; ++i) {
			sdb[x].blist.name[i] = 0;
			sdb[x].blist.damage[i] = 0.0;
			sdb[x].blist.bonus[i] = 0;
			sdb[x].blist.cost[i] = 0;
			sdb[x].blist.range[i] = 0;
			sdb[x].blist.arcs[i] = 0;
			sdb[x].blist.active[i] = 0;
			sdb[x].blist.lock[i] = 0;
			sdb[x].blist.load[i] = 0;
			sdb[x].blist.recycle[i] = 0;
		}
	} else {
		if (sdb[x].beam.in < 0.0) {
			sdb[x].beam.in = 0.0;
			bug = 0;
		}
		if (sdb[x].beam.out < 0.0) {
			sdb[x].beam.out = 0.0;
			bug = 0;
		}
		if (sdb[x].beam.banks > MAX_BEAM_BANKS) {
			sdb[x].beam.banks = MAX_BEAM_BANKS;
			bug = 0;
		}
		if (sdb[x].beam.freq <= 1.0 || sdb[x].beam.freq >= 1000.0) {
			sdb[x].beam.freq = get_random_long(0,10000) / 100.0;
			bug = 0;
		}
		for (i = 0; i < MAX_BEAM_BANKS; ++i) {
			if (!(sdb[x].blist.arcs[i] & 1) && !(sdb[x].blist.arcs[i] & 4))
				sdb[x].blist.arcs[i] += 5;
			if (!(sdb[x].blist.arcs[i] & 2) && !(sdb[x].blist.arcs[i] & 8))
				sdb[x].blist.arcs[i] += 10;
			if (!(sdb[x].blist.arcs[i] & 16) && !(sdb[x].blist.arcs[i] & 32))
				sdb[x].blist.arcs[i] += 48;
		}
 		for (i = 0; i < MAX_BEAM_BANKS; ++i) {
			if (sdb[x].blist.recycle[i] < 1) {
 				sdb[x].blist.recycle[i] = 1;
// Jarek fixed this to not throw bugs for every non-existant weapon
				if(i < sdb[x].beam.banks)
	 				bug = 0;
 			}
 		}
	}

/* --- MISSILE ------------------------------------------------------------ */

	if (!sdb[x].missile.exist || sdb[x].missile.tubes <= 0) {
		sdb[x].missile.exist = 0;
		sdb[x].missile.freq = 0.0;
		sdb[x].missile.tubes = 0;
		sdb[x].missile.in = 0.0;
		sdb[x].missile.out = 0.0;
		for (i = 0; i < MAX_MISSILE_TUBES; ++i) {
			sdb[x].mlist.name[i] = 0;
			sdb[x].mlist.damage[i] = 0.0;
			sdb[x].mlist.warhead[i] = 0;
			sdb[x].mlist.cost[i] = 0;
			sdb[x].mlist.range[i] = 0;
			sdb[x].mlist.arcs[i] = 0;
			sdb[x].mlist.active[i] = 0;
			sdb[x].mlist.lock[i] = 0;
			sdb[x].mlist.load[i] = 0;
			sdb[x].mlist.recycle[i] = 0;
		}
	} else {
		if (sdb[x].missile.out < 0.0) {
			sdb[x].missile.out = 0.0;
			bug = 0;
		}
		if (sdb[x].missile.in < 0.0) {
			sdb[x].missile.in = 0.0;
			bug = 0;
		}
		if (sdb[x].missile.tubes > MAX_MISSILE_TUBES) {
			sdb[x].missile.tubes = MAX_MISSILE_TUBES;
			bug = 0;
		}
		if (sdb[x].missile.freq <= 1.0 || sdb[x].missile.freq >= 1000.0) {
			sdb[x].missile.freq = get_random_long(0,10000) / 100.0;
			bug = 0;
		}
		for (i = 0; i < MAX_MISSILE_TUBES; ++i) {
			if (!(sdb[x].mlist.arcs[i] & 1) && !(sdb[x].mlist.arcs[i] & 4))
				sdb[x].mlist.arcs[i] += 5;
			if (!(sdb[x].mlist.arcs[i] & 2) && !(sdb[x].mlist.arcs[i] & 8))
				sdb[x].mlist.arcs[i] += 10;
			if (!(sdb[x].mlist.arcs[i] & 16) && !(sdb[x].mlist.arcs[i] & 32))
				sdb[x].mlist.arcs[i] += 48;
		}
 		for (i = 0; i < MAX_MISSILE_TUBES; ++i) {
 			if (sdb[x].mlist.recycle[i] < 1) {
 				sdb[x].mlist.recycle[i] = 1;
// Jarek fixed this to not throw bugs for every non-existant weapon
				if(i < sdb[x].missile.tubes)
 					bug = 0;
 			}
 		}
	}

/* --- ENGINE ------------------------------------------------------------- */

	if (!sdb[x].engine.impulse_exist) {
		sdb[x].engine.impulse_exist = 0;
		sdb[x].engine.impulse_damage = 0.0;
		sdb[x].engine.impulse_max = 0.0;
		sdb[x].engine.impulse_cruise = 0.0;
		sdb[x].engine.impulse_hard_cruise = 0.0;  /* Anyasha - STDW - Hard Cruise Speed */
	}
	if (!sdb[x].engine.warp_exist) {
		sdb[x].engine.warp_exist = 0;
		sdb[x].engine.warp_damage = 0.0;
		sdb[x].engine.warp_max = 0.0;
		sdb[x].engine.warp_cruise = 0.0;
		sdb[x].engine.warp_hard_cruise = 0.0;  /* Anyasha - STDW - Hard Cruise Speed */
	}
	if (!sdb[x].engine.warp_exist && !sdb[x].engine.impulse_exist) {
		sdb[x].move.in = 0.0;
		sdb[x].move.out = 0.0;
	}

/* --- STRUCTURE ---------------------------------------------------------- */

	if (sdb[x].structure.displacement <= 0) {
		sdb[x].structure.displacement = 1;
		bug = 0;
	}
	if (sdb[x].structure.cargo_hold > sdb[x].structure.displacement) {
		sdb[x].structure.cargo_hold = sdb[x].structure.displacement;
		bug = 0;
	} else if (sdb[x].structure.cargo_hold < 0) {
		sdb[x].structure.cargo_hold = 0;
		bug = 0;
	}
	if (sdb[x].structure.max_structure <= 0) {
		sdb[x].structure.max_structure = 1;
		bug = 0;
	}
	if (sdb[x].structure.superstructure > sdb[x].structure.max_structure) {
		sdb[x].structure.superstructure = sdb[x].structure.max_structure;
		bug = 0;
	}
	if (sdb[x].structure.max_repair < 0) {
		sdb[x].structure.max_repair = 0;
		bug = 0;
	}
	if (sdb[x].structure.repair > sdb[x].structure.max_repair) {
		sdb[x].structure.repair = sdb[x].structure.max_repair;
		bug = 0;
	} else if (sdb[x].structure.repair < 0.0) {
		sdb[x].structure.repair = 0.0;
		bug = 0;
	}

/* --- SENSOR ------------------------------------------------------------- */

	if (!sdb[x].sensor.lrs_exist) {
		sdb[x].sensor.lrs_active = 0;
		sdb[x].sensor.lrs_damage = 0.0;
		sdb[x].sensor.lrs_resolution = 0.0;
	}
	if (!sdb[x].sensor.srs_exist) {
		sdb[x].sensor.srs_active = 0;
		sdb[x].sensor.srs_damage = 0.0;
		sdb[x].sensor.srs_resolution = 0.0;
	}
	if (!sdb[x].sensor.ew_exist) {
		sdb[x].sensor.ew_active = 0;
		sdb[x].sensor.ew_damage = 0.0;
	}
	if (!sdb[x].sensor.srs_exist && !sdb[x].sensor.lrs_exist) {
		sdb[x].sensor.contacts = 0;
		sdb[x].sensor.counter = 0;
		for (i = 0 ; i < MAX_SENSOR_CONTACTS ; ++i) {
			sdb[x].slist.sdb[i] = 0;
			sdb[x].slist.num[i] = 0;
			sdb[x].slist.lev[i] = 0.0;
		}
	}

/* --- SHIELD ------------------------------------------------------------- */
	if (!sdb[x].shield.exist || sdb[x].shield.ratio <= 0.0 || sdb[x].shield.maximum <= 0) {
		sdb[x].shield.ratio = 0.0;
		sdb[x].shield.maximum = 0;
		sdb[x].shield.freq = 0.0;
		sdb[x].shield.exist = 0;
		for (i = 0 ; i < MAX_SHIELD_NAME; ++i) {
			sdb[x].shield.damage[i] = 0.0;
			sdb[x].shield.active[i] = 0;
			sdb[x].shield.capacitor[i] = 0.0; /* line added for shield capacitors - Anya  STDW */
		}
	}

/* --- TECH --------------------------------------------------------------- */

	if (sdb[x].tech.firing <= 0.0) {
		sdb[x].tech.firing = 1.0;
		bug = 0;
	}
	if (sdb[x].tech.fuel <= 0.0) {
		sdb[x].tech.fuel = 1.0;
		bug = 0;
	}
	if (sdb[x].tech.stealth <= 0.0) {
		sdb[x].tech.stealth = 1.0;
		bug = 0;
	}
	if (sdb[x].tech.cloak <= 0.0) {
		sdb[x].tech.cloak = 1.0;
		bug = 0;
	}
	if (sdb[x].tech.sensors <= 0.0) {
		sdb[x].tech.sensors = 1.0;
		bug = 0;
	}
	if (sdb[x].tech.main_max <= 0.0) {
		sdb[x].tech.main_max = 1.0;
		bug = 0;
	}
	if (sdb[x].tech.aux_max <= 0.0) {
		sdb[x].tech.aux_max = 1.0;
		bug = 0;
	}
	if (sdb[x].tech.armor <= 0.0) {
		sdb[x].tech.armor = 1.0;
		bug = 0;
	}

/* --- MOVE --------------------------------------------------------------- */

	if (sdb[x].move.ratio <= 0.0) {
		sdb[x].move.ratio = 1.0;
		bug = 0;
	}

/* --- CLOAK -------------------------------------------------------------- */

	if (!sdb[x].cloak.exist || sdb[x].cloak.cost <= 0) {
		sdb[x].cloak.cost = 0;
		sdb[x].cloak.damage = 0.0;
		sdb[x].cloak.exist = 0;
		sdb[x].cloak.freq = 0.0;
		sdb[x].cloak.active = 0;
	} else {
		if (sdb[x].cloak.freq <= 1.0 || sdb[x].cloak.freq >= 1000.0) {
			sdb[x].cloak.freq = get_random_long(0,10000) / 100.0;
			bug = 0;
		}
	}

/* --- TRANS -------------------------------------------------------------- */

	if (!sdb[x].trans.exist) {
		sdb[x].trans.cost = 0;
		sdb[x].trans.damage = 0;
		sdb[x].trans.freq = 0;
		sdb[x].trans.active = 0;
		sdb[x].trans.d_lock = 0;
		sdb[x].trans.s_lock = 0;
	} else if (sdb[x].trans.freq <= 1.0 || sdb[x].trans.freq >= 1000.0) {
		sdb[x].trans.freq = get_random_long(0,10000) / 100.0;
		bug = 0;
	}
	if (sdb[x].trans.d_lock)
		if (sdb[x].trans.d_lock != x)
			if (sdb2contact(n, sdb[x].trans.d_lock) == SENSOR_FAIL) {
				sdb[x].trans.d_lock = 0;
			}
	if (sdb[x].trans.s_lock)
		if (sdb[x].trans.s_lock != x)
			if (sdb2contact(n, sdb[x].trans.s_lock) == SENSOR_FAIL) {
				sdb[x].trans.s_lock = 0;
			}

/* --- TRACT -------------------------------------------------------------- */

	if (!sdb[x].tract.exist) {
		sdb[x].tract.cost = 0;
		sdb[x].tract.damage = 0;
		sdb[x].tract.freq = 0;
		sdb[x].tract.active = 0;
		sdb[x].tract.lock = 0;
		sdb[x].status.tractoring = 0;
	} else if (sdb[x].tract.freq <= 1.0 || sdb[x].tract.freq >= 1000.0) {
		sdb[x].tract.freq = get_random_long(0,10000) / 100.0;
		bug = 0;
	}
	/* if (sdb[x].status.tractoring)
		if (sdb2contact(n, sdb[x].status.tractoring) == SENSOR_FAIL) {
			sdb[sdb[x].status.tractoring].status.tractored = 0;
			sdb[x].tract.lock = 0;
			sdb[x].status.tractoring = 0;
		} */
	/* if (sdb[x].status.tractored)
		if (sdb2contact(sdb[x].status.tractored, x) == SENSOR_FAIL) {
			sdb[sdb[x].status.tractored].status.tractoring = 0;
			sdb[sdb[x].status.tractored].tract.lock = 0;
			sdb[x].status.tractored = 0;
		} */

/* --- FUEL --------------------------------------------------------------- */

	if (sdb[x].fuel.antimatter < 0.0)
		sdb[x].fuel.antimatter = 0.0;
	if (sdb[x].fuel.deuterium < 0.0)
		sdb[x].fuel.deuterium = 0.0;
	if (sdb[x].fuel.reserves < 0.0)
		sdb[x].fuel.reserves = 0.0;
	if (sdb[x].fuel.antimatter > sdb2max_antimatter(x))
		sdb[x].fuel.antimatter = sdb2max_antimatter(x);
	if (sdb[x].fuel.deuterium > sdb2max_deuterium(x))
		sdb[x].fuel.deuterium = sdb2max_deuterium(x);
	if (sdb[x].fuel.reserves > sdb2max_reserve(x))
		sdb[x].fuel.reserves = sdb2max_reserve(x);

/* --- STATUS ------------------------------------------------------------- */

	if (sdb[x].structure.superstructure <= -sdb[x].structure.max_structure) {
		sdb[x].status.crippled = 2;
	} else if (sdb[x].structure.superstructure <= 0.0) {
		sdb[x].status.crippled = 1;
	} else {
		sdb[x].status.crippled = 0;
	}

/* --- other updates ------------------------------------------------------ */

	up_cochranes();
	up_turn_rate();
	up_vectors();
	up_empire();
	up_quadrant();
	up_resolution();
	up_signature(x);
	up_visibility();

	return bug;
}
示例#16
0
static unsigned long arch_rnd(unsigned int rndbits)
{
	if (!(current->flags & PF_RANDOMIZE))
		return 0;
	return (get_random_long() & ((1UL << rndbits) - 1)) << PAGE_SHIFT;
}
示例#17
0
static unsigned long arch_rnd(unsigned int rndbits)
{
	return (get_random_long() & ((1UL << rndbits) - 1)) << PAGE_SHIFT;
}