Подробности
[В начало]
Проблема в реализации № D0131
Краткое описание
Функция XSyncValueSubtract делает неправильное вычитание двух значений
Подробное описание
Если в качестве уменьшаемого и вычитаемого взять одно и тоже значение, то функция XSyncValueSubtract не возвращает ожидаемое значение 0. При этом устанавливается overflow, и старший бит ненулевой.
Раздел стандарта
Linux Standard Base Desktop Specification 3.2. Chapter 6. Libraries. 6.11.5. X Synchronization Extension, который ссылается на http://refspecs.linux-foundation.org/X11/synclib.pdf
Пример
XSyncIntToValue(&a, 100); // a.hi = 0, a.lo = 100 XSyncValueSubtract(&result, &a, &a, overflow); printf("result.hi = %d, result.lo = %d, overflow = %d", result.hi, result.lo, overflow); // result.hi = -1, result.lo = 0 overflow is set to true
Способы устранения
В описании макроса _XSyncValueSubtract if (t>(presult)->lo) (presult)->hi--;\ заменяется на if (t<(presult)->lo) (presult)->hi--;\ А именно, знак '>' поменять на '<'.
Компонент
X11 7.3 or early
Принято
bugzilla.freedesktop.org 23438
Статус
Исправлено в xextproto git
[В начало]