123456789101112131415161718192021222324252627282930313233343536373839404142 |
- /* vi: set sw=4 ts=4: */
- /*
- * Licensed under GPLv2 or later, see file LICENSE in this source tree.
- */
- #include "libbb.h"
- #include "bb_archive.h"
- void FAST_FUNC create_or_remember_link(llist_t **link_placeholders,
- const char *target,
- const char *linkname,
- int hard_link)
- {
- if (hard_link || target[0] == '/' || strstr(target, "..")) {
- llist_add_to_end(link_placeholders,
- xasprintf("%c%s%c%s", hard_link, linkname, '\0', target)
- );
- return;
- }
- if (symlink(target, linkname) != 0) {
- /* shared message */
- bb_perror_msg_and_die("can't create %slink '%s' to '%s'",
- "sym", linkname, target
- );
- }
- }
- void FAST_FUNC create_links_from_list(llist_t *list)
- {
- while (list) {
- char *target;
- target = list->data + 1 + strlen(list->data + 1) + 1;
- if ((*list->data ? link : symlink) (target, list->data + 1)) {
- /* shared message */
- bb_error_msg_and_die("can't create %slink '%s' to '%s'",
- *list->data ? "hard" : "sym",
- list->data + 1, target
- );
- }
- list = list->link;
- }
- }
|