Procházet zdrojové kódy

libc_utmp: Fix getutmp and getutmpx for x86_64

On x86_64, when WORDSIZE_COMPAT32 is enabled, the ut_tv field
of 'struct utmp' and 'struct utmpx' are defined as two nested structs
instead of being defined as 'struct timeval', so it is not possible to
directly assign the two ut_tv values.
This patch split the assignment by setting each fields (tv_sec, tv_usec)
of the ut_tv filed separately
It is als compatible with 'struct timeval' usage.

Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Carmelo Amoroso před 15 roky
rodič
revize
5dea871ac7
1 změnil soubory, kde provedl 4 přidání a 2 odebrání
  1. 4 2
      libc/misc/utmp/utxent.c

+ 4 - 2
libc/misc/utmp/utxent.c

@@ -71,7 +71,8 @@ void getutmp (const struct utmpx *utmpx, struct utmp *utmp)
 	memcpy (utmp->ut_host, utmpx->ut_host, sizeof (utmp->ut_host));
 #endif
 #if _HAVE_UT_TV - 0
-	utmp->ut_tv = utmpx->ut_tv;
+	utmp->ut_tv.tv_sec = utmpx->ut_tv.tv_sec;
+	utmp->ut_tv.tv_usec = utmpx->ut_tv.tv_usec;
 #else
 	utmp->ut_time = utmpx->ut_time;
 #endif
@@ -97,7 +98,8 @@ void getutmpx (const struct utmp *utmp, struct utmpx *utmpx)
 	memcpy (utmpx->ut_host, utmp->ut_host, sizeof (utmp->ut_host));
 #endif
 #if _HAVE_UT_TV - 0
-	utmpx->ut_tv = utmp->ut_tv;
+	utmpx->ut_tv.tv_sec = utmp->ut_tv.tv_sec;
+	utmpx->ut_tv.tv_usec = utmp->ut_tv.tv_usec;
 #else
 	utmpx->ut_time = utmp->ut_time;
 #endif