lkml.org 
[lkml]   [2005]   [Aug]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectHow can I get link target from a full path name.
Hello,
I would like to know how can I figure out where is a symbolic link
file pointing to.

for example:

/a.txt is a symbolic link to /root/a.txt , how can I get /root/a.txt
when I passing /a.txt
to my function?

I tought path_loookup and d_path is useful, and I wrote a function,
but the path_lookup
function always return -2 , which seems means that there is no such
file, but I am sure
the file exists.

Here is my code, any sugguestion? and thanks for your help.


int catfs_get_path_target ( const char * filename , char ** target_path ,
char ** target_mnt_point )
{
int error = 0;

char buffer[255];
char buffer2[255];

char * fullpath = NULL;
char * mnt_point = NULL;
struct nameidata nd;
struct file * filp = NULL;

if ( filename == NULL ) {
error = -1;
goto out;
}

error = path_lookup ( filename , 0 , &nd );

if ( error ) {
printk ( "Error:%d\n" , error );
error = -1;
goto out;
}

memset ( buffer , 0 , 255 );
memset ( buffer2 , 0 , 255 );

fullpath = d_path(filp->f_dentry,filp->f_vfsmnt,buffer,255) + 1;
mnt_point =
d_path(filp->f_vfsmnt->mnt_mountpoint,filp->f_vfsmnt->mnt_parent,buffer2,255);

if ( mnt_point[strlen(mnt_point)-1] != '/' ) {
strcat ( mnt_point , "/" );
}

*target_path = kmalloc ( sizeof(char) * strlen(fullpath) + 1 , GFP_KERNEL );

if ( *target_path == NULL ) {
*target_path = NULL;
error = -1;
goto out;
}

*target_mnt_point = kmalloc ( sizeof(char) * strlen(mnt_point) + 1
, GFP_KERNEL );

if ( *target_mnt_point == NULL ) {
*target_path = NULL;
error = -1;
goto out;
}

strcpy ( *target_path , fullpath );
strcpy ( *target_mnt_point , mnt_point );

path_release ( &nd );

out:
return error;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-08-24 09:45    [W:0.038 / U:0.620 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site