Mercurial > hg > dhcpcd
changeset 2426:99ef653c9c42 draft
Don't spam timezone updates unless its actually changed.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Wed, 23 Apr 2014 13:03:01 +0000 |
| parents | 3593e5c160a7 |
| children | 41812c7656d0 |
| files | dhcpcd-hooks/15-timezone dhcpcd-run-hooks.in |
| diffstat | 2 files changed, 38 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/dhcpcd-hooks/15-timezone Wed Apr 23 11:41:01 2014 +0000 +++ b/dhcpcd-hooks/15-timezone Wed Apr 23 13:03:01 2014 +0000 @@ -31,11 +31,8 @@ return 1 fi - syslog info "timezone changed to $new_tzdb_timezone" - if [ -h "$localtime" ]; then - ln -sf "$zone_file" "$localtime" - else - cp "$zone_file" "$localtime" + if copy_file "$zone_file" "$localtime"; then + syslog info "timezone changed to $new_tzdb_timezone" fi }
--- a/dhcpcd-run-hooks.in Wed Apr 23 11:41:01 2014 +0000 +++ b/dhcpcd-run-hooks.in Wed Apr 23 13:03:01 2014 +0000 @@ -117,19 +117,29 @@ } # Compare two files. +comp_file() +{ + + [ -e "$1" ] || return 1 + [ -e "$2" ] || return 1 + + if type cmp >/dev/null 2>&1; then + cmp -s "$1" "$2" + elif type diff >/dev/null 2>&1; then + diff -q "$1" "$2" >/dev/null + else + # Hopefully we're only working on small text files ... + [ "$(cat "$1")" = "$(cat "$2")" ] + fi +} + +# Compare two files. # If different, replace first with second otherwise remove second. change_file() { + if [ -e "$1" ]; then - if type cmp >/dev/null 2>&1; then - cmp -s "$1" "$2" - elif type diff >/dev/null 2>&1; then - diff -q "$1" "$2" >/dev/null - else - # Hopefully we're only working on small text files ... - [ "$(cat "$1")" = "$(cat "$2")" ] - fi - if [ $? -eq 0 ]; then + if comp_file "$1" "$2"; then rm -f "$2" return 1 fi @@ -139,9 +149,24 @@ return 0 } +# Compare two files. +# If different, copy or link depending on target type +copy_file() +{ + + if [ -h "$2" ]; then + [ "$(readlink "$2")" = "$1" ] && return 1 + ln -sf "$1" "$2" + else + comp_file "$1" "$2" && return 1 + cat "$2" >"$1" + fi +} + # Save a config file save_conf() { + if [ -f "$1" ]; then rm -f "$1-pre.$interface" cat "$1" > "$1-pre.$interface" @@ -151,6 +176,7 @@ # Restore a config file restore_conf() { + [ -f "$1-pre.$interface" ] || return 1 cat "$1-pre.$interface" > "$1" rm -f "$1-pre.$interface" @@ -205,6 +231,7 @@ # Check for a valid path valid_path() { + case "$@" in *[![:alnum:]#%+-_:\.,@~\\/\[\]=\ ]*) return 1;; esac
