(linenum→info "unix/slp.c:2238")

glibc/2.7/login/logout.c

    1: /* Copyright (C) 1996, 1997, 2002, 2007 Free Software Foundation, Inc.
    2:    This file is part of the GNU C Library.
    3:    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
    4: 
    5:    The GNU C Library is free software; you can redistribute it and/or
    6:    modify it under the terms of the GNU Lesser General Public
    7:    License as published by the Free Software Foundation; either
    8:    version 2.1 of the License, or (at your option) any later version.
    9: 
   10:    The GNU C Library is distributed in the hope that it will be useful,
   11:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   12:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   13:    Lesser General Public License for more details.
   14: 
   15:    You should have received a copy of the GNU Lesser General Public
   16:    License along with the GNU C Library; if not, write to the Free
   17:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   18:    02111-1307 USA.  */
   19: 
   20: #include <errno.h>
   21: #include <string.h>
   22: #include <utmp.h>
   23: #include <sys/time.h>
   24: 
   25: int
   26: logout (const char *line)
   27: {
   28:   struct utmp tmp, utbuf;
   29:   struct utmp *ut;
   30:   int result = 0;
   31: 
   32:   /* Tell that we want to use the UTMP file.  */
   33:   if (utmpname (_PATH_UTMP) == -1)
   34:     return 0;
   35: 
   36:   /* Open UTMP file.  */
   37:   setutent ();
   38: 
   39:   /* Fill in search information.  */
   40: #if _HAVE_UT_TYPE - 0
   41:   tmp.ut_type = USER_PROCESS;
   42: #endif
   43:   strncpy (tmp.ut_line, line, sizeof tmp.ut_line);
   44: 
   45:   /* Read the record.  */
   46:   if (getutline_r (&tmp, &utbuf, &ut) >= 0)
   47:     {
   48:       /* Clear information about who & from where.  */
   49:       bzero (ut->ut_name, sizeof ut->ut_name);
   50: #if _HAVE_UT_HOST - 0
   51:       bzero (ut->ut_host, sizeof ut->ut_host);
   52: #endif
   53: #if _HAVE_UT_TV - 0
   54:       struct timeval tv;
   55:       __gettimeofday (&tv, NULL);
   56:       ut->ut_tv.tv_sec = tv.tv_sec;
   57:       ut->ut_tv.tv_usec = tv.tv_usec;
   58: #else
   59:       ut->ut_time = time (NULL);
   60: #endif
   61: #if _HAVE_UT_TYPE - 0
   62:       ut->ut_type = DEAD_PROCESS;
   63: #endif
   64: 
   65:       if (pututline (ut) != NULL)
   66:         result = 1;
   67:     }
   68: 
   69:   /* Close UTMP file.  */
   70:   endutent ();
   71: 
   72:   return result;
   73: }
Syntax (Markdown)