/* 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; } }