Page MenuHomeFreeBSD

libc: Fix a few bugs in the xlocale collation code.
ClosedPublic

Authored by markj on Jan 9 2020, 4:42 PM.
Tags
None
Referenced Files
Unknown Object (File)
Feb 15 2024, 9:45 AM
Unknown Object (File)
Feb 14 2024, 2:21 PM
Unknown Object (File)
Feb 10 2024, 5:59 PM
Unknown Object (File)
Feb 9 2024, 11:01 AM
Unknown Object (File)
Jan 21 2024, 12:47 PM
Unknown Object (File)
Jan 15 2024, 1:52 PM
Unknown Object (File)
Dec 29 2023, 6:17 PM
Unknown Object (File)
Dec 23 2023, 11:14 PM
Subscribers

Details

Summary
  • Fix checks for mmap() failures.
  • Set the "map" and "maplen" fields of struct xlocale_collate so that the destructor actually works.
  • Free an already-mapped collation file before loading a new one into the global table.
  • Harmonize the prototype and definition of __collate_load_tables_l() by adding the "static" qualifier to the latter.

PR: 243195

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

markj added reviewers: bapt, yuripv, cem.

Defer the unmap until we are sure that __collate_load_tables_l() won't fail.

I wonder if we could instead check if we have the table already loaded and return without doing everything over and over again. Something like the following right at the start:

if (table->__collate_load_error == 0 && table->header != NULL && strcmp(table->header.locale, encoding) == 0)
    return (_LDP_LOADED);

Not completely sure about the table->header check here as we already checked that the table was loaded, but it's just an idea.

(P.S. I think encoding is really a wrong argument name here, as it's full locale name.)

I wonder if we could instead check if we have the table already loaded and return without doing everything over and over again. Something like the following right at the start:

if (table->__collate_load_error == 0 && table->header != NULL && strcmp(table->header.locale, encoding) == 0)
    return (_LDP_LOADED);

Not completely sure about the table->header check here as we already checked that the table was loaded, but it's just an idea.

(P.S. I think encoding is really a wrong argument name here, as it's full locale name.)

Nevermind me, I obviously can't read several lines up :)

This revision is now accepted and ready to land.Jan 9 2020, 5:43 PM

I wonder if we could instead check if we have the table already loaded and return without doing everything over and over again. Something like the following right at the start:

if (table->__collate_load_error == 0 && table->header != NULL && strcmp(table->header.locale, encoding) == 0)
    return (_LDP_LOADED);

Not completely sure about the table->header check here as we already checked that the table was loaded, but it's just an idea.

(P.S. I think encoding is really a wrong argument name here, as it's full locale name.)

Nevermind me, I obviously can't read several lines up :)

Hmm, I don't see what lines you are referring to. Indeed, this function does not handle the case where a table is already loaded. I'd prefer to fix that separately though.

This revision was automatically updated to reflect the committed changes.