4 #define FIX(x) (gr->gr_##x = gr->gr_##x-line+buf)
6 static int getgr_r(const char *name
, gid_t gid
, struct group
*gr
, char *buf
, size_t size
, struct group
**res
)
16 pthread_setcancelstate(PTHREAD_CANCEL_DISABLE
, &cs
);
18 rv
= __getgr_a(name
, gid
, gr
, &line
, &len
, &mem
, &nmem
, res
);
19 if (*res
&& size
< len
+ (nmem
+1)*sizeof(char *) + 32) {
24 buf
+= (16-(uintptr_t)buf
)%16;
25 gr
->gr_mem
= (void *)buf
;
26 buf
+= (nmem
+1)*sizeof(char *);
27 memcpy(buf
, line
, len
);
30 for (i
=0; mem
[i
]; i
++)
31 gr
->gr_mem
[i
] = mem
[i
]-line
+buf
;
36 pthread_setcancelstate(cs
, 0);
41 int getgrnam_r(const char *name
, struct group
*gr
, char *buf
, size_t size
, struct group
**res
)
43 return getgr_r(name
, 0, gr
, buf
, size
, res
);
46 int getgrgid_r(gid_t gid
, struct group
*gr
, char *buf
, size_t size
, struct group
**res
)
48 return getgr_r(0, gid
, gr
, buf
, size
, res
);