Projects
openEuler:Mainline
gdbm
_service:tar_scm:Minor-fix-in-the-compatibility...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:Minor-fix-in-the-compatibility-library.patch of Package gdbm
From 3e63a788d4c7b5cb1173937118135c2bcca35a02 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff <gray@gnu.org> Date: Fri, 3 Mar 2023 13:52:56 +0200 Subject: [PATCH] Minor fix in the compatibility library. * compat/dbmopen.c (ndbm_open_dir_file0): Don't try to unlink the 1.8-compatible dir file or create a missing one if the database is being opened read-only. --- compat/dbmopen.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/compat/dbmopen.c b/compat/dbmopen.c index b11af98..cb979b5 100644 --- a/compat/dbmopen.c +++ b/compat/dbmopen.c @@ -81,12 +81,21 @@ ndbm_open_dir_file0 (const char *file_name, int pagfd, int mode) { if (st.st_dev == pagst.st_dev && st.st_ino == pagst.st_ino) { - if (unlink (file_name)) + if (flags == O_RDONLY) { - if ((mode & GDBM_OPENMASK) == GDBM_READER) - /* Ok, try to cope with it. */ - return pagfd; - else if (errno != ENOENT) + /* + * Don't touch the link if the database is opened read-only. + * Return a meaningful file descriptor for the sake + * of those programs that compare it with pagfd trying + * to detect old GDBM versions (as Sendmail does). + */ + if ((fd = open ("/dev/null", flags)) == -1) + gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, TRUE); + return fd; + } + else if (unlink (file_name)) + { + if (errno != ENOENT) { gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, TRUE); return -1; @@ -138,6 +147,13 @@ ndbm_open_dir_file0 (const char *file_name, int pagfd, int mode) return -1; } } + else if (flags == O_RDONLY) + { + /* See the comment above. */ + if ((fd = open ("/dev/null", flags)) == -1) + gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, TRUE); + return fd; + } /* File does not exist. Create it. */ fd = open (file_name, flags | O_CREAT, pagst.st_mode & 0777); -- 2.33.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2