From c4ffb407d337884858cb0a20ab4a376f784eb3b4 Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Tue, 31 Jul 2012 14:02:55 +0200 Subject: [PATCH 01/17] bee-cache-update: Fix missing return after cachedir cleanup --- src/bee-cache-update.sh.in | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bee-cache-update.sh.in b/src/bee-cache-update.sh.in index b0e9b59..3f6f20a 100644 --- a/src/bee-cache-update.sh.in +++ b/src/bee-cache-update.sh.in @@ -48,6 +48,7 @@ function create_pkgbcfile() if [ ! -d "${PKGMETADIR}" ] ; then # cleanup cache if metadir does not exist rm -f "${PKGBCFILE}" "${PKGBCRFILE}" + return 0 elif [ ! -e "${CONTENTFILE}" ] ; then if [ -e "${PKGBCFILE}" ] ; then print_info "moving ${PKGBCFILE} to ${PKGBCRFILE}.." From 3acaec35c6a58c27e22578d8b6f83ad71c7801c0 Mon Sep 17 00:00:00 2001 From: Tobias Dreyer Date: Mon, 23 Jul 2012 10:26:54 +0200 Subject: [PATCH 02/17] filelist2content: remove trailing whitespaces --- src/filelist2content.sh.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/filelist2content.sh.in b/src/filelist2content.sh.in index 22b2d6e..9f8356f 100644 --- a/src/filelist2content.sh.in +++ b/src/filelist2content.sh.in @@ -113,7 +113,7 @@ function do_f2c() { exit 1 fi - echo -n ":md5=${md5%% *}" + echo -n ":md5=${md5%% *}" elif [ "${type}" = "symlink" ] ; then file="${file}//$(readlink ${root}${file})" elif [ "${type}" = "block" -o "${type}" = "char" ] ; then From 39edfc38699a9e56662f7efae71aa11ce7dc7aca Mon Sep 17 00:00:00 2001 From: Tobias Dreyer Date: Mon, 23 Jul 2012 10:46:34 +0200 Subject: [PATCH 03/17] filelist2content: strip $root from symlink targets this fixes issue #128 --- src/filelist2content.sh.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/filelist2content.sh.in b/src/filelist2content.sh.in index 9f8356f..9600b1d 100644 --- a/src/filelist2content.sh.in +++ b/src/filelist2content.sh.in @@ -115,7 +115,8 @@ function do_f2c() { echo -n ":md5=${md5%% *}" elif [ "${type}" = "symlink" ] ; then - file="${file}//$(readlink ${root}${file})" + target=$(readlink ${root}${file}) + file="${file}//${target#${root}}" elif [ "${type}" = "block" -o "${type}" = "char" ] ; then echo -n ":major=${major}" echo -n ":minor=${minor}" From 5cc97b7bd9e805adec46199ec8218c48f87359ca Mon Sep 17 00:00:00 2001 From: Tobias Dreyer Date: Thu, 7 Jun 2012 16:06:07 +0200 Subject: [PATCH 04/17] hooks: info-dir: fix missing value for BEE_METAFORMAT in old bee packages --- hooks/info-dir.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hooks/info-dir.sh b/hooks/info-dir.sh index 8c3d535..6d26038 100644 --- a/hooks/info-dir.sh +++ b/hooks/info-dir.sh @@ -44,7 +44,7 @@ fi . ${BEE_METADIR}/${pkg}/META -if [ ! "${BEEMETAFORMAT}" -ge 2 ] ; then +if [ ! "${BEEMETAFORMAT:=0}" -ge 2 ] ; then exit 0 fi @@ -63,4 +63,4 @@ case "${action}" in ${INSTALLINFO} --delete ${i} ${DIRFILE} >/dev/null done ;; -esac \ No newline at end of file +esac From a8e96e45398cd5e1deb43de6de80677a51f41d10 Mon Sep 17 00:00:00 2001 From: Tobias Dreyer Date: Thu, 2 Aug 2012 09:36:40 +0200 Subject: [PATCH 05/17] Makefile: install info-dir hook --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index a00d031..21baeaf 100644 --- a/Makefile +++ b/Makefile @@ -103,6 +103,7 @@ HELPER_HOOKS_SHELL+=gdk-pixbuf-query-loaders HELPER_HOOKS_SHELL+=mandb HELPER_HOOKS_SHELL+=systemd-tmpfiles HELPER_HOOKS_SHELL+=gconf-install-schemas +HELPER_HOOKS_SHELL+=info-dir MANPAGES+=bee.1 MANPAGES+=bee-check.1 From 138564e30340d5b48bc333028524b190f4711655 Mon Sep 17 00:00:00 2001 From: Matthias Ruester Date: Thu, 2 Aug 2012 09:06:59 +0200 Subject: [PATCH 06/17] Makefile: remove target 'compat' --- Makefile | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/Makefile b/Makefile index a00d031..25f3239 100644 --- a/Makefile +++ b/Makefile @@ -49,9 +49,6 @@ sed-rules = -e 's,@PREFIX@,${PREFIX},g' \ -e 's,@BEE_VERSION@,${BEE_VERSION},g' \ -e 's,@DATADIR@,${DATADIR},g' -sed-compat-bashlt4 = -e 'sx\$${\([a-zA-Z_]*\),,}x\$$(tr A-Z a-z <<<\$${\1})xg' \ - -e 'sx\$${\([a-zA-Z_]*\)^^}x\$$(tr a-z A-Z <<<\$${\1})xg' - PROGRAMS_C+=beecut PROGRAMS_C+=beeflock PROGRAMS_C+=beegetopt @@ -119,23 +116,12 @@ CONFIG_TEMPLATES+=fallback CONFIG_FILES+=skiplist CONFIG_FILES+=beerc -COMPAT_BASHLT4+=beesh.sh -COMPAT_BASHLT4+=bee-check.sh -COMPAT_BASHLT4+=buildtypes/autogen.sh -COMPAT_BASHLT4+=buildtypes/configure.sh -COMPAT_BASHLT4+=buildtypes/make.sh - .SUFFIXES: .in .sh .sh.in all: build build: shellscripts buildtypes cprograms manpages -compat: compat-bashlt4 - -compat-bashlt4: ${COMPAT_BASHLT4} - $(call quiet-command, sed ${sed-compat-bashlt4} -i ${COMPAT_BASHLT4}, "COMPAT $^" ) - SHELLSCRIPTS=$(PROGRAMS_SHELL) $(HELPER_BEE_SHELL) $(HELPER_SHELL) BEEVERSION_OBJECTS=beeversion.o bee_version_parse.o bee_version_compare.o bee_version_output.o From 975478f2e57a16a84381582bbbd63f75b783f89e Mon Sep 17 00:00:00 2001 From: Matthias Ruester Date: Thu, 2 Aug 2012 09:57:59 +0200 Subject: [PATCH 07/17] Makefile: remove compile option -lcrypt from bee-cache-inventory --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 25f3239..b866937 100644 --- a/Makefile +++ b/Makefile @@ -163,7 +163,7 @@ beeflock: $(addprefix src/, ${BEEFLOCK_OBJECTS}) $(call quiet-command,${CC} ${LDFLAGS} -o $@ $^,"LD $@") bee-cache-inventory: $(addprefix src/, ${BEECACHEINVENTORY_OBJECTS}) - $(call quiet-command,${CC} ${LDFLAGS} -lcrypt -o $@ $^,"LD $@") + $(call quiet-command,${CC} ${LDFLAGS} -o $@ $^,"LD $@") %.o: %.c $(call quiet-command,${CC} ${CFLAGS} -o $@ -c $^,"CC $@") From a132b52c490939ff169ab5f10377495baf2128c1 Mon Sep 17 00:00:00 2001 From: Matthias Ruester Date: Thu, 2 Aug 2012 10:00:46 +0200 Subject: [PATCH 08/17] Makefile: remove HELPER_BEE_C variable references make variable HELPER_BEE_C is not set anymore --- Makefile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index b866937..01b178a 100644 --- a/Makefile +++ b/Makefile @@ -137,7 +137,7 @@ bee_MANPAGES=$(addprefix manpages/,${MANPAGES}) bee_BUILDTYPES=$(addsuffix .sh,$(addprefix buildtypes/,$(BUILDTYPES))) shellscripts: $(addsuffix .sh,$(SHELLSCRIPTS)) $(LIBRARY_SHELL) -cprograms: $(PROGRAMS_C) ${HELPER_BEE_C} ${HELPER_C} +cprograms: $(PROGRAMS_C) ${HELPER_C} manpages: ${bee_MANPAGES} buildtypes: ${bee_BUILDTYPES} @@ -180,7 +180,6 @@ bee-cache-inventory: $(addprefix src/, ${BEECACHEINVENTORY_OBJECTS}) clean: $(call quiet-command,rm -f $(addsuffix .sh,${SHELLSCRIPTS}) $(LIBRARY_SHELL) $(HELPER_SHELL),"CLEAN .sh") $(call quiet-command,rm -f ${PROGRAMS_C},"CLEAN ${PROGRAMS_C}") - $(call quiet-command,rm -f ${HELPER_BEE_C},"CLEAN ${HELPER_BEE_C}") $(call quiet-command,rm -f ${HELPER_C},"CLEAN ${HELPER_C}") $(call quiet-command,rm -f src/*.o,"CLEAN c object files") $(call quiet-command,rm -f ${bee_MANPAGES},"CLEAN manpages") @@ -201,7 +200,7 @@ ${DESTDIR}${BINDIR}/%: % install-dir-bindir ${DESTDIR}${BINDIR}/%: %.sh install-dir-bindir $(call quiet-install,0755,$<,$@) -install-tools: $(addprefix ${DESTDIR}${LIBEXECDIR}/bee/bee.d/,${HELPER_BEE_SHELL} ${HELPER_BEE_C}) +install-tools: $(addprefix ${DESTDIR}${LIBEXECDIR}/bee/bee.d/,${HELPER_BEE_SHELL}) install-dir-tools: $(call quiet-installdir,0755,${DESTDIR}${LIBEXECDIR}/bee/bee.d) From 41ac607e2dc2be19a04da010bcaa44a3481bca70 Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Thu, 2 Aug 2012 14:39:56 +0200 Subject: [PATCH 09/17] bee-init: Allow empty url if output file is specified --- src/bee-init.sh.in | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/bee-init.sh.in b/src/bee-init.sh.in index 7e5d115..ab3e51e 100644 --- a/src/bee-init.sh.in +++ b/src/bee-init.sh.in @@ -155,8 +155,6 @@ function create_beefile_from_template { function initialize() { surl=${1} - shift - pname=${OPT_OUTPUT} DEFAULT_CONFIGURE_OPTIONS="${@}" @@ -398,7 +396,7 @@ while true ; do *) shift - if [ -z "${1}" ] ; then + if [ -z "${1}" -a -z "${OPT_OUTPUT}" ] ; then usage exit 1 fi From 3aaed0d02571d3615ab466802d0067a7cbb8cb0f Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Thu, 2 Aug 2012 16:41:05 +0200 Subject: [PATCH 10/17] beesh: Allow to rename package from within bee-file (quick fix version) this should be reimplemented later.. 8) --- src/beesh.sh.in | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/beesh.sh.in b/src/beesh.sh.in index 07b4557..cbe272f 100644 --- a/src/beesh.sh.in +++ b/src/beesh.sh.in @@ -534,7 +534,7 @@ function bee_pkg_pack() { ${D}/CONTENT ) beefilename=${BEE##*/} - beefiledest=${BEE_BEEDIR}/${beefilename} + beefiledest=${BEE_BEEDIR}/${PKGALLPKG}.bee print_info "-> saving bee-file ${beefilename} .." print_info "${COLOR_CYAN}${beefiledest}" @@ -543,7 +543,7 @@ function bee_pkg_pack() { mkdir -pv ${BEE_BEEDIR} fi - cp -v ${BEE} ${BEE_BEEDIR} + cp -v ${BEE} ${beefiledest} } @@ -793,9 +793,13 @@ PKGALLPKG= # now set PKGARCH if set or changed by user via ARCH=.. and not given via file.arch.bee : ${PKGARCH:=${ARCH}} +PKGFULLPKG=${PKGFULLNAME}-${PKGFULLVERSION}-${PKGREVISION} + # since PKGARCH is now known reconstruct PKGALLPKG : ${PKGALLPKG:=${PKGFULLPKG}.${PKGARCH}} +eval $(${BEE_BINDIR}/beeversion ${PKGALLPKG}) + config_handle_deprecated_beefile expand_prefix_variables config_export From afe8b5f55224359e599381655eba27f0673e3dd0 Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Thu, 2 Aug 2012 17:15:57 +0200 Subject: [PATCH 11/17] beesh: remove some deprecated variables --- src/beesh.sh.in | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/beesh.sh.in b/src/beesh.sh.in index cbe272f..e6c124f 100644 --- a/src/beesh.sh.in +++ b/src/beesh.sh.in @@ -764,12 +764,7 @@ if [ -z "${PKGNAME}" -o -z "${PKGVERSION}" -o -z "${PKGREVISION}" ] ; then exit 1 fi -PN=${PKGNAME} PV=( ${PKGVERSION[@]} ) -PS=${PKGEXTRAVERSION} -PR=${PKGREVISION} - -P=${PKGFULLNAME}-${PKGFULLVERSION} BEEPKGROOT="${BEE_TMP_BUILDROOT}/${PKGNAME}" BEEWORKDIR="${BEEPKGROOT}/${PKGFULLPKG}" From 61fba008669462947d2a36a24ac352a3c76d00d0 Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Thu, 2 Aug 2012 17:30:11 +0200 Subject: [PATCH 12/17] beesh: Fix build archive if pkg was renamed in bee-file --- src/beesh.sh.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/beesh.sh.in b/src/beesh.sh.in index e6c124f..ee1aff4 100644 --- a/src/beesh.sh.in +++ b/src/beesh.sh.in @@ -569,7 +569,7 @@ function bee_archivebuild() { --absolute-names \ ${S} ${B} \ ${bee_FETCHED_FILES[@]} \ - ${BEE_BEEDIR}/${BEE##*/} \ + ${BEE_BEEDIR}/${PKGALLPKG}.bee \ --transform="s,^${BEEWORKDIR},${PKGALLPKG}," \ --transform="s,^${F},${PKGALLPKG}/files," \ --transform="s,^${BEE_BEEDIR},${PKGALLPKG}/files," From 9ffe60c3151723798b96e8a0b973140d3b00921b Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Fri, 3 Aug 2012 10:39:20 +0200 Subject: [PATCH 13/17] bee-init: Fix missing shift Removing shift was a bad idea. The correct way is to check if we can shift and then shift the arguments. Fixes bug introduced in 41ac607 --- src/bee-init.sh.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bee-init.sh.in b/src/bee-init.sh.in index ab3e51e..dbaf4f9 100644 --- a/src/bee-init.sh.in +++ b/src/bee-init.sh.in @@ -155,6 +155,8 @@ function create_beefile_from_template { function initialize() { surl=${1} + [ ! -z "${surl}" ] && shift + pname=${OPT_OUTPUT} DEFAULT_CONFIGURE_OPTIONS="${@}" From dd06cbb30f38ed7ea58929311ee7a1aa55990984 Mon Sep 17 00:00:00 2001 From: Matthias Ruester Date: Fri, 3 Aug 2012 10:58:35 +0200 Subject: [PATCH 14/17] beelib: export BEE_BINDIR --- src/beelib.config.sh.in | 1 + 1 file changed, 1 insertion(+) diff --git a/src/beelib.config.sh.in b/src/beelib.config.sh.in index 9d63f6f..1cd1586 100644 --- a/src/beelib.config.sh.in +++ b/src/beelib.config.sh.in @@ -366,6 +366,7 @@ function config_export() { export BEE_TMP_TMPDIR export BEE_TMP_BUILDROOT + export BEE_BINDIR export BEE_SYSCONFDIR export BEE_DATADIR export BEE_LIBEXECDIR From 8da66ffb40fdb1f9a6564a10eacbcbdd7596bb2a Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Fri, 3 Aug 2012 12:13:55 +0200 Subject: [PATCH 15/17] beesh: Allow bee-file to partially rename packages Allow to prefix PKGNAME with 'something-' Allow to append something to/set PKGEXTRANAME (e.g. '_something') Allow to append something to/set PKGEXTRAVERSION (e.g. '_something') In addition you may still set PKGARCH=any as before. Changing anything else in the packagenames is currently not supported and yields to an error message. After renaming beeversion parses the new packagename again. This is a cleaner version of the feature added in 3aaed0d --- src/beesh.sh.in | 85 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 79 insertions(+), 6 deletions(-) diff --git a/src/beesh.sh.in b/src/beesh.sh.in index ee1aff4..e18f25b 100644 --- a/src/beesh.sh.in +++ b/src/beesh.sh.in @@ -600,6 +600,81 @@ function load_buildmagic() { fi } +function save_current_package_variables() { + oPKGNAME=${PKGNAME} + oPKGEXTRANAME=${PKGEXTRANAME} + oPKGFULLNAME=${PKGFULLNAME} + oPKGVERSION=${PKGVERSION} + oPKGEXTRAVERSION=${PKGEXTRAVERSION} + oPKGFULLVERSION=${PKGFULLVERSION} + oPKGREVISION=${PKGREVISION} +} + +function verify_new_package_variables() { + nPKGFULLNAME="${PKGNAME}${PKGEXTRANAME:+_${PKGEXTRANAME}}" + + if [ "${oPKGFULLNAME}" != "${PKGFULLNAME}" ] ; then + if [ "${oPKGFULLNAME}" != "${nPKGFULLNAME}" ] ; then + print_error "${BEE##*/}: Changing PKGFULLNAME and one of PKGNAME or PKGEXTRANAME is not supported." + exit 1 + fi + PKGNAME=${PKGFULLNAME//_*} + PKGEXTRANAME=${PKGFULLNAME#*_} + fi + PKGFULLNAME="${PKGNAME}${PKGEXTRANAME:+_${PKGEXTRANAME}}" + + nPKGFULLVERSION="${PKGVERSION}${PKGEXTRAVERSION:+_${PKGEXTRAVERSION}}" + if [ "${oPKGFULLVERSION}" != "${PKGFULLVERSION}" ] ; then + if [ "${oPKGFULLVERSION}" != "${nPKGFULLVERSION}" ] ; then + print_error "${BEE##*/}: Changing PKGFULLVERSION and one of PKGVERSION or PKGEXTRAVERSION is not supported." + exit 1 + fi + PKGVERSION=${PKGFULLVERSION//_*} + PKGEXTRAVERSION=${PKGFULLVERSION#*_} + fi + PKGFULLVERSION="${PKGVERSION}${PKGEXTRAVERSION:+_${PKGEXTRAVERSION}}" +} + +function extract_new_package_variables() { + if [ "${PKGNAME}" != "${oPKGNAME}" ] ; then + # pkgname changed! we allow prefixing 'anything-' to the packagename + if [ "${PKGNAME}" != "${PKGNAME/-${oPKGNAME}}-${oPKGNAME}" ] ; then + print_error "${BEE##*/}: Invalid change in PKGNAME(${PKGNAME}) detected. Only prefixing 'something-' is supported." + exit 1 + fi + print_info "${COLOR_YELLOW}PKGNAME changed from '${oPKGNAME}' to '${PKGNAME}'" + fi + if [ "${PKGEXTRANAME}" != "${oPKGEXTRANAME}" ] ; then + if [ ! -z "${oPKGEXTRANAME}" -a "${PKGEXTRANAME}" != "${oPKGEXTRANAME}_${PKGEXTRANAME#${oPKGEXTRANAME}_}" ] ; then + print_error "${BEE##*/}: Invalid change in PKGEXTRANAME(${PKGEXTRANAME}) detected. Only appending '_something' is supported." + exit 1 + fi + print_info "${COLOR_YELLOW}PKGEXTRANAME changed from '${oPKGEXTRANAME}' to '${PKGEXTRANAME}'" + fi + if [ "${PKGVERSION}" != "${oPKGVERSION}" ] ; then + print_error "${BEE##*/}: Invalid change in PKGVERSION(${PKGVERSION}) detected. Changing PKGVERSION is not supported." + exit 1 + fi + if [ "${PKGEXTRAVERSION}" != "${oPKGEXTRAVERSION}" ] ; then + if [ ! -z "${oPKGEXTRAVERSION}" -a "${PKGEXTRAVERSION}" != "${oPKGEXTRAVERSION}_${PKGEXTRAVERSION#${oPKGEXTRAVERSION}_}" ] ; then + print_error "${BEE##*/}: Invalid change in PKGEXTRAVERSION(${PKGEXTRAVERSION}) detected. Only appending '_something' is supported." + exit 1 + fi + print_info "${COLOR_YELLOW}PKGEXTRAVERSION changed from '${oPKGEXTRAVERSION}' to '${PKGEXTRAVERSION}'" + fi + if [ "${PKGREVISION}" != "${oPKGREVISION}" ] ; then + print_error "${BEE##*/}: Invalid change in PKGREVISION(${PKGREVISION}) detected. Changing PKGREVISION is not supported." + exit 1 + fi + + PKGFULLPKG=${PKGFULLNAME}-${PKGFULLVERSION}-${PKGREVISION} + + # since PKGARCH is now known reconstruct PKGALLPKG + : ${PKGALLPKG:=${PKGFULLPKG}.${PKGARCH}} + + eval $(${BEE_BINDIR}/beeversion ${PKGALLPKG}) +} + ############################################################################### ############################################################################### ############################################################################### @@ -782,18 +857,16 @@ D=${BEEWORKDIR}/image # clear PKGALLPKG since we can't trust PKGARCH in this state PKGALLPKG= +save_current_package_variables + # source file.bee . ${BEE} # now set PKGARCH if set or changed by user via ARCH=.. and not given via file.arch.bee : ${PKGARCH:=${ARCH}} -PKGFULLPKG=${PKGFULLNAME}-${PKGFULLVERSION}-${PKGREVISION} - -# since PKGARCH is now known reconstruct PKGALLPKG -: ${PKGALLPKG:=${PKGFULLPKG}.${PKGARCH}} - -eval $(${BEE_BINDIR}/beeversion ${PKGALLPKG}) +verify_new_package_variables +extract_new_package_variables config_handle_deprecated_beefile expand_prefix_variables From 160738e163370f9a396e1e330587581ceb47a0f5 Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Sun, 12 Aug 2012 20:01:16 +0200 Subject: [PATCH 16/17] manpages: Fix bee-update.1 manpage alias --- manpages/bee-update.1.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manpages/bee-update.1.in b/manpages/bee-update.1.in index c76da8a..0e18c8a 100644 --- a/manpages/bee-update.1.in +++ b/manpages/bee-update.1.in @@ -1 +1 @@ -.so bee-install.1 +.so man1/bee-install.1 From 67289f4e5b7dcf2b5e49088be82b126484d27b09 Mon Sep 17 00:00:00 2001 From: Matthias Ruester Date: Mon, 13 Aug 2012 10:03:33 +0200 Subject: [PATCH 17/17] bee-cache-inventory: get symlink destination with readlink() if missing --- src/bee-cache-inventory.c | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/bee-cache-inventory.c b/src/bee-cache-inventory.c index c97a325..588f3c5 100644 --- a/src/bee-cache-inventory.c +++ b/src/bee-cache-inventory.c @@ -59,6 +59,7 @@ struct item { char *type; char *filename; char *destination; + char free_destination; }; struct inventory_meta { @@ -146,6 +147,28 @@ int substitute(char *data, char from, char to) return 1; } +char *read_symlink(const char *filename) +{ + ssize_t ret; + char buffer[PATH_MAX + 1] = {0}; + char *copy; + + ret = readlink(filename, buffer, PATH_MAX); + + if (ret == -1) { + fprintf(stderr, "bee-cache-inventory: warning: " + "cannot restore empty symlink destination for file '%s': %m\n", filename); + return NULL; + } + + copy = strdup(buffer); + + if (!copy) + fprintf(stderr, "bee-cache-inventory: read_symlink: strdup: %m\n"); + + return copy; +} + BEE_STATIC_INLINE char *_extract_pattern(struct item *item, char **dest, char *hint, char *pattern, char size, int failok) { char *p; @@ -182,12 +205,17 @@ int do_separation(char *line, struct item *item) /* get possible symlink destination */ q = strstr(item->filename, "//"); if (q) { + *q = '\0'; item->destination = q + 2; + if (!*item->destination) { - fprintf (stderr, "bee-cache-inventory: syntax error: empty destination for file '%s'\n", item->filename); - return 0; + item->destination = read_symlink(item->filename); + + if (!item->destination) + item->destination = item->filename; + else + item->free_destination = 1; } - *q = '\0'; } *(p-6) = 0; @@ -344,6 +372,9 @@ int inventory_fhfh(FILE *infh, FILE *outfh, struct inventory_meta meta) print_item(outfh, item, meta); + if (item.free_destination) + /* symlink destination was generated by read_symlink */ + free(item.destination); } return 1;