]>
Dogcows Code - chaz/tar/blob - src/names.c
1 /* Look up user and/or group names.
2 Copyright (C) 1988 Free Software Foundation
4 This file is part of GNU Tar.
6 GNU Tar is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 GNU Tar 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
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Tar; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
21 * Look up user and/or group names.
23 * This file should be modified for non-unix systems to do something
26 * @(#)names.c 1.3 10/30/87 - gnu
28 #include <sys/types.h>
31 extern char *strncpy();
34 /* Whole module goes away if NONAMES defined. Otherwise... */
38 static int saveuid
= -993;
39 static char saveuname
[TUNMLEN
];
40 static int my_uid
= -993;
42 static int savegid
= -993;
43 static char savegname
[TGNMLEN
];
44 static int my_gid
= -993;
46 #define myuid ( my_uid < 0? (my_uid = getuid()): my_uid )
47 #define mygid ( my_gid < 0? (my_gid = getgid()): my_gid )
50 * Look up a user or group name from a uid/gid, maintaining a cache.
51 * FIXME, for now it's a one-entry cache.
52 * FIXME2, the "-993" is to reduce the chance of a hit on the first lookup.
54 * This is ifdef'd because on Suns, it drags in about 38K of "yellow
55 * pages" code, roughly doubling the program size. Thanks guys.
63 extern struct passwd
*getpwuid ();
70 strncpy(saveuname
, pw
->pw_name
, TUNMLEN
);
72 strncpy(uname
, saveuname
, TUNMLEN
);
80 extern struct passwd
*getpwnam();
82 if (uname
[0] != saveuname
[0] /* Quick test w/o proc call */
83 || 0!=strncmp(uname
, saveuname
, TUNMLEN
)) {
84 strncpy(saveuname
, uname
, TUNMLEN
);
102 extern struct group
*getgrgid ();
104 if (gid
!= savegid
) {
110 strncpy(savegname
, gr
->gr_name
, TGNMLEN
);
112 (void) strncpy(gname
, savegname
, TGNMLEN
);
121 extern struct group
*getgrnam();
123 if (gname
[0] != savegname
[0] /* Quick test w/o proc call */
124 || 0!=strncmp(gname
, savegname
, TUNMLEN
)) {
125 strncpy(savegname
, gname
, TUNMLEN
);
126 gr
= getgrnam(gname
);
128 savegid
= gr
->gr_gid
;
This page took 0.045581 seconds and 5 git commands to generate.