From patchwork Tue Jun 3 13:10:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrea Ricchi X-Patchwork-Id: 4101 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 49D623F13D for ; Tue, 3 Jun 2025 15:10:42 +0200 (CEST) Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-450de98b28esf13714805e9.0 for ; Tue, 03 Jun 2025 06:10:42 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1748956242; cv=pass; d=google.com; s=arc-20240605; b=KAjRBQZh+QB8Kksohk+HU9MM75HMxniUppQzmsD0tb5RlXY7DI2zDnBbPz6XlUFnGk gvysl5KEQn7EmcVDfrsuTIssY7C9mvQ0EzqZU/UCAOFvd1ANQglxZjVDzvN8KUZdzuaJ dLwPwgRbQNW1VR5iB5FQcemaJTF9w22onZAdRqPJpynI2+YyMAMbTv1/HILIZ5Ke2e9D MHbQgY6BIhsPGjH9nslgtkMxaLDR+4TR862kfrB4Rhqas+JSf0knvc9aSRFt2BLvGltl ylXYegyqznXVFL+XkT1Y2XYZtNx1oDLUWRlrGmmInMnCGSjgNGnYiq2JSVDBYo9YDBbz pNsw== 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=A2j9caLMoDXV5p6YWjC0rxZlC2mMMMBblHS22PJ0oGw=; fh=jIErF17GhZPgnacuPf+as57jX3ZSoCtOPC1Ye+FhHhE=; b=d4PnKz4rc/1CAtePzKYo2Vb83jjHy0ED2rPFhxnbzW2J0zoqvYKnEAs00TAoaY39pS F1UjO54kk9KfMPgQLfBIfWscKcr11pzVhUXWS/jK3l2gs+xjV5DZO9b5PgfvAGrq/Z3j 4M0tLBRNaYF2gYwnoZfw+qGjIBJJcB8ZjtM1y1xSvDZ8l5vcmhcpEhWYZPNypU550hwt J5iKeMQjrN35H7JpIr6/68q6s8UVqlA6JsMA7bBXRVPjMmgC034OOB/sHlB5hU3V4l9J i3TJOCzu/3YqZ4SM7AadaquA0JehmrNk4qTUTMnG3pdNoSunyAjG+ROa1227f5BkS4AW nuhQ==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b="T5Rps/LZ"; 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=1748956242; x=1749561042; 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=A2j9caLMoDXV5p6YWjC0rxZlC2mMMMBblHS22PJ0oGw=; b=Hqt1NxqGcBrH8qUSgsDEJoyeG0MCm2Cy+orKJa19X6Xh/j8yHcmCdShbLYK/lYMlK9 aGBgovJEJECXtiM7gEllbbyLyuukZikw9KpEqh9YAJwJNqVKyHzAg231j6AdzhWu8e/S ta+HmBtYxWFnD9GPOwT2pngPQywrrrhDnkudo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748956242; x=1749561042; 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=A2j9caLMoDXV5p6YWjC0rxZlC2mMMMBblHS22PJ0oGw=; b=BbnNe6qz6qCzv7MDVcEfFwsxXmec531VfIfbZ/iDqW//zkMTB0359cAbRthwsRWjRM pULckU0z46AS+vZn/WnPHaU4xkba+rmsxgm0VM0SiHduoE6ZQmSbrn89N/vp7ZTnsFPm t0y4LWaGhhA1sHOF1UuoLNabXNYOoAZuixixVBFv87201X9HzWcBO1hXV1ZVPnoQDM+B soJDkHsOjDHuxdyoRevF3mP3sirjhw42ufn87bb4EcKw792zW1vNTYdl1MJTU0xxuANM zeijyqWOxdkTWmQcwMC3Zj52/gPsHFF8ZSYRZrEdV7BTGAYdUIQJ5Vp+TerzmdsyEgrB b5xw== X-Forwarded-Encrypted: i=2; AJvYcCUyHC11sjAW5P9gMaRSmlgLIlDBmMw/+nCmF3I/hhPPK4CxU++rDe4EPX/1XlreBq6GTvVg8ermst2qCfen@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0Yz+dpOZoRK2Xld3rlaxRaXWyZI9Gy2lmhtI7aWUsrk1BAOi17eT eY1nLMrRI9N1DusWSeyEZC1kR3P8R/m6WKtaZaC7c6LD27ycUXXHVH+ga0iT/5PtiIo60A== X-Google-Smtp-Source: AGHT+IGeGQnl319GbBstNsvTP0ozyKDBOThdG0KZdyTcAhKhMqrZpUU1TBTR6BTnguaw7kqU6GDQbw== X-Received: by 2002:a05:600c:8b6d:b0:451:df07:d8e0 with SMTP id 5b1f17b1804b1-451e67af2c5mr27079595e9.11.1748956241457; Tue, 03 Jun 2025 06:10:41 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h=AZMbMZc4OEnThCg9WOGTONLmQM/ZY6oL81c+daeC0Ac6ZvVcWA== Received: by 2002:a05:600c:1553:b0:451:ea69:502d with SMTP id 5b1f17b1804b1-451ea695115ls2351735e9.0.-pod-prod-00-eu-canary; Tue, 03 Jun 2025 06:10:39 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVqHGUv8f2mpsAU75VnBI8guqDH72RkmuRYYneTOmoKaDBAfQ949eJV+ANPw0ELmwqhmSl7d0QUaKJ8Y+zT@amarulasolutions.com X-Received: by 2002:a05:6000:4009:b0:3a4:cec5:b59c with SMTP id ffacd0b85a97d-3a5141d007dmr2443534f8f.25.1748956239251; Tue, 03 Jun 2025 06:10:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1748956239; cv=none; d=google.com; s=arc-20240605; b=fZ3wFy0Vx4dc4mH4UpQAQvRWWz039gkg7ByA9rXb72XUQCJ6OGbg1k9FzlzcJP5Bb/ g8uidgbdqqXHDnU8IOVw0ayvDZ03q7t14lho/KwW4CnCIIifa0nDFKAm4Z07xLNIsIBb Iq4i+O+bya1/03wPBqr4hpcxtYI0IOe7bSWLbo9c8b0DRCGLmoNcxSdQ5QMpBkKpVXUM FFO8ijrBEv3ig15UxwvsWNuV/Xi59tmkkXpU/c+EhmEZhM7msE6cZZpTe+UaCqj/AKG3 NotNf4TYbcbiVXWd/7GQ1uTYA6VfN/fURXs8LDXsRb5yA0iRBxelplxtwutqI8HblOgH 7WfA== 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=HA3E4cLO9PM8c45fAq5+TrYbRiEdpDKHmtKvnl8dCf0=; fh=3TL+8bmlpX83GrVivwQMgTZe51NYhpjnKw7X4GzO+wU=; b=a2Hg6AqN08N6ELHOwMX8XDKw5bpUshMKiuhZs70ttrENq3Om6iJcTx9eswtmzUr+QZ nrdAw0iguWGZ9WNekgmw6H5eoK+nrK2/sQBY/7PpQnAWBnQ48KMq/9STCvRibopyafhM uLXjuyHWSb/zRODzaVZfYdl5RyCu1+T5bKTI2f+emO0bpzk2CbRcPzXpBf5MnhEfFIuX Xi2GA1lIofP1mNiE9luluIpIKMY52MG27gjYs8frPScgdErJ0lVGnH6Lo7X8uaUSMOad 3N2l7S2pc5zQXqZ0A5BhwpN5LfPAc709jpP0QLguXqGpw8YNnoaYM2HFUMPVB7ss8iNE bW/g==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b="T5Rps/LZ"; 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 5b1f17b1804b1-451d47862d7sor17199365e9.3.2025.06.03.06.10.39 for (Google Transport Security); Tue, 03 Jun 2025 06:10:39 -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; AJvYcCUjK3pjvFAX3Hh898wFPc00Vd8KJcDYvY970ThLJJBI8ubs+CddG9s+ed3JbVVcG7MTuX1tQWLiFb0moqaS@amarulasolutions.com X-Gm-Gg: ASbGncuXy03lPAuqnL61Cu+gEZRJVhEJ3eBCZc0grFQ6YzEJo2e3T7niMsEKwuXuzBz f8wrlXrD2wkp6Oidste5vhfy4WRGMlnLXllI/KCbO9qcbabnbxccRkQeNM9YBQwGmitZpWQ2i5u cHQNE4DVoJhjuj0RQiolAYjj4ZowIa3+lgYeLeAOK1EprUXV2vzK6QnoFwT1bGTM+t0Qu1y/3i3 jv8Uqvel10zaV7E94ZDfzESZM2wNtq3en6c/8NbuB9+FqYVkHHWv4dBw/9r3OK339HeFDyfaYlo IYrMb93p42H9DER+z+MeDMK5lS/b1b11HJ7d7s7VgpQ8Jk6TMs1tBq/p5BZ6nIOTV1p6vN+IWdA VTSZtPn4gSJ0= X-Received: by 2002:a05:600c:34c2:b0:450:cabc:a6c6 with SMTP id 5b1f17b1804b1-451e67bb968mr27658595e9.15.1748956238767; Tue, 03 Jun 2025 06:10:38 -0700 (PDT) Received: from localhost.localdomain ([2001:b07:6474:ebbf:a6f7:2a98:84af:9b39]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450d7f8f194sm163544965e9.4.2025.06.03.06.10.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Jun 2025 06:10:38 -0700 (PDT) From: Andrea Ricchi To: connman@lists.linux.dev Cc: denkenz@gmail.com, linux-amarula@amarulasolutions.com, michael@amarulasolutions.com, Andrea Ricchi Subject: [PATCH v2 1/1] timezone: Replace Localtime file copy with symbolic link Date: Tue, 3 Jun 2025 15:10:34 +0200 Message-Id: <20250603131034.60946-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="T5Rps/LZ"; 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: , Based on the `man 5 localtime` documentation the `/etc/localtime` file is expected to be a symbolic link, 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 also fix `compare_file` as is intended to work with symlinks, enabling full and accurate matching between the requested timezone and the zoneinfo database. Signed-off-by: Andrea Ricchi --- Changes v1 -> v2: - Change comit message 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; }