forked from aosp-mirror/platform_bionic
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Now <utmpx.h> isn't any more useful on Android than <utmp.h> is, but it is POSIX, and -- importantly -- we can implement it with just a header file, so code can use it on every existing API level. macOS does indeed only have the <utmpx.h> functions (although it does still have the <utmp.h> header!), so potentially portable code might want <utmpx.h> on Android. (glibc/musl both have both headers.) Bug: landley/toybox#213 Test: treehugger Change-Id: Iaa88167708182009a63e2e1a15f11186b251ed02
- Loading branch information
1 parent
97c6902
commit dbf5b2e
Showing
8 changed files
with
278 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
/* | ||
* Copyright (C) 2023 The Android Open Source Project | ||
* All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* * Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* * Redistributions in binary form must reproduce the above copyright | ||
* notice, this list of conditions and the following disclaimer in | ||
* the documentation and/or other materials provided with the | ||
* distribution. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS | ||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED | ||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | ||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
* SUCH DAMAGE. | ||
*/ | ||
|
||
#pragma once | ||
|
||
/** | ||
* @file utmpx.h | ||
* @brief No-op implementation of POSIX login records. | ||
*/ | ||
|
||
#include <sys/cdefs.h> | ||
#include <sys/types.h> | ||
#include <time.h> | ||
|
||
#define EMPTY 0 | ||
#define RUN_LVL 1 | ||
#define BOOT_TIME 2 | ||
#define NEW_TIME 3 | ||
#define OLD_TIME 4 | ||
#define INIT_PROCESS 5 | ||
#define LOGIN_PROCESS 6 | ||
#define USER_PROCESS 7 | ||
#define DEAD_PROCESS 8 | ||
#define ACCOUNTING 9 | ||
|
||
struct utmpx { | ||
short ut_type; | ||
pid_t ut_pid; | ||
char ut_line[32]; | ||
char ut_id[4]; | ||
char ut_user[32]; | ||
char ut_host[256]; | ||
|
||
struct { | ||
short e_termination; | ||
short e_exit; | ||
} ut_exit; | ||
|
||
long ut_session; | ||
struct timeval ut_tv; | ||
|
||
int32_t ut_addr_v6[4]; | ||
char unused[20]; | ||
}; | ||
|
||
__BEGIN_DECLS | ||
|
||
/** | ||
* Does nothing. | ||
*/ | ||
void setutxent(void) __RENAME(setutent); | ||
|
||
/** | ||
* Does nothing and returns null. | ||
*/ | ||
struct utmpx* _Nullable getutxent(void) __RENAME(getutent); | ||
|
||
/** | ||
* Does nothing and returns null. | ||
*/ | ||
struct utmpx* _Nullable getutxid(const struct utmpx* _Nonnull __entry) __RENAME(getutent); | ||
|
||
/** | ||
* Does nothing and returns null. | ||
*/ | ||
struct utmpx* _Nullable getutxline(const struct utmpx* _Nonnull __entry) __RENAME(getutent); | ||
|
||
/** | ||
* Does nothing and returns null. | ||
*/ | ||
struct utmpx* _Nullable pututxline(const struct utmpx* _Nonnull __entry) __RENAME(pututline); | ||
|
||
/** | ||
* Does nothing. | ||
*/ | ||
void endutxent(void) __RENAME(endutent); | ||
|
||
__END_DECLS |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
/* | ||
* Copyright (C) 2023 The Android Open Source Project | ||
* All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* * Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* * Redistributions in binary form must reproduce the above copyright | ||
* notice, this list of conditions and the following disclaimer in | ||
* the documentation and/or other materials provided with the | ||
* distribution. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS | ||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED | ||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | ||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
* SUCH DAMAGE. | ||
*/ | ||
|
||
#include <utmpx.h> | ||
|
||
#include "header_checks.h" | ||
|
||
static void utmpx_h() { | ||
TYPE(struct utmpx); | ||
STRUCT_MEMBER_ARRAY(struct utmpx, char/*[]*/, ut_user); | ||
STRUCT_MEMBER_ARRAY(struct utmpx, char/*[]*/, ut_id); | ||
STRUCT_MEMBER_ARRAY(struct utmpx, char/*[]*/, ut_line); | ||
STRUCT_MEMBER(struct utmpx, pid_t, ut_pid); | ||
STRUCT_MEMBER(struct utmpx, short, ut_type); | ||
#if !defined(__GLIBC__) | ||
// POSIX says struct timeval, but glibc has an anonymous struct. | ||
STRUCT_MEMBER(struct utmpx, struct timeval, ut_tv); | ||
#endif | ||
|
||
TYPE(pid_t); | ||
TYPE(struct timeval); | ||
|
||
MACRO(EMPTY); | ||
MACRO(BOOT_TIME); | ||
MACRO(OLD_TIME); | ||
MACRO(NEW_TIME); | ||
MACRO(USER_PROCESS); | ||
MACRO(INIT_PROCESS); | ||
MACRO(LOGIN_PROCESS); | ||
MACRO(DEAD_PROCESS); | ||
|
||
FUNCTION(endutxent, void (*f)(void)); | ||
FUNCTION(getutxent, struct utmpx* (*f)(void)); | ||
FUNCTION(getutxid, struct utmpx* (*f)(const struct utmpx*)); | ||
FUNCTION(getutxline, struct utmpx* (*f)(const struct utmpx*)); | ||
FUNCTION(pututxline, struct utmpx* (*f)(const struct utmpx*)); | ||
FUNCTION(setutxent, void (*f)(void)); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
/* | ||
* Copyright (C) 2023 The Android Open Source Project | ||
* All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* * Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* * Redistributions in binary form must reproduce the above copyright | ||
* notice, this list of conditions and the following disclaimer in | ||
* the documentation and/or other materials provided with the | ||
* distribution. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS | ||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED | ||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | ||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
* SUCH DAMAGE. | ||
*/ | ||
|
||
#include <gtest/gtest.h> | ||
|
||
#include <utmpx.h> | ||
|
||
TEST(utmpx, smoke) { | ||
// Our utmpx "implementation" just calls the utmp no-op functions. | ||
setutxent(); | ||
utmpx empty = {.ut_type = EMPTY}; | ||
ASSERT_EQ(NULL, getutxent()); | ||
ASSERT_EQ(NULL, getutxid(&empty)); | ||
ASSERT_EQ(NULL, getutxline(&empty)); | ||
endutxent(); | ||
ASSERT_EQ(NULL, pututxline(&empty)); | ||
} |