瀏覽代碼

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)
 char *__mktemp(char *template)
 {
 {
 	struct timespec ts;
 	struct timespec ts;
-	size_t l = strlen(template);
+	size_t i, l = strlen(template);
 	int retries = 10000;
 	int retries = 10000;
-	unsigned long r;
+	unsigned long r, t;
 
 
 	if (l < 6 || strcmp(template+l-6, "XXXXXX")) {
 	if (l < 6 || strcmp(template+l-6, "XXXXXX")) {
 		errno = EINVAL;
 		errno = EINVAL;
@@ -23,7 +23,8 @@ char *__mktemp(char *template)
 	clock_gettime(CLOCK_REALTIME, &ts);
 	clock_gettime(CLOCK_REALTIME, &ts);
 	r = ts.tv_nsec + (uintptr_t)&ts / 16 + (uintptr_t)template;
 	r = ts.tv_nsec + (uintptr_t)&ts / 16 + (uintptr_t)template;
 	while (retries--) {
 	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;
 		if (access(template, F_OK) < 0) return template;
 		r = r * 1103515245 + 12345;
 		r = r * 1103515245 + 12345;
 	}
 	}