github.com/afumu/libc@v0.0.6/musl/src/temp/mkostemps.c (about)

     1  #define _BSD_SOURCE
     2  #include <stdlib.h>
     3  #include <string.h>
     4  #include <fcntl.h>
     5  #include <unistd.h>
     6  #include <errno.h>
     7  
     8  int __mkostemps(char *template, int len, int flags)
     9  {
    10  	size_t l = strlen(template);
    11  	if (l<6 || len>l-6 || memcmp(template+l-len-6, "XXXXXX", 6)) {
    12  		errno = EINVAL;
    13  		return -1;
    14  	}
    15  
    16  	flags -= flags & O_ACCMODE;
    17  	int fd, retries = 100;
    18  	do {
    19  		__randname(template+l-len-6);
    20  		if ((fd = open(template, flags | O_RDWR | O_CREAT | O_EXCL, 0600))>=0)
    21  			return fd;
    22  	} while (--retries && errno == EEXIST);
    23  
    24  	memcpy(template+l-len-6, "XXXXXX", 6);
    25  	return -1;
    26  }
    27  
    28  weak_alias(__mkostemps, mkostemps);
    29  weak_alias(__mkostemps, mkostemps64);