mirror of
https://github.com/Nekrolm/ubbook.git
synced 2026-06-09 13:14:18 +03:00
minor fixes
This commit is contained in:
@@ -39,6 +39,7 @@ int main() {
|
||||
|
||||
```Rust
|
||||
// это упрощенный код
|
||||
// directory: Path
|
||||
if directory.is_symlink() {
|
||||
remove_link(directory)
|
||||
} else {
|
||||
@@ -48,7 +49,7 @@ if directory.is_symlink() {
|
||||
|
||||
Между проверкой и удалением злоумышленник мог подменить настоящий каталог на символьную ссылку и добиться удаления данных, к которым у него нет доступа.
|
||||
|
||||
Ошибку исправили.
|
||||
Ошибку исправили: вместо работы с путями, функция стала работать с элементами в каталоге через единожда открытываемвц файловый дескриптор.
|
||||
|
||||
А теперь мы можем вернуться к C++:
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ process(Data<unsigned long>*, int):
|
||||
Если у вас есть указатели двух **разных** типов `A* a` и `B* b`, то запись значений через указатель `a` **не влияет** на чтение значений через указатель `b`, во всех случаях, кроме нескольких исключений (*алиасинг*):
|
||||
- `A` и `B` — это *совместимые*, signed/unsigned версии одного и того же типа
|
||||
- `A` — это тип, *совместимый* с каким-либо из подобъектов внутри `B`: элемент структуры или объединения, элемент массива
|
||||
- `A` или `B` — знаковый или беззнаковый `char` или `std::byte`. Этот вариант существует как раз для того чтоб можно было работать с сырыми байтиками.
|
||||
- `A` или `B` — `char`, `unsigned char` или `std::byte`. Этот вариант существует как раз для того чтоб можно было работать с сырыми байтиками. Заметьте, что `signed char` не считается.
|
||||
|
||||
В C (не в C++, но компиляторы поддерживают!) допустимо еще:
|
||||
- `A` и `B` — это *соместимые* структуры/объединения: у них совпадает размер, порядок и имена полей и типы полей *совместимы*. Например `struct Vector { int32_t x; int32_t y; }` и struct `Point { uint32_t x; uint32_t y; }`
|
||||
|
||||
Reference in New Issue
Block a user