Esempio n. 1
0
main() {
	int n;

loop0:
	stat(dot, &x);
	if((file = open(dotdot,0)) < 0) prname();
loop1:
	if((n = read(file,&y,16)) < 16) prname();
	if(y.jnum != x.inum)goto loop1;
	close(file);
	if(y.jnum == 1) ckroot();
	cat();
	chdir(dotdot);
	goto loop0;
}
Esempio n. 2
0
cat() {
	int i, j;

	i = -1;
	while(y.name[++i] != 0);
	if((off+i+2) > 511) prname();
	for(j=off+1; j>=0; --j) name[j+i+1] = name[j];
	off=i+off+1;
	name[i] = root[0];
	for(--i; i>=0; --i) name[i] = y.name[i];
}
Esempio n. 3
0
/* get the current working directory (the following 3 routines are from pwd.c) */
void pwd(void)
{
	for(off = 0;;) {
		if(stat(dot, &d) < 0) {
			fprintf(stderr, "pwd: cannot stat .!\n");
			exit(2);
		}
		if ((file = opendir(dotdot)) == NULL) {
			fprintf(stderr,"pwd: cannot open ..\n");
			exit(2);
		}
		if(fstat(file->dd_fd, &dd) < 0) {
			fprintf(stderr, "pwd: cannot stat ..!\n");
			exit(2);
		}
		if(chdir(dotdot) < 0) {
			fprintf(stderr, "pwd: cannot chdir to ..\n");
			exit(2);
		}
		if(d.st_dev == dd.st_dev) {
			if(d.st_ino == dd.st_ino) {
				prname();
				chdir(directory);
				return;
			}
			do
				if ((dir = readdir(file)) == NULL) {
					fprintf(stderr, "pwd: read error in ..\n");
					exit(2);
				}
			while (dir->d_ino != d.st_ino);
		}
		else do {
				if((dir = readdir(file)) == NULL) {
					fprintf(stderr, "pwd: read error in ..\n");
					exit(2);
				}
				stat(dir->d_name, &dd);
		} while(dd.st_ino != d.st_ino || dd.st_dev != d.st_dev);
		(void)closedir(file);
		if (cat()) {
			chdir(directory);
			return;
		}
	}
}
Esempio n. 4
0
int cat(void)
{
	register i, j;
	char *name = directory + 1;	/* I love C */

	i = -1;
	while (dir->d_name[++i] != 0) 
	if ((off+i+2) > MAXNAMLEN - 1) {
		prname();
		return 1;
	}
	for(j=off+1; j>=0; --j)
		name[j+i+1] = name[j];
	off=i+off+1;
	name[i] = '/';
	for(--i; i>=0; --i)
		name[i] = dir->d_name[i];
	return 0;
}
Esempio n. 5
0
PUBLIC void map_dmp()
{
  register struct proc *rp;
  vir_clicks base, limit, first, last;
  phys_bytes ltmp;

  printf("\r\nPROC   --TEXT---  --DATA---  --STACK-- SHADOW FLIP P  BASE   SIZE\r\n");
  for (rp = &proc[NR_TASKS]; rp < &proc[NR_TASKS+NR_PROCS]; rp++)  {
	if (rp->p_flags & P_SLOT_FREE) continue;
	first = rp->p_map[T].mem_phys;
	last = rp->p_map[S].mem_phys + rp->p_map[S].mem_len;
	ltmp = ((long) first << CLICK_SHIFT) + 512L;
	base = (vir_clicks) (ltmp/1024L);
	ltmp = (((long) (last-first) << CLICK_SHIFT) + 512L);
	limit = (vir_clicks) (ltmp/1024L);
	prname((int)(rp-proc));
	printf(" %4x %4x  %4x %4x  %4x %4x   %4x %4d %d %4dK %5dK\r\n", 
	    rp->p_map[T].mem_phys, rp->p_map[T].mem_len,
	    rp->p_map[D].mem_phys, rp->p_map[D].mem_len,
	    rp->p_map[S].mem_phys, rp->p_map[S].mem_len,
	    rp->p_shadow, rp->p_nflips, rp->p_physio, base, limit);
  }
}
Esempio n. 6
0
ckroot() {
	int i, n;

	if((n = stat(y.name,&x)) < 0) prname();
	i = x.devn;
	if((n = chdir(root)) < 0) prname();
	if((file = open(root,0)) < 0) prname();
loop:
	if((n = read(file,&y,16)) < 16) prname();
	if(y.jnum == 0) goto loop;
	if((n = stat(y.name,&x)) < 0) prname();
	if(x.devn != i) goto loop;
	x.i[0] =& 060000;
	if(x.i[0] != 040000) goto loop;
	if(y.name[0]=='.')if(((y.name[1]=='.') && (y.name[2]==0)) ||
				(y.name[1] == 0)) goto pr;
	cat();
pr:
	write(1,root,1);
	prname();
}
Esempio n. 7
0
/*===========================================================================*
 *				DEBUG routines here			     * 
 *===========================================================================*/
PUBLIC void p_dmp()
{
/* Proc table dump */

  register struct proc *rp;
  char *np;
  vir_clicks base, limit, first, last;
  phys_bytes ltmp, dst;
  int index;
  int i;
  char *cp;

  printf(
  "\r\nproc    pid   pc     sp   splow  flag  user    sys  base limit  recv command\r\n");

  dst = umap(proc_addr(SYSTASK), D, (vir_bytes)nbuff, (vir_bytes)NSIZE);

  for (rp = &proc[0]; rp < &proc[NR_PROCS+NR_TASKS]; rp++)  {
	if (rp->p_flags & P_SLOT_FREE) continue;
	first = rp->p_map[T].mem_phys;
	last = rp->p_map[S].mem_phys + rp->p_map[S].mem_len;
	ltmp = ((long) first << CLICK_SHIFT) + 512L;
	base = (vir_clicks) (ltmp/1024L);
	ltmp = (((long) last << CLICK_SHIFT) + 512L);
	limit = (vir_clicks) (ltmp/1024L);
	prname((int)(rp - proc));
	printf("%4d %6X  %6X %6X %6x %4D %6D  %4dK %4dK  ",
		rp->p_pid, (long)rp->p_reg.pc,
		(long)rp->p_reg.sp, (long)rp->p_splow,
		rp->p_flags, rp->user_time, rp->sys_time,
		base, limit);
	if (rp->p_flags == 0)
		printf("      ");
	else
		prname(NR_TASKS + rp->p_getfrom);

	/* Fetch the command string from the user process. */
	index = (int)(rp - proc) - NR_TASKS;
	if (index > LOW_USER && aout[index] != 0) {
		phys_copy(aout[index], dst, (long) NSIZE);
		nbuff[NSIZE] = 0;
		for (np = &nbuff[0]; np < &nbuff[NSIZE]; np++)
			if (*np <= ' ' || *np >= 0177) *np = 0;
		if (index == LOW_USER + 1)
			cp = "/bin/sh";
		else
			cp = nbuff;
		for(i=0;i<100;i++) 
			if(cp[i] == '\0')
				break;
		if(i > 6)
			printf("\r\n\t");
		printf("%s", cp);
	}
	printf("\r\n");
  }
#ifdef NEEDED
  printf("\r\nproc    callq sendlk mesbuf from nready pend blkd held alarm\r\n");
  for (rp = &proc[0]; rp < &proc[NR_PROCS+NR_TASKS]; rp++)  {
	if (rp->p_flags & P_SLOT_FREE) continue;
	prname((int)(rp - proc));
	printf(" %6X %6X %6X %4d %6X %4d %4d %4d %X\r\n",
		rp->p_callerq,
		rp->p_sendlink,
		rp->p_messbuf,
		rp->p_getfrom,
		rp->p_nextready,
		rp->p_pending,
		rp->p_int_blocked,
		rp->p_int_held,
		rp->p_alarm
	);
  }
  for (index = 0; index < NQ; index++) {
	printf("q=%d: ", index);
	for (rp = rdy_head[index]; rp != NIL_PROC; rp = rp->p_nextready)
		printf(" %d", (int)(rp-proc));
	printf("\r\n");
  }
  printf("held_head = 0x%X\r\n", held_head);
#endif NEEDED
  printf("\r\n");
}