On Thu, 2014-02-20 at 11:53 +0400, Stanislav Kholmanskikh wrote:
> Hi!
>
> On 02/20/2014 06:10 AM, Zeng Linggang wrote:
> > When we call getgrgid_r() to verify whether the corresponding gid is
> > existent, if not, getgrgid_r() will return 0 or ENOENT or ESRCH or
> > EBADF or EPERM...
> >
> > But tst_get_unused_gid() only check return value 0, this is not complete.
> > For example, if the gid is not existent, getgrgid_r() in RHEL7 beta will
> > return ENOENT, which will cause tst_get_unused_gid failed incorrectly.
> > This is the same for getpwuid_r().
>
> Thank you.
>
> I was puzzled by these two sentences in the getgrgid_r man (RHEL6):
> "If no matching group record was found, these functions return 0
> and store NULL in *result. In case of error, an error number is
> returned, and NULL is stored in *result."
>
> Maybe update the man page according with
> http://www.gnu.org/software/libc/manual/html_node/Lookup-Group.html. I
> think that there the return values are described more clear.
>
> What do you think?
>
Hi,
So sorry for the late response.
I think there is a little different in RHEL7.0Beta.
If no gid was found, it returned ENOENT in RHEL7.0Beta.
[root@RHEL7U0Beta_zenglg tmp]# cat test.c
#include <stdlib.h>
#include <sys/types.h>
#include <grp.h>
#include <unistd.h>
#include <limits.h>
int main(void)
{
gid_t gid;
int s;
struct group grp;
char *buf;
long bufsize;
struct group *result;
bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
if (bufsize == -1)
bufsize = 16384;
buf = malloc(bufsize);
if (buf == NULL)
return -1;
for (gid = 0; gid <= UINT_MAX - 1; gid++) {
s = getgrgid_r(gid, &grp, buf, bufsize, &result);
if (result == NULL) {
free(buf);
printf("s: %d\tgid: %d\n", s, gid);
if (s == 0)
return gid;
else
return -1;
}
}
}
Here is the result that output:
[root@RHEL5U10GA_Intel64 tmp]# ./test
s: 0 gid: 11
[root@RHEL6U5GA_Intel64 tmp]# ./test
s: 0 gid: 13
[root@RHEL7U0Beta_zenglg tmp]# ./test
s: 2 gid: 13
Best regards,
Zeng
------------------------------------------------------------------------------
Subversion Kills Productivity. Get off Subversion & Make the Move to Perforce.
With Perforce, you get hassle-free workflows. Merge that actually works.
Faster operations. Version large binaries. Built-in WAN optimization and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list