ft_memset.c
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* ft_memset.c :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: ll-hotel <ll-hotel@student.42lyon.fr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2024/02/23 03:41:09 by ll-hotel #+# #+# */ 9 /* Updated: 2024/02/28 23:57:39 by ll-hotel ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 void *ft_memset(void *s, int c, unsigned long n) 14 { 15 const unsigned short b2 = ((c << 8) & 0xff00) | (c & 0xff); 16 const unsigned int b4 = (b2 << 16) | b2; 17 const unsigned long long b8 = ((unsigned long long)b4 << 32) | b4; 18 unsigned char *p; 19 20 p = s; 21 if (n & 1) 22 *(p++) = c & 0xff; 23 if (n & 2) 24 *((unsigned short *)p) = b2; 25 p += n & 2; 26 if (n & 4) 27 *((unsigned int *)p) = b4; 28 p += n & 4; 29 n >>= 3; 30 while (n--) 31 { 32 *((unsigned long long *)p) = b8; 33 p += 8; 34 } 35 return (s); 36 }