История изменений
Исправление intelfx, (текущая версия) :
void do_something_with_unit(const char *i, const char *f)
Такого там точно нет.
s = new(char, a + 1 + b + strlen(e) + 1);
...где a, b и e — куски строки после парсинга, которые никак по-другому и не назовёшь.
strcpy(stpcpy(stpcpy(stpcpy(mempcpy(t, p, fn - p), ".#"), extra), fn), «XXXXXX»);
А здесь-то что не так? Это последовательность конкатенаций, записанная в одну строчку для удобства.
Я бы здесь, скорее всего, использовал snprintf() с ключами %.*s, но это дело вкуса.
if (path_is_absolute(option+15))
...которое идёт сразу после строкового литерала, так что всё понятно.
А уж проверок там понатыкано –– иногда некоторые вещи проверяются как минимум три раза подряд (есть подозрение, что чисто из-за абсолютной бессистемности проверок), причем эта информация частенько никак не используется. Т.е. может вначале проверятся кусок строки на валидность (при этом выясняется длина и наличие какого-нибудь @ или постфикса), потом часть этих действий повторяется в нормальном коде.
Месье, наверное, не в курсе, что сначала нужно проверить все входные данные, а потом уже с ними работать?
Исправление intelfx, :
void do_something_with_unit(const char *i, const char *f)
Такого там точно нет.
s = new(char, a + 1 + b + strlen(e) + 1);
...где a, b и e — куски строки после парсинга, которые никак по-другому и не назовёшь.
strcpy(stpcpy(stpcpy(stpcpy(mempcpy(t, p, fn - p), ".#"), extra), fn), «XXXXXX»);
А здесь-то что не так? Последовательность конкатенаций, записанная в одну строчку для удобства.
Я бы здесь, скорее всего, использовал snprintf() с ключами %.*s, но это дело вкуса.
if (path_is_absolute(option+15))
...которое идёт сразу после строкового литерала, так что всё понятно.
А уж проверок там понатыкано –– иногда некоторые вещи проверяются как минимум три раза подряд (есть подозрение, что чисто из-за абсолютной бессистемности проверок), причем эта информация частенько никак не используется. Т.е. может вначале проверятся кусок строки на валидность (при этом выясняется длина и наличие какого-нибудь @ или постфикса), потом часть этих действий повторяется в нормальном коде.
Месье, наверное, не в курсе, что сначала нужно проверить все входные данные, а потом уже с ними работать?
Исходная версия intelfx, :
void do_something_with_unit(const char *i, const char *f)
Такого там точно нет.
s = new(char, a + 1 + b + strlen(e) + 1);
...где a, b и e — куски строки после парсинга, которые никак по-другому и не назовёшь.
strcpy(stpcpy(stpcpy(stpcpy(mempcpy(t, p, fn - p), ".#"), extra), fn), «XXXXXX»);
А здесь-то что не так? Последовательность конкатенаций, записанная в одну строчку для удобства.
if (path_is_absolute(option+15))
...которое идёт сразу после строкового литерала, так что всё понятно.
А уж проверок там понатыкано –– иногда некоторые вещи проверяются как минимум три раза подряд (есть подозрение, что чисто из-за абсолютной бессистемности проверок), причем эта информация частенько никак не используется. Т.е. может вначале проверятся кусок строки на валидность (при этом выясняется длина и наличие какого-нибудь @ или постфикса), потом часть этих действий повторяется в нормальном коде.
Месье, наверное, не в курсе, что сначала нужно проверить все входные данные, а потом уже с ними работать?