Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
system-timezone: keep looking for timezone name if it's not in region…
…/city format `plugins/datetime/system-timezone.c` finds timezone name out based on system timezone config - `/etc/localtime` file. Upstream python code in `cinnamon-setting calendar` expects timezone name in `Region/City` format. `/etc/localtime` file itself doesn't container this data. To figure the name out `plugins/datetime/system-timezone.c` code is searching in `SYSTEM_ZONEINFODIR` (/usr/share/zoneinfo) directory. The timezone name is determined based on filename path with `SYSTEM_ZONEINFODIR` prefix cut. there are multiple instances of the same timezone file under different names and subfolders in the `SYSTEM_ZONEINFODIR` folder. I. e a timezone may have several names, i. e. files in that `SYSTEM_ZONEINFODIR` folder. For example, `/usr/share/zoneinfo/Navajo` and `/usr/share/zoneinfo/America/Denver` are the same timezones. In some operating systems `/etc/localtime` is a symlink to `/usr/share/zoneinfo/Navajo` which is the symlink to `/usr/share/zoneinfo/America/Denver`. In other operating systems those may be hardlinks. In third operating system those files might be just simple copies of each other. Of course there might be a combination of all those scenarios. The code in `plugins/datetime/system-timezone.c` does its best to determine timezone name by following links, comparing files content, etc. It covers those different scenarios with sym-, hard- links, copied, etc described above. This patch is for the case when all timezone files are copies. Currently `recursive_compare()` in `plugins/datetime/system-timezone.c` gives up when it finds first copy of `/etc/localtime` under `SYSTEM_ZONEINFODIR` folder. Which is unfortunately `/usr/share/zoneinfo/Navajo` in my example, not `/usr/share/zoneinfo/America/Denver`. So upstream python code in `cinnamon-setting calendar` gets timezone name as `Navajo`, while it expects rather `America/Denver`. Fix it by checking if timezone name has a slash "/" in its name. If it doesn't then keep running `recursive_compare()` against `SYSTEM_ZONEINFODIR` (/usr/share/zoneinfo) directory to find a better name.
- Loading branch information