memset_s.c 445 B

12345678910111213141516171819202122
  1. #include "memset_s.h"
  2. #define RSIZE_MAX 0x7fffffffffffffffUL
  3. errno_t memset_s(void* s, rsize_t smax, int c, rsize_t n) {
  4. if(!s || smax > RSIZE_MAX) {
  5. return EINVAL;
  6. }
  7. errno_t violation_present = 0;
  8. if(n > smax) {
  9. n = smax;
  10. violation_present = EINVAL;
  11. }
  12. volatile unsigned char* v = s;
  13. for(rsize_t i = 0u; i < n; ++i) {
  14. *v++ = (unsigned char)c;
  15. }
  16. return violation_present;
  17. }