parent
01df2eb619
commit
55390e5a77
@ -0,0 +1,50 @@
|
|||||||
|
long sys_getcwd(char*buf,size_t size)
|
||||||
|
{
|
||||||
|
struct buffer_head *bh;
|
||||||
|
struct m_inode*n_inode,*f_inode;
|
||||||
|
struct dir_entry*dir;
|
||||||
|
char *tmp,*b;
|
||||||
|
int k,i;
|
||||||
|
tmp=(char*)malloc(256);
|
||||||
|
b=(char*)malloc(256);
|
||||||
|
n_inode=current->pwd;
|
||||||
|
if(n_inode==current->root)strcpy(tmp,"/");
|
||||||
|
bh=bread(n_inode->i_dev,n_inode->i_zone[0]);
|
||||||
|
while(n_inode!=current->root)
|
||||||
|
{
|
||||||
|
dir=(struct dir_entry*)(bh->b_data+sizeof(struct dir_entry));
|
||||||
|
f_inode=iget(n_inode->i_dev,dir->inode);
|
||||||
|
brelse(bh);
|
||||||
|
bh=bread(f_inode->i_dev,f_inode->i_zone[0]);
|
||||||
|
k=0;
|
||||||
|
while(k<f_inode->i_size)
|
||||||
|
{
|
||||||
|
dir=(struct dir_entry*)(bh->b_data+k);
|
||||||
|
if(dir->inode==n_inode->i_num)break;
|
||||||
|
k+=sizeof(struct dir_entry);
|
||||||
|
}
|
||||||
|
strcpy(b,"/");
|
||||||
|
strcat(b,dir->name);
|
||||||
|
strcat(b,tmp);
|
||||||
|
strcpy(tmp,b);
|
||||||
|
n_inode=f_inode;
|
||||||
|
}
|
||||||
|
brelse(bh);
|
||||||
|
if(strlen(tmp)>size)return NULL;
|
||||||
|
for(i=0;i<256;i++)
|
||||||
|
put_fs_byte(tmp[i],buf+i);
|
||||||
|
return (long)buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int sys_sleep(unsigned int count)
|
||||||
|
{
|
||||||
|
int a=jiffies;
|
||||||
|
sys_signal(SIGALRM,SIG_IGN);
|
||||||
|
sys_alarm(count);
|
||||||
|
sys_pause();
|
||||||
|
if((jiffies-a)/100==count)return 0;
|
||||||
|
else return -1;
|
||||||
|
}
|
Loading…
Reference in new issue