From d69d2da165d46f8ba237fe1a3080ee05fe9c5319 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 15 Feb 2001 20:12:05 +0000 Subject: [PATCH] use perror_msg instead of perror to print the applet name. -Erik --- coreutils/ln.c | 49 +++++++++++++++++++++++++++++++------------------ ln.c | 49 +++++++++++++++++++++++++++++++------------------ 2 files changed, 62 insertions(+), 36 deletions(-) diff --git a/coreutils/ln.c b/coreutils/ln.c index 9dc7f5d8c..e35bf7a03 100644 --- a/coreutils/ln.c +++ b/coreutils/ln.c @@ -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); } /* diff --git a/ln.c b/ln.c index 9dc7f5d8c..e35bf7a03 100644 --- a/ln.c +++ b/ln.c @@ -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); } /*