[Issue 2767] DMD incorrectly mangles NTFS stream names

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Mar 28 23:35:53 PDT 2009


http://d.puremagic.com/issues/show_bug.cgi?id=2767





------- Comment #3 from bugzilla at digitalmars.com  2009-03-29 01:35 -------
Brad makes a good point, there are aux:, lpt1:, prn:, com1:, etc. But they all
share the characteristic that the ':' is the last character. So, here's my
patch:

char *FileName::name(const char *str)
{
    char *e;
    size_t len = strlen(str);

    e = (char *)str + len;
    for (;;)
    {
        switch (*e)
        {
#if linux || __APPLE__ || __FreeBSD__
            case '/':
               return e + 1;
#endif
#if _WIN32
            case '/':
            case '\\':
                return e + 1;
            case ':':
                /* The ':' is a drive letter only if it is the second
                 * character or the last character,
                 * otherwise it is an ADS (Alternate Data Stream) separator.
                 * Consider ADS separators as part of the file name.
                 */
                if (e == str + 1 || e == str + len - 1)
                    return e + 1;
#endif
            default:
                if (e == str)
                    break;
                e--;
                continue;
        }
        return e;
    }
}


-- 



More information about the Digitalmars-d-bugs mailing list