История изменений
Исправление i-rinat, (текущая версия) :
В Linux (ядро) многие функции по задумке возвращающие целое неотрицательное число, ещё могут вернуть отрицательное. Тогда это считается ошибкой. Например, если памяти не хватило, возвращается -ENOMEM
. Системные вызовы из userspace ведут себя так же.
Некоторые функции, которые по задумке возвращают указатель, могут вернуть тот же -ENOMEM
в виде указателя. Указатели, которые имеют значение небольшого по абсолютному значению отрицательного числа, считаются кодами ошибок.
Так что можно и число пропарсенных байт возвращать, и код ошибки, и всё в одном числе. Если в процессе работы памяти не хватило, то уже и не важно, сколько байт там обработано. Не получилось, и всё тут. Если получилось пропарсить сколько-то, а дальше не парсится, можно просто число вернуть. Вызывающая сторона сравнит результат с длиной переданной строки и сделает выводы.
Если всё же хочется много всякой информации, то придётся объявлять структуру и в ней наружу отдавать. Либо заполняя по указателю, либо как возвращаемое значение функции. Боль, конечно. Но это ж Си, тут всегда так. Боль заставляет задуматься, а действительно ли вот эту информацию так уж нужно возвращать. Если да, терпишь боль. Если нет, не возвращаешь. Закаляет характер.
Исправление i-rinat, :
В Linux (ядро) многие функции по задумке возвращающие целое неотрицательное число, ещё могут вернуть отрицательное. Тогда это считается ошибкой. Например, если памяти не хватило, возвращается -ENOMEM
. Системные вызовы из userspace ведут себя так же.
Некоторые функции, которые по задумке возвращают указатель, могут вернуть тот же -ENOMEM
в виде указателя. Указатели, которые имеют значение небольшого по абсолютному значению отрицательного числа, считаются кодами ошибок.
Так что можно и число пропарсенных байт возвращать, и код ошибки, и всё в одном числе. Если в процессе работы памяти не хватило, то уже и не важно, сколько байт там обработано. Не получилось, и всё тут. Если получилось пропарсить сколько-то, а дальше не парсится, можно просто число вернуть. Вызывающая сторона сравнит результат с длиной переданной строки и сделает выводы.
Исходная версия i-rinat, :
В Linux многие функции по задумке возвращающие целое неотрицательное число, ещё могут вернуть отрицательное. Тогда это считается ошибкой. Например, если памяти не хватило, возвращается -ENOMEM
. Системные вызовы из userspace ведут себя так же.
Некоторые функции, которые по задумке возвращают указатель, могут вернуть тот же -ENOMEM
в виде указателя. Указатели, которые имеют значение небольшого по абсолютному значению отрицательного числа, считаются кодами ошибок.
Так что можно и число пропарсенных байт возвращать, и код ошибки, и всё в одном числе. Если в процессе работы памяти не хватило, то уже и не важно, сколько байт там обработано. Не получилось, и всё тут. Если получилось пропарсить сколько-то, а дальше не парсится, можно просто число вернуть. Вызывающая сторона сравнит результат с длиной переданной строки и сделает выводы.