]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Don't spam timezone updates unless its actually changed.
authorRoy Marples <roy@marples.name>
Wed, 23 Apr 2014 13:03:01 +0000 (13:03 +0000)
committerRoy Marples <roy@marples.name>
Wed, 23 Apr 2014 13:03:01 +0000 (13:03 +0000)
dhcpcd-hooks/15-timezone
dhcpcd-run-hooks.in

index 23ae924c5afe055e5618924a834e6853af491e6a..0ccdc45b22646bff4ebb89896f86969684e428da 100644 (file)
@@ -31,11 +31,8 @@ set_zoneinfo()
                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
 }
 
index 365becf546d06c93af9ad1035fc48df60767ada0..2fcd2ea204bb4c3c0351e0ee6355ee8cc4a1dd6f 100644 (file)
@@ -116,20 +116,30 @@ remove_markers()
        fi
 }
 
+# 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 @@ change_file()
        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 @@ save_conf()
 # 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 @@ valid_domainname_list()
 # Check for a valid path
 valid_path()
 {
+
        case "$@" in
        *[![:alnum:]#%+-_:\.,@~\\/\[\]=\ ]*) return 1;;
        esac