Added dumb group functions - they only know one group: "users" (should be pretty similar to R5).
Implemented and added functions from inttypes.h (not everything is working correctly, though). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8787 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
929525b836
commit
39536410a6
@ -8,6 +8,8 @@ KernelMergeObject posix_main.o :
|
|||||||
errno.c
|
errno.c
|
||||||
fnmatch.c
|
fnmatch.c
|
||||||
glob.c
|
glob.c
|
||||||
|
grp.c
|
||||||
|
inttypes.c
|
||||||
poll.c
|
poll.c
|
||||||
pwd.c
|
pwd.c
|
||||||
syslog.cpp
|
syslog.cpp
|
||||||
|
121
src/kernel/libroot/posix/grp.c
Normal file
121
src/kernel/libroot/posix/grp.c
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
||||||
|
** Distributed under the terms of the Haiku License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Dumb group functions - only know the "users" group with group ID 0 right
|
||||||
|
* now - this should definitely be thought over :-)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <SupportDefs.h>
|
||||||
|
|
||||||
|
#include <grp.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
static int32 sGroupIndex;
|
||||||
|
static struct group sGroup;
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
get_users(struct group *gr)
|
||||||
|
{
|
||||||
|
static char *nothing = "";
|
||||||
|
|
||||||
|
gr->gr_name = "users";
|
||||||
|
gr->gr_passwd = NULL;
|
||||||
|
gr->gr_gid = 0;
|
||||||
|
gr->gr_mem = ¬hing;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
init_users()
|
||||||
|
{
|
||||||
|
if (sGroupIndex == 0) {
|
||||||
|
// initial construction of the group
|
||||||
|
get_users(&sGroup);
|
||||||
|
sGroupIndex = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct group *
|
||||||
|
getgrgid(gid_t gid)
|
||||||
|
{
|
||||||
|
if (gid != 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
init_users();
|
||||||
|
return &sGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
getgrgid_r(gid_t gid, struct group *group, char *buffer,
|
||||||
|
size_t bufferSize, struct group **_result)
|
||||||
|
{
|
||||||
|
if (gid != 0) {
|
||||||
|
*_result = NULL;
|
||||||
|
return B_ENTRY_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
get_users(group);
|
||||||
|
*_result = group;
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct group *
|
||||||
|
getgrnam(const char *name)
|
||||||
|
{
|
||||||
|
if (strcmp("users", name))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
init_users();
|
||||||
|
return &sGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
getgrnam_r(const char *name, struct group *group, char *buffer,
|
||||||
|
size_t bufferSize, struct group **_result)
|
||||||
|
{
|
||||||
|
if (strcmp("users", name)) {
|
||||||
|
*_result = NULL;
|
||||||
|
return B_ENTRY_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
get_users(group);
|
||||||
|
*_result = group;
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct group *
|
||||||
|
getgrent(void)
|
||||||
|
{
|
||||||
|
if (sGroupIndex > 1)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
init_users();
|
||||||
|
sGroupIndex++;
|
||||||
|
|
||||||
|
return &sGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
setgrent(void)
|
||||||
|
{
|
||||||
|
init_users();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
endgrent(void)
|
||||||
|
{
|
||||||
|
init_users();
|
||||||
|
}
|
||||||
|
|
49
src/kernel/libroot/posix/inttypes.c
Normal file
49
src/kernel/libroot/posix/inttypes.c
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
||||||
|
** Distributed under the terms of the Haiku License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
intmax_t
|
||||||
|
imaxabs(intmax_t number)
|
||||||
|
{
|
||||||
|
return number > 0 ? number : -number;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
imaxdiv_t
|
||||||
|
imaxdiv(intmax_t numer, intmax_t denom)
|
||||||
|
{
|
||||||
|
imaxdiv_t result;
|
||||||
|
|
||||||
|
result.quot = numer / denom;
|
||||||
|
result.rem = numer % denom;
|
||||||
|
|
||||||
|
if (numer >= 0 && result.rem < 0) {
|
||||||
|
result.quot++;
|
||||||
|
result.rem -= denom;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
intmax_t
|
||||||
|
strtoimax(const char *string, char **_end, int base)
|
||||||
|
{
|
||||||
|
// ToDo: implement me properly!
|
||||||
|
return (intmax_t)strtol(string, _end, base);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uintmax_t
|
||||||
|
strtoumax(const char *string, char **_end, int base)
|
||||||
|
{
|
||||||
|
// ToDo: implement me properly!
|
||||||
|
return (intmax_t)strtoul(string, _end, base);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user