1
2
3
4
5#include "libbb.h"
6#include "bb_archive.h"
7
8void FAST_FUNC create_or_remember_link(llist_t **link_placeholders,
9 const char *target,
10 const char *linkname,
11 int hard_link)
12{
13 if (hard_link || target[0] == '/' || strstr(target, "..")) {
14 llist_add_to_end(link_placeholders,
15 xasprintf("%c%s%c%s", hard_link, linkname, '\0', target)
16 );
17 return;
18 }
19 if (symlink(target, linkname) != 0) {
20
21 bb_perror_msg_and_die("can't create %slink '%s' to '%s'",
22 "sym", linkname, target
23 );
24 }
25}
26
27void FAST_FUNC create_links_from_list(llist_t *list)
28{
29 while (list) {
30 char *target;
31
32 target = list->data + 1 + strlen(list->data + 1) + 1;
33 if ((*list->data ? link : symlink) (target, list->data + 1)) {
34
35 bb_error_msg_and_die("can't create %slink '%s' to '%s'",
36 *list->data ? "hard" : "sym",
37 list->data + 1, target
38 );
39 }
40 list = list->link;
41 }
42}
43