[Issue 21177] New: printf check does not recognize GNU extensions
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Aug 19 06:35:00 UTC 2020
https://issues.dlang.org/show_bug.cgi?id=21177
Issue ID: 21177
Summary: printf check does not recognize GNU extensions
Product: D
Version: D2
Hardware: All
OS: Linux
Status: NEW
Keywords: rejects-valid
Severity: regression
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: pro.mathias.lang at gmail.com
I have some platform-specific server code (it only runs on Ubuntu / Glibc).
In this code, the `%m` format is used with fscanf:
```
/*
* Special fscanf format tokens:
* - The leading ' ' skips leading white space.
* - %n stores the current position in the input string in
the
* argument so that
* channel_name.length = name_end - name_start.
* - %m matches a string, stores it in a buffer allocated by
* malloc and stores a pointer to that buffer in the
* argument.
* - [_0-9a-zA-Z-] makes %m match only strings that consist
of
* the characters '_', '0'-'9', 'a'-'z', 'A'-'Z' or '-',
* which ensures the string is a valid dls channel name.
*/
n = fscanf(this.stream,
" %n%m[_0-9a-zA-Z-]%n %lu %lu".ptr,
&name_start, &channel_name, &name_end,
&bucket_start, &bucket_offset)
```
Source:
https://github.com/sociomantic-tsunami/dlsnode/blob/26a8037827a653e7827ead19d693357e2c808723/src/dlsnode/storage/checkpoint/CheckpointFile.d#L203-L219
While trying to update to the latest DMD, I get a deprecation message.
>From a quick google search, I could find the following extension:
- `%m` for printf => Print output of strerror(errno) (no argument)
- `%a` for scanf
- `%m` for scanf
Note that a "smart" fix would only warn about those when not using
`CRuntime_Glibc`. Or just accept that GNU extensions are widespread and let
those slide.
--
More information about the Digitalmars-d-bugs
mailing list