Kaynağa Gözat

make utent.c, getpass.c use __uc_malloc

Denis Vlasenko 18 yıl önce
ebeveyn
işleme
249c30a44a
2 değiştirilmiş dosya ile 14 ekleme ve 6 silme
  1. 8 4
      libc/misc/utmp/utent.c
  2. 6 2
      libc/unistd/getpass.c

+ 8 - 4
libc/misc/utmp/utent.c

@@ -14,6 +14,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
+#include <malloc.h>
 #include <fcntl.h>
 #include <paths.h>
 #include <errno.h>
@@ -36,9 +37,10 @@ __UCLIBC_MUTEX_STATIC(utmplock, PTHREAD_MUTEX_INITIALIZER);
 
 
 /* Some global crap */
-static int static_fd = -1;
-static struct utmp static_utmp;
 static const char default_file_name[] = _PATH_UTMP;
+
+static int static_fd = -1;
+static struct utmp *static_utmp;
 static const char *static_ut_name = (const char *) default_file_name;
 
 /* This function must be called with the LOCK held */
@@ -89,9 +91,11 @@ static struct utmp *__getutent(int utmp_fd)
 	return NULL;
     }
 
-    if (read(utmp_fd, (char *) &static_utmp, sizeof(struct utmp)) == sizeof(struct utmp))
+    free(static_utmp);
+    static_utmp = __uc_malloc(sizeof(*static_utmp));
+    if (read(utmp_fd, (char *) static_utmp, sizeof(*static_utmp)) == sizeof(*static_utmp))
     {
-	ret = &static_utmp;
+	ret = static_utmp;
     }
 
     return ret;

+ 6 - 2
libc/unistd/getpass.c

@@ -20,7 +20,7 @@
 #include <string.h>
 #include <termios.h>
 #include <unistd.h>
-#include <string.h>
+#include <malloc.h>
 
 #if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
 
@@ -52,12 +52,16 @@ char *
 getpass (prompt)
      const char *prompt;
 {
+  static char *buf;
+
   FILE *in, *out;
   struct termios s, t;
   int tty_changed;
-  static char buf[PWD_BUFFER_SIZE];
   int nread;
 
+  free(buf);
+  buf = __uc_malloc(PWD_BUFFER_SIZE);
+
   /* Try to write to and read from the terminal if we can.
      If we can't open the terminal, use stderr and stdin.  */