sd: remove 'ssd' driver support
[unleashed/tickless.git] / usr / src / lib / libast / common / string / fmtgid.c
blob2132f7c284e2f2297e20f6bbf15499a8a4a2df6c
1 /***********************************************************************
2 * *
3 * This software is part of the ast package *
4 * Copyright (c) 1985-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
8 * *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
12 * *
13 * Information and Software Systems Research *
14 * AT&T Research *
15 * Florham Park NJ *
16 * *
17 * Glenn Fowler <gsf@research.att.com> *
18 * David Korn <dgk@research.att.com> *
19 * Phong Vo <kpv@research.att.com> *
20 * *
21 ***********************************************************************/
22 #pragma prototyped
24 * Glenn Fowler
25 * AT&T Bell Laboratories
27 * cached gid number -> name
30 #if defined(__STDPP__directive) && defined(__STDPP__hide)
31 __STDPP__directive pragma pp:hide getgrgid
32 #else
33 #define getgrgid ______getgrgid
34 #endif
36 #include <ast.h>
37 #include <cdt.h>
38 #include <grp.h>
40 #if defined(__STDPP__directive) && defined(__STDPP__hide)
41 __STDPP__directive pragma pp:nohide getgrgid
42 #else
43 #undef getgrgid
44 #endif
46 extern struct group* getgrgid(gid_t);
48 typedef struct Id_s
50 Dtlink_t link;
51 int id;
52 char name[1];
53 } Id_t;
56 * return gid name given gid number
59 char*
60 fmtgid(int gid)
62 register Id_t* ip;
63 register char* name;
64 register struct group* gr;
65 int z;
67 static Dt_t* dict;
68 static Dtdisc_t disc;
70 if (!dict)
72 disc.key = offsetof(Id_t, id);
73 disc.size = sizeof(int);
74 dict = dtopen(&disc, Dthash);
76 else if (ip = (Id_t*)dtmatch(dict, &gid))
77 return ip->name;
78 if (gr = getgrgid(gid))
80 name = gr->gr_name;
81 #if _WINIX
82 if (streq(name, "Administrators"))
83 name = "sys";
84 #endif
86 else if (gid == 0)
87 name = "sys";
88 else
90 name = fmtbuf(z = sizeof(gid) * 3 + 1);
91 sfsprintf(name, z, "%I*d", sizeof(gid), gid);
93 if (dict && (ip = newof(0, Id_t, 1, strlen(name))))
95 ip->id = gid;
96 strcpy(ip->name, name);
97 dtinsert(dict, ip);
98 return ip->name;
100 return name;