Another patch from Matt Kraai <kraai@alumni.carnegiemellon.edu>:
>
> The following patch allows ln -n to function like GNU. It also fixes a
> typo with my previous patch to add support for ln FILE DIRECTORY. And
> it removes some code that checks the maximum length of the filenames. I
> can't figure out why that code is necessary. Anyone know?
>
> Matt
diff --git a/coreutils/ln.c b/coreutils/ln.c
index 3c45dee..71d84f06 100644
--- a/coreutils/ln.c
+++ b/coreutils/ln.c
@@ -92,13 +92,7 @@
linkName = argv[argc - 1];
- if (strlen(linkName) > BUFSIZ) {
- fprintf(stderr, name_too_long, "ln");
- exit FALSE;
- }
-
- linkIntoDirFlag = isDirectory(linkName, TRUE, NULL);
-
+ linkIntoDirFlag = isDirectory(linkName, followLinks, NULL);
if ((argc >= 3) && linkIntoDirFlag == FALSE) {
fprintf(stderr, not_a_directory, "ln", linkName);
exit FALSE;
@@ -108,27 +102,8 @@
dirName = linkName;
while (argc-- >= 2) {
-#if 0
- char srcName[BUFSIZ + 1];
- int nChars;
-#endif
int status;
- if (strlen(*argv) > BUFSIZ) {
- fprintf(stderr, name_too_long, "ln");
- exit FALSE;
- }
-
-#if 0
- if (followLinks == FALSE) {
- strcpy(srcName, *argv);
- } else {
- /* Warning! This can silently truncate if > BUFSIZ, but
- I don't think that there can be one > BUFSIZ anyway. */
- nChars = readlink(*argv, srcName, BUFSIZ);
- srcName[nChars] = '\0';
- }
-#endif
if (linkIntoDirFlag == TRUE) {
char *baseName = get_last_path_component(*argv);
linkName = (char *)malloc(strlen(dirName)+strlen(baseName)+2);
@@ -155,7 +130,7 @@
exit FALSE;
}
- if (linkIntoDirFlag)
+ if (linkIntoDirFlag == TRUE)
free(linkName);
argv++;