From patchwork Mon May 19 07:19:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrea Ricchi X-Patchwork-Id: 4039 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id B12C03F13D for ; Mon, 19 May 2025 09:19:22 +0200 (CEST) Received: by mail-ed1-f71.google.com with SMTP id 4fb4d7f45d1cf-601aa0cb934sf1074588a12.3 for ; Mon, 19 May 2025 00:19:22 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1747639162; cv=pass; d=google.com; s=arc-20240605; b=BB6Nf3eXp69QctD6toYysKKUu+5uHHIqNxU2JVAfjwmrl5iIlOgMWbVQGJl7TE+EV/ lnjWFY2XbJ/D32+FCW7IYgtKQwFwKDiBdzRAPqPpKoGl9iiEvToOi02TF+m0ilmy7r9m 4KPGed86D9U5K+5vRui+wF9gHWOBz0LonIXJUYfY35uA0XuztVObpyMn3OAQ9E3O7KML hcl2NUW4RXB6CyYeRAwu0W1f0cdI3lR9gKfmxZgley9JLIZYsccmRaikXTEMj4n2tr1X xZQVXHJlkd7PBbFVOmFiDnQOjHMjI9WTPi/56gxfnMeap1W9jcYOgEblgqKNfibjHzup u6NA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:message-id:date:subject:cc:to :from:dkim-signature; bh=N4K0vLxYpuJQmOUqnFsLO8OZgz8r37rsJ5oVGwt7tsw=; fh=STO6ky9nneJuxVlA9UwH/RkhL3wPh/txtZCenihceV8=; b=BuzmPrz1KZjjhdKKJa2wh+EHiCK9qAVtVTLajc5vTWtSJFiJeLJm0rgqChtUVaJKO8 OA2OjMwZe9WS922Nlot0ll6ssrYpdl1p4EYhs18CcAs3GJBESxUxDLC5x3FoBWIrjgYa ja+FzlJWyeIPu8F38z2H514DAruZcYmYl1bldA/IQgkEYnzBMuqo4U5DCanmiUGNUXyd KcQ41hjxL2ZWES/Ic4heoteu4hLWnC0Qo4YX9mhYxi82p1IGiYxmsOZNn62TKcP7QWU7 ktgXrrfaE/G5VLwq1OpF0/yRn1T76BWKo8DDQcQ1gjmeSGrWXB3lKqx5xnolsalDrfyX igXw==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=l39eDMGb; spf=pass (google.com: domain of andrea.ricchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=andrea.ricchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; t=1747639162; x=1748243962; darn=patchwork.amarulasolutions.com; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:message-id:date:subject:cc:to:from :from:to:cc:subject:date:message-id:reply-to; bh=N4K0vLxYpuJQmOUqnFsLO8OZgz8r37rsJ5oVGwt7tsw=; b=CuIrIBIv+5GbgkpzR/I3mrhwY5CbNR6efZUlAwh9RiVvrEWDJcH+6SzA2Ic0sPqB/O ACwNiUlsRr7lx0SwgPDVgoVAtwNXRoJgzZVSaQXwpn7TVGfdtBnQ9ls/OtaEoYX9tSH1 S6p3cZJEYh1AGHrm+8Sm0KKLRezUqKCX+lk9o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747639162; x=1748243962; h=list-unsubscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :message-id:date:subject:cc:to:from:x-beenthere:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=N4K0vLxYpuJQmOUqnFsLO8OZgz8r37rsJ5oVGwt7tsw=; b=PjF3np+xfEn8FKa6r/IC+ePbyxTGoB/ayKts5+l4GaMj9UDsuTuv6DSZRfAalMwO3n w678jT3HT8M0IIesxE3vSKhDX8ZrpIisU3o5yH04liqIJ60MLzCqjVpwRQmI8OF+T7FE ZYNy9fBSgKEdk0G/aHRDaiiV9dS7BL1EgCJtTHJCq7Nc66l5HaX8A2gzAV13q6DYBaH7 0lAdE3Cwn34BZ/hcdguVYstwEFapte63KzX3kc2g9AXcB/1h4ERRAlK2D0PETsDaeAdK 2c1vPI9a4rFCo8T5PKFkiVpcOV2HoEKxzPkZWWe5fYolpotmqLi1cVFR0If/xXCH/8Eg OsnA== X-Forwarded-Encrypted: i=2; AJvYcCXcpvf7jDQ7sev44njNB4rKrGp/32ufH6Z09ou+Z6GMmwcf6KUwkSqq6+xZARjAcm1O0GrVX2tagq788jkS@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0YwtZmJdy/iMT/25BePtUWGalyrVTMMgbqr165FgF+VmqgA7PXfJ J2O2z/VfRLi22BxIrN+tRqwDKwrF0631f332e23uF4dleMfwcIJvKmt0VGbZDCDCRdAPwg== X-Google-Smtp-Source: AGHT+IFEqXErbrhJyjIrF/I4pwyEU47XaAsaubLOk9ePZx3pZSZSXotKqScpouJ2Srh/aLR5r2q3cw== X-Received: by 2002:a05:6402:1e89:b0:600:9f83:c314 with SMTP id 4fb4d7f45d1cf-60119cc7219mr9600940a12.26.1747639159790; Mon, 19 May 2025 00:19:19 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h=AVT/gBGMZoD2Kz4U1n1OWuJCdg57FPxSM1BMzH12VouSgEcz3A== Received: by 2002:a50:f692:0:b0:601:6090:415d with SMTP id 4fb4d7f45d1cf-601609043efls854764a12.0.-pod-prod-04-eu; Mon, 19 May 2025 00:19:18 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVYEAh3roouhhaH0kCFJ/GcU+NfO90uSID+jnNiMxYTTEv0VKUh4esJCQTs3E2pZHrVomlL6fO/ojJzqi7B@amarulasolutions.com X-Received: by 2002:a17:906:c80a:b0:ad5:6437:9f55 with SMTP id a640c23a62f3a-ad56437a04cmr319543066b.32.1747639156122; Mon, 19 May 2025 00:19:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1747639156; cv=none; d=google.com; s=arc-20240605; b=cCJ9uy5f0bEtg+r8MR6jVHsDxDSLuufroGP3d0Ja+ZVl1lW1oeY8oMdIvXtU/4zabq TD/E+I3UoKw7deKgYFDGcSl6nhgViYFREPyI0FbCkgWxxngXCWqj+8qeDhf45yZCLWJ1 tcYyfqmTlj9Mb+3bOhVEIlTAacJpfUkQIoSWFmeMgUgZvCQGVV0mLi72m6W4odndRn0N +p3Bntl7ua8ds86ByrarPfeRHMP9PIFakonK5Weozg7atSY3aNYf+/ImLUlb0NEufH3J YtJBiWyvnDyoXm1ZGQbUsk4OfDxeASYqwYFFpEKHZfIlxelZ4u4nmho+OSZINAX+0Tyq vCRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dkim-signature; bh=34lQZHRbPH38MslFz4uguIv87aaypwDgOnOz2gmrXio=; fh=iM+TMgF83Bi/yG8HidgUJUL2rydRpis6ctwcNgy59sE=; b=Wx6Cgj2JkCr5GyeOSgksZj+0cIhqNnNrTiHO6Mhg2J4D9C96cZ4hFcqFInPOMLKLJ8 z8Bdf20tVYHqE0m2mwyH/KoeF9HjS5uQL6oiXFyUMID5U9pccDmfweIaXwALleB/Q+7T WGzBqzBflBLX3ZJWiabjBcZDsXGw6aggwrLWYpJGqt5Ai7kpdSKBVHbkHkzsNZyGtn7R EDtBcPVRpOF7wiGxzxXUkKH7vMCGunSLkq1Bn3qgBfzCCbXkZCVX6ArGHCj0D/7x3PXh 4u+smrBJIs+rU7l4y+Eed1WsoC7/cL//5zX7j4pnJBia0/sq1NGTmN+mgrKcHYRJUqln bgpA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=l39eDMGb; spf=pass (google.com: domain of andrea.ricchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=andrea.ricchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id a640c23a62f3a-ad52d046f4csor356703566b.2.2025.05.19.00.19.16 for (Google Transport Security); Mon, 19 May 2025 00:19:16 -0700 (PDT) Received-SPF: pass (google.com: domain of andrea.ricchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; X-Forwarded-Encrypted: i=1; AJvYcCVcpMlnXrPAidlzFiEnz6fZS35hOOl9BmWG+iTHpwyG9XXMc4I8l6KhE4OM23azi9YnDCgRJxttMqk9xKAv@amarulasolutions.com X-Gm-Gg: ASbGnctZmUds0DEZ+c9XkVqmzqIHaENuqt0pU0tf1F3wUcLoF6VeZc+lz7cQYyb/on/ 89mVB0V/T767vpsci8GAhC7FiG5C55nhjzXjXw24DARsh++cLS/NB3WNdNWkB3jbegbghwcIOHA uLRBQw0J4mZcZanRAy49hvOEV0+ckgrQ9PfmQEKTWEJYrNAlNNF/nC6IHoxX/mQM+pipKBmroYw TlDDk9YGsHMTTfeOTTvxH/cBTpPNlwAd5N2vXgkK8eonBK8SPGG0AIgPFIQBSO6R/uT5kwxebns aG1ZTo5ugQfvt/69QW0SMJ7gOqXGrgZa4RS1Bp+eSkwROJyJGZjlLndiXX+gZB0UEEw/EC5Z1U+ yTrjsbT+Vg6Q7AHdtGu7KdM0BU4mvcRAe8ShWVSmaOTl5uerikmcKZBtxtQVarsK1J/nmxvuTM+ roGFY= X-Received: by 2002:a17:906:6a26:b0:acb:5343:e75 with SMTP id a640c23a62f3a-ad536c23c18mr869111666b.34.1747639154817; Mon, 19 May 2025 00:19:14 -0700 (PDT) Received: from RccLenovo-T14S.homenet.telecomitalia.it (host-79-25-253-230.retail.telecomitalia.it. [79.25.253.230]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad52d498f18sm544006266b.150.2025.05.19.00.19.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 May 2025 00:19:14 -0700 (PDT) From: Andrea Ricchi To: connman@lists.linux.dev Cc: denkenz@gmail.com, linux-amarula@amarulasolutions.com, Andrea Ricchi Subject: [PATCH] timezone: Replace Localtime file copy with symbolic link Date: Mon, 19 May 2025 09:19:12 +0200 Message-Id: <20250519071912.7682-1-andrea.ricchi@amarulasolutions.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Original-Sender: andrea.ricchi@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=l39eDMGb; spf=pass (google.com: domain of andrea.ricchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=andrea.ricchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , The `/etc/localtime` file is expected to be a symbolic link to a timezone file under `/usr/share/zoneinfo`, not a standalone regular file. This change replaces `write_file` with `write_symlink`, avoiding unnecessary file I/O and memory mapping. It ensures Localtime accurately reflects the selected timezone without duplicating data. This also fixes `__connman_timezone_lookup()`, which requires Localtime to be a symlink to function correctly. This reverts commit f20ccd19a62bd01aa117bfc8e7c388d2a16cde05, since `compare_file` is intended to work with symlinks, enabling full and accurate matching between the requested timezone and the zoneinfo database. Reviewed-by: Michael Trimarchi --- src/timezone.c | 53 ++++++++++++++------------------------------------ 1 file changed, 15 insertions(+), 38 deletions(-) diff --git a/src/timezone.c b/src/timezone.c index fba8b925..9b820477 100644 --- a/src/timezone.c +++ b/src/timezone.c @@ -124,8 +124,8 @@ static int compare_file(void *src_map, struct stat *src_st, DBG("real path %s path name %s", real_path, pathname); - if (real_path && !g_strcmp0(real_path, pathname)) - return 0; + if (real_path && g_strcmp0(real_path, pathname)) + return -1; fd = open(pathname, O_RDONLY | O_CLOEXEC); if (fd < 0) @@ -507,28 +507,20 @@ done: return zone; } -static int write_file(void *src_map, struct stat *src_st, const char *pathname) +static int write_symlink(const char *target, const char *link) { struct stat st; - int fd; - ssize_t written; - DBG("pathname %s", pathname); + DBG("pathname %s", link); - if (lstat(pathname, &st) == 0) { - if (S_ISLNK(st.st_mode)) - unlink(pathname); + // Remove existing file or symlink if it exists + if (lstat(link, &st) == 0) { + if (S_ISLNK(st.st_mode) || S_ISREG(st.st_mode)) + unlink(link); } - fd = open(pathname, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0644); - if (fd < 0) - return -EIO; - - written = write(fd, src_map, src_st->st_size); - - close(fd); - - if (written < 0) + // Create the symbolic link + if (symlink(target, link) < 0) return -EIO; return 0; @@ -537,33 +529,18 @@ static int write_file(void *src_map, struct stat *src_st, const char *pathname) int __connman_timezone_change(const char *zone) { struct stat st; - char *map, pathname[PATH_MAX]; - int fd, err; + char pathname[PATH_MAX]; + int err; DBG("zone %s", zone); snprintf(pathname, PATH_MAX, "%s/%s", USR_SHARE_ZONEINFO, zone); - fd = open(pathname, O_RDONLY | O_CLOEXEC); - if (fd < 0) + // Just check that the file exists and is a regular file + if (stat(pathname, &st) < 0 || !S_ISREG(st.st_mode)) return -EINVAL; - if (fstat(fd, &st) < 0) { - close(fd); - return -EIO; - } - - map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0); - if (!map || map == MAP_FAILED) { - close(fd); - return -EIO; - } - - err = write_file(map, &st, connman_setting_get_string("Localtime")); - - munmap(map, st.st_size); - - close(fd); + err = write_symlink(pathname, connman_setting_get_string("Localtime")); return err; }