Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37435144
en ru br
Репозитории ALT
S:1.3-alt3
5.1: 1.3-alt1.0
4.1: 1.3-alt1.0
4.0: 1.3-alt1.0
3.0: 0.17-ipl4mdk
www.altlinux.org/Changes

Группа :: Сети/Прочее
Пакет: finger

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: finger-utf8_segfault.patch
Скачать


--- finger/sprint.c
+++ finger/sprint.c
@@ -49,6 +49,7 @@
   PERSON *pn;
   WHERE *w;
   int cnt;
+  int i;
   char *p;
   PERSON **list;
 
@@ -73,6 +74,9 @@
 #define	MAXREALNAME	20
 #define MAXLOGINNAME    10
 #define	MAXHOSTNAME	20
+  char *tmp = malloc( sizeof( char ) * MAXREALNAME );
+
+
   printf ("%-*s %-*s %s %s\n", MAXLOGINNAME, "Login", MAXREALNAME,
 	  "Name", " Tty      Idle  Login Time  ",
 	  (oflag) ? "Office     Office Phone" : "Where");
@@ -81,9 +85,35 @@
       pn = list[cnt];
       for (w = pn->whead; w != NULL; w = w->next)
 	{
-	  printf ("%-*.*s %-*.*s ", MAXLOGINNAME, UT_NAMESIZE,
-		  vs (pn->name), MAXREALNAME, MAXREALNAME,
-		  pn->realname ? vs (pn->realname) : "");
+
+      if( strlen(pn->name) > MAXLOGINNAME )
+      {
+        strncpy( tmp, pn->name, MAXLOGINNAME);
+        printf( "%s ", tmp );
+      }
+      else
+      {
+        printf( "%s ", pn->name );
+        for( i = strlen( pn->name ); i < MAXLOGINNAME; i ++ )
+        {
+          printf( " " );
+        }
+      }
+
+      if( strlen(pn->realname) > MAXREALNAME )
+      {
+        strncpy( tmp, pn->realname, MAXREALNAME);
+        printf( "%s ", tmp );
+      }
+      else
+      {
+        printf( "%s ", pn->realname );
+        for( i = strlen( pn->realname ); i < MAXREALNAME; i ++ )
+        {
+          printf( " " );
+        }
+      }
+
 	  if (!w->loginat)
 	    {
 	      printf ("  *     *  No logins   ");
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin