SSIZE_MAX
- максимальное значение подписанного сорта size_t
.Например, если size_t
составляет всего 16 бит (очень маловероятно в наши дни), SIZE_MAX
равно 65535, тогда как ssize_max
равно 32767. Скорее всего, это 32 бита (что дает 4294967295 и 2147483647 соответственно) или даже 64 бита (что дает числослишком большой для ввода здесь :-)).
Основная проблема, которую необходимо решить, состоит в том, что readlink
возвращает значение со знаком, даже если SIZE_MAX
является беззнаковым ... так что, как только buf_size
превышает SSIZE_MAX
, невозможно прочитать ссылку, так как большое положительное значение приведет к отрицательному возвращаемому значению.
Что касается «более того»: она, скорее всего, не может, т. Е. Вы правы,По крайней мере, в любой здравомыслящей системе.(Теоретически возможно иметь, например, 32-разрядное SIZE_MAX
, но 33-разрядное целое число со знаком, так что SSIZE_MAX также равен 4294967295. Предположительно, этот код написан для защиты от теоретически возможного, но никогда не видимого,системы.)