فهرست منبع

eliminate mk*temp dependency on snprintf

this helps some tiny programs be even more tiny, and barly increases
code size even if both are used.
Rich Felker 13 سال پیش
والد
کامیت
bbdcc403ca
1فایلهای تغییر یافته به همراه4 افزوده شده و 3 حذف شده
  1. 4 3
      src/temp/mktemp.c

+ 4 - 3
src/temp/mktemp.c

@@ -11,9 +11,9 @@
 char *__mktemp(char *template)
 {
 	struct timespec ts;
-	size_t l = strlen(template);
+	size_t i, l = strlen(template);
 	int retries = 10000;
-	unsigned long r;
+	unsigned long r, t;
 
 	if (l < 6 || strcmp(template+l-6, "XXXXXX")) {
 		errno = EINVAL;
@@ -23,7 +23,8 @@ char *__mktemp(char *template)
 	clock_gettime(CLOCK_REALTIME, &ts);
 	r = ts.tv_nsec + (uintptr_t)&ts / 16 + (uintptr_t)template;
 	while (retries--) {
-		snprintf(template+l-6, 7, "%06lX", r & 0xffffff);
+		for (t=r, i=1; i<=6; i++, t>>=4)
+			template[l-i] = 'A'+(t&15);
 		if (access(template, F_OK) < 0) return template;
 		r = r * 1103515245 + 12345;
 	}