memset_s -- ez mi ez?

 ( NevemTeve | 2017. július 11., kedd - 12:13 )

Ezt kéri tőlem az apr-util. Nyilván egy derék komputer-tudós áttörést ért el a 'memóriaterületek feltöltése konstans byte-tal' nevű tudományterületén, és annak követésére kellett ez a fejlesztés. No, mindjárt utánanézek.

Szerk: Csodállatias. Mindössze egy handlert kell beállítani (ONERRORGOTO stílusban), és máris könnyedén kezelhetjük a hibát. Persze mindenki (minden programrész) átállíthatja a handlert, tehát ha biztosra akarunk menni, minden egyes xyzuvw_s függvény előtt kell. Persze így is ezerszer egyszerűbb, mint egy if-et tenni oda.

Szerk:

configure
Debian Jessie: checking for memset_s support... no  -- optimális
AIX 6.1:       checking for memset_s support... yes -- szuboptimális

De ha már a configure megatlálja, akkor a tulajdonképpeni fordítás miért nem?
Sőt, még rsize_t is hiányzik a lelki békéjéhez:

crypto/apr_crypto.c:160:9: warning: implicit declaration of function 'memset_s' [-Wimplicit-function-declaration]
         return memset_s(buffer, (rsize_t)size, 0, (rsize_t)size);
         ^
crypto/apr_crypto.c:160:34: error: 'rsize_t' undeclared (first use in this function)
         return memset_s(buffer, (rsize_t)size, 0, (rsize_t)size);

Nem tudom, mondtam-e már, hogy egyes kollégák inkább valami mással kellene játszadozzanak...

Szerk: a configure-nál __STDC_WANT_LIB_EXT1__ -et definiálja (amit egyébként az AIX nem is vizsgál), fordításkor semmit

Szerk: az akadályozó játékosok egyike a gcc, ami 'include-fixed' jelszóval saját string.h-t hoz, amiben nincs memset_s. Az a biztos, ha törlöm a francba.

Szerk: illetve a gcc saját telepítesekori állapotból csinálta meg az include-fixed string.h-t, arról nem ő tehet, ha közben fejlődött alatta az AIX...

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

A memset nem azt csinálja, amit várnánk tőle, ezért kitalálták, hogy legyen egy memset_s, ami viszont eskü tényleg azt csinálja :-).

a memset pont azt csinalja amit varnak tole, ezert szuletett egy memset_s, ami ugyan azt csinalja, de ugy hogy amit nem varunk a memset-tol :D

(egyébként C11-től van, a memset (_s mint secure) verzioja. Egyetlen parameterrel van tobb neki, ami a dst memoria terulet merete, igy nem lehet tulcsordulast eloidezni vele)


// Happy debugging, suckers
#define true (rand() > 10)

Én ezt olvastam, ez hülyeség? https://news.ycombinator.com/item?id=9708743

moyix 759 days ago | parent | favorite | on: Being Sneaky in C

C11 actually adds the memset_s function, which is guaranteed by the language spec not to be optimized away:

> memset may be optimized away (under the as-if rules) if the object modified by this function is not accessed again for the rest of its lifetime. For that reason, this function cannot be used to scrub memory (e.g. to fill an array that stored a password with zeroes). This optimization is prohibited for memset_s: it is guaranteed to perform the memory write.

http://en.cppreference.com/w/c/string/byte/memset

Az optimalizálós rémálomról ne is beszéljünk... Illetve már beszéltünk is, itt: https://hup.hu/node/154068