# HG changeset patch # User Michael Spacefalcon # Date 1393738805 0 # Node ID e0ca3ca46a068ee3f2074e6ddf197bf6085d3008 # Parent 61c68a55f2a2be000c9493606c007af1fd71b1c9 fc-fsio: ll reads and shows symlinks diff -r 61c68a55f2a2 -r e0ca3ca46a06 rvinterf/etmsync/fsread.c --- a/rvinterf/etmsync/fsread.c Sun Mar 02 04:48:33 2014 +0000 +++ b/rvinterf/etmsync/fsread.c Sun Mar 02 05:40:05 2014 +0000 @@ -27,6 +27,7 @@ struct stat_info *stat; { char readonly; + char rlbuf[256]; if (stat->flags & OF_READONLY) readonly = 'r'; @@ -40,7 +41,9 @@ printf("d%c %s\n", readonly, pathname); return; case OT_LINK: - printf("l%c %s\n", readonly, pathname); + if (do_readlink_sancheck(pathname, rlbuf)) + strcpy(rlbuf, ""); + printf("l%c %s -> %s\n", readonly, pathname, rlbuf); return; default: printf("?%c %s\n", readonly, pathname); diff -r 61c68a55f2a2 -r e0ca3ca46a06 rvinterf/etmsync/symlink.c --- a/rvinterf/etmsync/symlink.c Sun Mar 02 04:48:33 2014 +0000 +++ b/rvinterf/etmsync/symlink.c Sun Mar 02 05:40:05 2014 +0000 @@ -123,3 +123,19 @@ } return(0); } + +do_readlink_sancheck(pathname, databuf) + char *pathname; + u_char *databuf; +{ + int rc, sz; + + rc = do_readlink(pathname, databuf, &sz); + if (rc) + return(rc); + if (sz < 2 || databuf[sz-1]) { + printf("error: readlink on %s returned garbage\n", pathname); + return(ERROR_TARGET); + } + return(0); +}