1 /* Copyright (C) 1996-1998,2000,2001,2002,2004 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3 Contributed by Ulrich Drepper <drepper@cygnus.com>
4 and Paul Janzen <pcj@primenet.com>, 1996.
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with the GNU C Library; if not, write to the Free
18 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21 #include <bits/libc-lock.h>
25 #include "utmp-private.h"
28 /* Functions defined here. */
29 static int setutent_unknown (void);
30 static int getutent_r_unknown (struct utmp
*buffer
, struct utmp
**result
);
31 static int getutid_r_unknown (const struct utmp
*line
, struct utmp
*buffer
,
32 struct utmp
**result
);
33 static int getutline_r_unknown (const struct utmp
*id
, struct utmp
*buffer
,
34 struct utmp
**result
);
35 static struct utmp
*pututline_unknown (const struct utmp
*data
);
36 static void endutent_unknown (void);
38 /* Initial Jump table. */
39 const struct utfuncs __libc_utmp_unknown_functions
=
50 /* Currently selected backend. */
51 const struct utfuncs
*__libc_utmp_jump_table
= &__libc_utmp_unknown_functions
;
53 /* We need to protect the opening of the file. */
54 __libc_lock_define_initialized (, __libc_utmp_lock attribute_hidden
)
58 setutent_unknown (void)
62 result
= (*__libc_utmp_file_functions
.setutent
) ();
64 __libc_utmp_jump_table
= &__libc_utmp_file_functions
;
71 getutent_r_unknown (struct utmp
*buffer
, struct utmp
**result
)
73 /* The backend was not yet initialized. */
74 if (setutent_unknown ())
75 return (*__libc_utmp_jump_table
->getutent_r
) (buffer
, result
);
84 getutid_r_unknown (const struct utmp
*id
, struct utmp
*buffer
,
87 /* The backend was not yet initialized. */
88 if (setutent_unknown ())
89 return (*__libc_utmp_jump_table
->getutid_r
) (id
, buffer
, result
);
98 getutline_r_unknown (const struct utmp
*line
, struct utmp
*buffer
,
101 /* The backend was not yet initialized. */
102 if (setutent_unknown ())
103 return (*__libc_utmp_jump_table
->getutline_r
) (line
, buffer
, result
);
112 pututline_unknown (const struct utmp
*data
)
114 /* The backend was not yet initialized. */
115 if (setutent_unknown ())
116 return (*__libc_utmp_jump_table
->pututline
) (data
);
124 endutent_unknown (void)
133 __libc_lock_lock (__libc_utmp_lock
);
135 (*__libc_utmp_jump_table
->setutent
) ();
137 __libc_lock_unlock (__libc_utmp_lock
);
139 weak_alias (__setutent
, setutent
)
143 __getutent_r (struct utmp
*buffer
, struct utmp
**result
)
147 __libc_lock_lock (__libc_utmp_lock
);
149 retval
= (*__libc_utmp_jump_table
->getutent_r
) (buffer
, result
);
151 __libc_lock_unlock (__libc_utmp_lock
);
155 weak_alias (__getutent_r
, getutent_r
)
159 __pututline (const struct utmp
*data
)
163 __libc_lock_lock (__libc_utmp_lock
);
165 buffer
= (*__libc_utmp_jump_table
->pututline
) (data
);
167 __libc_lock_unlock (__libc_utmp_lock
);
171 weak_alias (__pututline
, pututline
)
177 __libc_lock_lock (__libc_utmp_lock
);
179 (*__libc_utmp_jump_table
->endutent
) ();
180 __libc_utmp_jump_table
= &__libc_utmp_unknown_functions
;
182 __libc_lock_unlock (__libc_utmp_lock
);
184 weak_alias (__endutent
, endutent
)