aboutsummaryrefslogtreecommitdiff
path: root/ln.c
diff options
context:
space:
mode:
Diffstat (limited to 'ln.c')
-rw-r--r--ln.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/ln.c b/ln.c
index 57e412dc8..beaa58fac 100644
--- a/ln.c
+++ b/ln.c
@@ -52,7 +52,7 @@ static int followLinks = TRUE;
52 52
53extern int ln_main(int argc, char **argv) 53extern int ln_main(int argc, char **argv)
54{ 54{
55 char *linkName; 55 char *linkName, *dirName;
56 int linkIntoDirFlag; 56 int linkIntoDirFlag;
57 int stopIt = FALSE; 57 int stopIt = FALSE;
58 58
@@ -104,6 +104,9 @@ extern int ln_main(int argc, char **argv)
104 exit FALSE; 104 exit FALSE;
105 } 105 }
106 106
107 if (linkIntoDirFlag == TRUE)
108 dirName = linkName;
109
107 while (argc-- >= 2) { 110 while (argc-- >= 2) {
108#if 0 111#if 0
109 char srcName[BUFSIZ + 1]; 112 char srcName[BUFSIZ + 1];
@@ -126,6 +129,14 @@ extern int ln_main(int argc, char **argv)
126 srcName[nChars] = '\0'; 129 srcName[nChars] = '\0';
127 } 130 }
128#endif 131#endif
132 if (linkIntoDirFlag == TRUE) {
133 char *baseName = get_last_path_component(*argv);
134 linkName = (char *)malloc(strlen(dirName)+strlen(baseName)+2);
135 strcpy(linkName, dirName);
136 if(dirName[strlen(dirName)-1] != '/')
137 strcat(linkName, "/");
138 strcat(linkName,baseName);
139 }
129 140
130 if (removeoldFlag == TRUE) { 141 if (removeoldFlag == TRUE) {
131 status = (unlink(linkName) && errno != ENOENT); 142 status = (unlink(linkName) && errno != ENOENT);
@@ -143,6 +154,11 @@ extern int ln_main(int argc, char **argv)
143 perror(linkName); 154 perror(linkName);
144 exit FALSE; 155 exit FALSE;
145 } 156 }
157
158 if (linkIntoDirFlag)
159 free(linkName);
160
161 argv++;
146 } 162 }
147 return( TRUE); 163 return( TRUE);
148} 164}