diff options
Diffstat (limited to 'ln.c')
-rw-r--r-- | ln.c | 18 |
1 files changed, 17 insertions, 1 deletions
@@ -52,7 +52,7 @@ static int followLinks = TRUE; | |||
52 | 52 | ||
53 | extern int ln_main(int argc, char **argv) | 53 | extern 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 | } |