mirror of
https://github.com/sheumann/hush.git
synced 2024-09-12 00:55:11 +00:00
use "glibc errno" trick not only for ash, but for entire busybox
(add/remove: 1/1 grow/shrink: 37/37 up/down: 139/-228) Total: -89 bytes
This commit is contained in:
parent
c2f011aa03
commit
fad2b86c9e
@ -641,10 +641,19 @@ void run_applet_and_exit(const char *name, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __GLIBC__
|
||||||
|
/* Make it reside in R/W memory: */
|
||||||
|
int *const bb_errno __attribute__ ((section (".data")));
|
||||||
|
#endif
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
const char *s;
|
const char *s;
|
||||||
|
|
||||||
|
#ifdef __GLIBC__
|
||||||
|
(*(int **)&bb_errno) = __errno_location();
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !BB_MMU
|
#if !BB_MMU
|
||||||
/* NOMMU re-exec trick sets high-order bit in first byte of name */
|
/* NOMMU re-exec trick sets high-order bit in first byte of name */
|
||||||
if (argv[0][0] & 0x80) {
|
if (argv[0][0] & 0x80) {
|
||||||
|
@ -3,12 +3,8 @@
|
|||||||
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "unarchive.h"
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
|
#include "unarchive.h"
|
||||||
|
|
||||||
void data_skip(archive_handle_t *archive_handle)
|
void data_skip(archive_handle_t *archive_handle)
|
||||||
{
|
{
|
||||||
|
@ -3,11 +3,6 @@
|
|||||||
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
#include "unarchive.h"
|
#include "unarchive.h"
|
||||||
|
|
||||||
|
@ -15,10 +15,7 @@
|
|||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <unistd.h>
|
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <errno.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <getopt.h> /* struct option */
|
#include <getopt.h> /* struct option */
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
#include "libcoreutils/coreutils.h"
|
#include "libcoreutils/coreutils.h"
|
||||||
|
@ -10,11 +10,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
#include <stdio.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
int mktemp_main(int argc, char **argv);
|
int mktemp_main(int argc, char **argv);
|
||||||
int mktemp_main(int argc, char **argv)
|
int mktemp_main(int argc, char **argv)
|
||||||
|
@ -165,6 +165,14 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__GLIBC__)
|
||||||
|
/* glibc uses __errno_location() to get a ptr to errno */
|
||||||
|
/* We can just memorize it once - no multithreading in busybox :) */
|
||||||
|
extern int *const bb_errno;
|
||||||
|
#undef errno
|
||||||
|
#define errno (*bb_errno)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__GLIBC__) && __GLIBC__ < 2
|
#if defined(__GLIBC__) && __GLIBC__ < 2
|
||||||
int vdprintf(int d, const char *format, va_list ap);
|
int vdprintf(int d, const char *format, va_list ap);
|
||||||
#endif
|
#endif
|
||||||
|
@ -7,10 +7,6 @@
|
|||||||
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
|
|
||||||
void bb_error_msg(const char *s, ...)
|
void bb_error_msg(const char *s, ...)
|
||||||
|
@ -7,10 +7,6 @@
|
|||||||
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
|
|
||||||
void bb_perror_msg(const char *s, ...)
|
void bb_perror_msg(const char *s, ...)
|
||||||
|
@ -28,19 +28,12 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <syslog.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
#ifdef CONFIG_SELINUX
|
#if ENABLE_SELINUX
|
||||||
#include <selinux/selinux.h> /* for setexeccon */
|
#include <selinux/selinux.h> /* for setexeccon */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SELINUX
|
#if ENABLE_SELINUX
|
||||||
static security_context_t current_sid;
|
static security_context_t current_sid;
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -90,7 +83,7 @@ void run_shell(const char *shell, int loginshell, const char *command, const cha
|
|||||||
args[argno++] = *additional_args;
|
args[argno++] = *additional_args;
|
||||||
}
|
}
|
||||||
args[argno] = NULL;
|
args[argno] = NULL;
|
||||||
#ifdef CONFIG_SELINUX
|
#if ENABLE_SELINUX
|
||||||
if (current_sid && !setexeccon(current_sid)) {
|
if (current_sid && !setexeccon(current_sid)) {
|
||||||
freecon(current_sid);
|
freecon(current_sid);
|
||||||
execve(shell, (char **) args, environ);
|
execve(shell, (char **) args, environ);
|
||||||
|
@ -7,13 +7,8 @@
|
|||||||
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ssize_t safe_write(int fd, const void *buf, size_t count)
|
ssize_t safe_write(int fd, const void *buf, size_t count)
|
||||||
{
|
{
|
||||||
ssize_t n;
|
ssize_t n;
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
#include <selinux/selinux.h> /* for is_selinux_enabled() */
|
#include <selinux/selinux.h> /* for is_selinux_enabled() */
|
||||||
#include <selinux/get_context_list.h> /* for get_default_context() */
|
#include <selinux/get_context_list.h> /* for get_default_context() */
|
||||||
#include <selinux/flask.h> /* for security class definitions */
|
#include <selinux/flask.h> /* for security class definitions */
|
||||||
#include <errno.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -56,23 +56,12 @@
|
|||||||
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
#include "xregex.h"
|
#include "xregex.h"
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <fcntl.h>
|
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <signal.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <sys/sysmacros.h>
|
#include <sys/sysmacros.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,16 +11,10 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "libbb.h"
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
|
|
||||||
|
#include "libbb.h"
|
||||||
#include "libnetlink.h"
|
#include "libnetlink.h"
|
||||||
|
|
||||||
void rtnl_close(struct rtnl_handle *rth)
|
void rtnl_close(struct rtnl_handle *rth)
|
||||||
|
11
shell/ash.c
11
shell/ash.c
@ -127,13 +127,6 @@ static char optlist[NOPTS];
|
|||||||
|
|
||||||
/* ============ Misc data */
|
/* ============ Misc data */
|
||||||
|
|
||||||
#ifdef __GLIBC__
|
|
||||||
/* glibc sucks */
|
|
||||||
static int *dash_errno;
|
|
||||||
#undef errno
|
|
||||||
#define errno (*dash_errno)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static char nullstr[1]; /* zero length string */
|
static char nullstr[1]; /* zero length string */
|
||||||
static const char homestr[] = "HOME";
|
static const char homestr[] = "HOME";
|
||||||
static const char snlfmt[] = "%s\n";
|
static const char snlfmt[] = "%s\n";
|
||||||
@ -12734,10 +12727,6 @@ int ash_main(int argc, char **argv)
|
|||||||
struct jmploc jmploc;
|
struct jmploc jmploc;
|
||||||
struct stackmark smark;
|
struct stackmark smark;
|
||||||
|
|
||||||
#ifdef __GLIBC__
|
|
||||||
dash_errno = __errno_location();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if PROFILE
|
#if PROFILE
|
||||||
monitor(4, etext, profile_buf, sizeof(profile_buf), 50);
|
monitor(4, etext, profile_buf, sizeof(profile_buf), 50);
|
||||||
#endif
|
#endif
|
||||||
|
@ -8,12 +8,6 @@
|
|||||||
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "libbb.h"
|
|
||||||
#include <errno.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <pwd.h>
|
|
||||||
#include <grp.h>
|
|
||||||
|
|
||||||
/* X/OPEN tells us to use <sys/{types,ipc,sem}.h> for semctl() */
|
/* X/OPEN tells us to use <sys/{types,ipc,sem}.h> for semctl() */
|
||||||
/* X/OPEN tells us to use <sys/{types,ipc,msg}.h> for msgctl() */
|
/* X/OPEN tells us to use <sys/{types,ipc,msg}.h> for msgctl() */
|
||||||
/* X/OPEN tells us to use <sys/{types,ipc,shm}.h> for shmctl() */
|
/* X/OPEN tells us to use <sys/{types,ipc,shm}.h> for shmctl() */
|
||||||
@ -23,7 +17,7 @@
|
|||||||
#include <sys/msg.h>
|
#include <sys/msg.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
|
|
||||||
|
#include "libbb.h"
|
||||||
|
|
||||||
/*-------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------*/
|
||||||
/* SHM_DEST and SHM_LOCKED are defined in kernel headers,
|
/* SHM_DEST and SHM_LOCKED are defined in kernel headers,
|
||||||
|
@ -7,11 +7,6 @@
|
|||||||
* Licensed under GPL v2 or later, see file License for details.
|
* Licensed under GPL v2 or later, see file License for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <sys/personality.h>
|
#include <sys/personality.h>
|
||||||
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
|
Loading…
Reference in New Issue
Block a user