Login
Log in using an SSO provider:
Fedora Account System
Red Hat Associate
Red Hat Customer
Login using a Red Hat Bugzilla account
Forgot Password
Create an Account
Red Hat Bugzilla – Attachment 1259211 Details for
Bug 1423289
cachefilesd: FTBFS in rawhide
Home
New
Search
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh90 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
[?]
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
Patch to replace use of readdir_r
cachefilesd-readdir.patch (text/plain), 5.11 KB, created by
David Howells
on 2017-03-02 17:19:06 UTC
(
hide
)
Description:
Patch to replace use of readdir_r
Filename:
MIME Type:
Creator:
David Howells
Created:
2017-03-02 17:19:06 UTC
Size:
5.11 KB
patch
obsolete
>commit 76ef817d77e041bdcf5f4314e3f6e7e9508a7a5b >Author: David Howells <dhowells@redhat.com> >Date: Fri Feb 24 11:26:17 2017 +0000 > > Don't use readdir_r > > Don't use readdir_r() as it is obsolete. Use readdir() instead. > > Signed-off-by: David Howells <dhowells@redhat.com> > Reviewed-by: Jeff Layton <jlayton@redhat.com> > >diff --git a/cachefilesd.c b/cachefilesd.c >index 88b519f..5b3cd4b 100644 >--- a/cachefilesd.c >+++ b/cachefilesd.c >@@ -811,10 +811,11 @@ static void reap_graveyard(void) > */ > static void reap_graveyard_aux(const char *dirname) > { >- struct dirent dirent, *de; >+ struct dirent *de; >+ size_t len; >+ char name[NAME_MAX + 1]; > bool deleted; > DIR *dir; >- int ret; > > if (chdir(dirname) < 0) > oserror("chdir failed"); >@@ -829,42 +830,49 @@ static void reap_graveyard_aux(const char *dirname) > rewinddir(dir); > deleted = false; > >- while (ret = readdir_r(dir, &dirent, &de), >- ret == 0 && de != NULL >+ while (errno = 0, >+ de = readdir(dir), >+ de != NULL > ) { > /* ignore "." and ".." */ >- if (dirent.d_name[0] == '.') { >- if (dirent.d_name[1] == '\0') >+ if (de->d_name[0] == '.') { >+ if (de->d_name[1] == '\0') > continue; >- if (dirent.d_name[1] == '.' || >- dirent.d_name[1] == '\0') >+ if (de->d_name[1] == '.' || >+ de->d_name[1] == '\0') > continue; > } > > deleted = true; > > /* attempt to unlink non-directory files */ >- if (dirent.d_type != DT_DIR) { >- debug(1, "unlink %s", dirent.d_name); >- if (unlink(dirent.d_name) == 0) >+ if (de->d_type != DT_DIR) { >+ debug(1, "unlink %s", de->d_name); >+ if (unlink(de->d_name) == 0) > continue; > if (errno != EISDIR) > oserror("Unable to unlink file %s", >- dirent.d_name); >+ de->d_name); > } > > /* recurse into directories */ >- memcpy(&dirent, de, sizeof(dirent)); >+ len = strlen(de->d_name) + 1; >+ if (len > sizeof(name)) { >+ errno = ENAMETOOLONG; >+ oserror("Name longer than NAME_MAX \"%s\"", >+ de->d_name); >+ } >+ memcpy(name, de->d_name, len); > >- reap_graveyard_aux(dirent.d_name); >+ reap_graveyard_aux(name); > > /* which we then attempt to remove */ >- debug(1, "rmdir %s", dirent.d_name); >- if (rmdir(dirent.d_name) < 0) >- oserror("Unable to remove dir %s", dirent.d_name); >+ debug(1, "rmdir %s", name); >+ if (rmdir(name) < 0) >+ oserror("Unable to remove dir %s", name); > } > >- if (ret < 0) >+ if (errno != 0) > oserror("Unable to read dir %s", dirname); > } while (deleted); > >@@ -1273,7 +1281,7 @@ static void begin_building_cull_table(void) > */ > static bool build_cull_table(void) > { >- struct dirent dirent, *de; >+ struct dirent *de; > struct object *curr, *child; > struct stat64 st; > unsigned loop; >@@ -1305,38 +1313,37 @@ static bool build_cull_table(void) > > next: > /* read the next directory entry */ >- if (readdir_r(curr->dir, &dirent, &de) < 0) { >- if (errno == ENOENT) >+ errno = 0; >+ de = readdir(curr->dir); >+ if (!de) { >+ if (errno == 0 || errno == ENOENT) > goto dir_read_complete; > oserror("Unable to read directory"); > } > >- if (de == NULL) >- goto dir_read_complete; >- >- if (dirent.d_name[0] == '.') { >- if (!dirent.d_name[1] || >- (dirent.d_name[1] == '.' && !dirent.d_name[2])) >+ if (de->d_name[0] == '.') { >+ if (!de->d_name[1] || >+ (de->d_name[1] == '.' && !de->d_name[2])) > goto next; > } > >- debug(2, "readdir '%s'", dirent.d_name); >+ debug(2, "readdir '%s'", de->d_name); > >- switch (dirent.d_type) { >+ switch (de->d_type) { > case DT_UNKNOWN: > case DT_DIR: > case DT_REG: > break; > default: >- oserror("readdir returned unsupported type %d", dirent.d_type); >+ oserror("readdir returned unsupported type %d", de->d_type); > } > > /* delete any funny looking files */ >- if (memchr("IDSJET+@", dirent.d_name[0], 8) == NULL) >+ if (memchr("IDSJET+@", de->d_name[0], 8) == NULL) > goto found_unexpected_object; > > /* see if this object is already known to us */ >- if (fstatat64(dirfd(curr->dir), dirent.d_name, &st, 0) < 0) { >+ if (fstatat64(dirfd(curr->dir), de->d_name, &st, 0) < 0) { > if (errno == ENOENT) > goto next; > oserror("Failed to stat directory"); >@@ -1344,14 +1351,14 @@ next: > > if (!S_ISDIR(st.st_mode) && > (!S_ISREG(st.st_mode) || >- dirent.d_name[0] == 'I' || >- dirent.d_name[0] == 'J' || >- dirent.d_name[0] == '@' || >- dirent.d_name[0] == '+')) >+ de->d_name[0] == 'I' || >+ de->d_name[0] == 'J' || >+ de->d_name[0] == '@' || >+ de->d_name[0] == '+')) > goto found_unexpected_object; > > /* create a representation for this object */ >- child = create_object(curr, dirent.d_name, &st); >+ child = create_object(curr, de->d_name, &st); > if (!child && errno == ENOENT) > goto next; > >@@ -1421,7 +1428,7 @@ next: > } > > /* add objects that aren't in use to the cull table */ >- if (!is_object_in_use(dirent.d_name)) { >+ if (!is_object_in_use(de->d_name)) { > debug(2, "- insert"); > child->new = false; > insert_into_cull_table(child); >@@ -1493,7 +1500,7 @@ dir_read_complete: > found_unexpected_object: > debug(2, "found_unexpected_object"); > >- destroy_unexpected_object(curr, &dirent); >+ destroy_unexpected_object(curr, de); > goto next; > } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 1423289
:
1251621
|
1251622
|
1251623
| 1259211