diff options
author | Eric Andersen <andersen@codepoet.org> | 2001-02-15 23:12:05 +0300 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2001-02-15 23:12:05 +0300 |
commit | d69d2da165d46f8ba237fe1a3080ee05fe9c5319 (patch) | |
tree | 6f4c87cd7e6929f4d0d310e3132878bf4b847bd9 /ln.c | |
parent | b50d707633df4857aa3ade51611edaef2792a61b (diff) |
use perror_msg instead of perror to print the applet name.
-Erik
Diffstat (limited to 'ln.c')
-rw-r--r-- | ln.c | 49 |
1 files changed, 31 insertions, 18 deletions
@@ -41,42 +41,47 @@ static const int LN_NODEREFERENCE = 4; * linkDestName is where the link points to, * linkSrcName is the name of the link to be created. */ -static int fs_link(const char *link_DestName, const char *link_SrcName, const int flag) +static int fs_link(const char *link_destname, const char *link_srcname, + const int flag) { int status; - int srcIsDir; - char *srcName; + int src_is_dir; + char *src_name; - if (link_DestName==NULL) + if (link_destname==NULL) return(FALSE); - srcName = (char *) malloc(strlen(link_SrcName)+strlen(link_DestName)+1); + src_name = (char *) xmalloc(strlen(link_srcname)+strlen(link_destname)+1); - if (link_SrcName==NULL) - strcpy(srcName, link_DestName); + if (link_srcname==NULL) + strcpy(src_name, link_destname); else - strcpy(srcName, link_SrcName); + strcpy(src_name, link_srcname); if (flag&LN_NODEREFERENCE) - srcIsDir = is_directory(srcName, TRUE, NULL); + src_is_dir = is_directory(src_name, TRUE, NULL); else - srcIsDir = is_directory(srcName, FALSE, NULL); + src_is_dir = is_directory(src_name, FALSE, NULL); - if ((srcIsDir==TRUE)&&((flag&LN_NODEREFERENCE)==0)) { - strcat(srcName, "/"); - strcat(srcName, link_DestName); + if ((src_is_dir==TRUE)&&((flag&LN_NODEREFERENCE)==0)) { + char* srcdir_name; + + srcdir_name = xstrdup(link_destname); + strcat(src_name, "/"); + strcat(src_name, get_last_path_component(srcdir_name)); + free(srcdir_name); } if (flag&LN_FORCE) - unlink(srcName); + unlink(src_name); if (flag&LN_SYMLINK) - status = symlink(link_DestName, srcName); + status = symlink(link_destname, src_name); else - status = link(link_DestName, srcName); + status = link(link_destname, src_name); if (status != 0) { - perror(srcName); + perror_msg(src_name); return(FALSE); } return(TRUE); @@ -104,12 +109,20 @@ extern int ln_main(int argc, char **argv) show_usage(); } } + if (optind > (argc-1)) { + show_usage(); + } + if (optind == (argc-1)) { + if (fs_link(argv[optind], + get_last_path_component(argv[optind]), flag)==FALSE) + status = EXIT_FAILURE; + } while(optind<(argc-1)) { if (fs_link(argv[optind], argv[argc-1], flag)==FALSE) status = EXIT_FAILURE; optind++; } - return(status); + exit(status); } /* |