blob: 2434cb4531251779b33d3020840779128fa55df3 [file] [log] [blame]
Eric Andersenaad1a882001-03-16 22:47:14 +00001/* vi: set sw=4 ts=4: */
2/*
Eric Andersena2a978a2001-04-05 06:08:14 +00003 * some system calls possibly missing from libc
Eric Andersenaad1a882001-03-16 22:47:14 +00004 *
Eric Andersenbdfd0d72001-10-24 05:00:29 +00005 * Copyright (C) 1999,2000 by Lineo, inc. and Erik Andersen
6 * Copyright (C) 1999,2000,2001 by Erik Andersen <andersee@debian.org>
Eric Andersenaad1a882001-03-16 22:47:14 +00007 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 *
Eric Andersenaad1a882001-03-16 22:47:14 +000022 */
23
24#include <stdio.h>
25#include <errno.h>
Eric Andersena2a978a2001-04-05 06:08:14 +000026#include <unistd.h>
27/* Kernel headers before 2.1.mumble need this on the Alpha to get
28 _syscall* defined. */
29#define __LIBRARY__
Eric Andersena2a978a2001-04-05 06:08:14 +000030#include <sys/syscall.h>
Eric Andersen806c74f2002-03-12 00:35:40 +000031#if __GNU_LIBRARY__ < 5
32/* This is needed for libc5 */
Eric Andersena2a978a2001-04-05 06:08:14 +000033#include <asm/unistd.h>
Manuel Novoa III a2949aa2001-06-29 18:59:32 +000034#endif
Eric Andersenaad1a882001-03-16 22:47:14 +000035#include "libbb.h"
36
Eric Andersena2a978a2001-04-05 06:08:14 +000037int sysfs( int option, unsigned int fs_index, char * buf)
38{
39 return(syscall(__NR_sysfs, option, fs_index, buf));
40}
Eric Andersenaad1a882001-03-16 22:47:14 +000041
Eric Andersen82ab3d72003-05-26 18:48:56 +000042int pivot_root(const char * new_root,const char * put_old)
43{
Eric Andersene76c3b02001-04-05 03:14:39 +000044#ifndef __NR_pivot_root
45#warning This kernel does not support the pivot_root syscall
46#warning -> The pivot_root system call is being stubbed out...
Eric Andersen82ab3d72003-05-26 18:48:56 +000047 /* BusyBox was compiled against a kernel that did not support
48 * the pivot_root system call. To make this application work,
49 * you will need to recompile with a kernel supporting the
50 * pivot_root system call.
51 */
52 bb_error_msg("\n\nTo make this application work, you will need to recompile\n"
53 "BusyBox with a kernel supporting the pivot_root system call.\n");
54 errno=ENOSYS;
55 return -1;
Eric Andersene76c3b02001-04-05 03:14:39 +000056#else
Eric Andersen82ab3d72003-05-26 18:48:56 +000057 return(syscall(__NR_pivot_root, new_root, put_old));
Eric Andersene76c3b02001-04-05 03:14:39 +000058#endif
Eric Andersen82ab3d72003-05-26 18:48:56 +000059}
Eric Andersene76c3b02001-04-05 03:14:39 +000060
61
62
Eric Andersen831ed162001-04-05 22:38:32 +000063#if __GNU_LIBRARY__ < 5 || ((__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 1))
Eric Andersen82ab3d72003-05-26 18:48:56 +000064
Eric Andersene76c3b02001-04-05 03:14:39 +000065/* These syscalls are not included as part of libc5 */
Eric Andersen82ab3d72003-05-26 18:48:56 +000066int bdflush(int func, int data)
67{
68 return(syscall(__NR_bdflush, func, data));
69}
Eric Andersene76c3b02001-04-05 03:14:39 +000070
71#ifndef __alpha__
72# define __NR_klogctl __NR_syslog
Eric Andersen82ab3d72003-05-26 18:48:56 +000073int klogctl(int type, char *b, int len)
74{
75 return(syscall(__NR_klogctl, type, b, len));
76}
Eric Andersene76c3b02001-04-05 03:14:39 +000077#endif
Eric Andersenaad1a882001-03-16 22:47:14 +000078
Eric Andersen82ab3d72003-05-26 18:48:56 +000079
Eric Andersenaad1a882001-03-16 22:47:14 +000080int umount2(const char * special_file, int flags)
81{
Eric Andersen82ab3d72003-05-26 18:48:56 +000082#ifndef __NR_pivot_root
83#warning This kernel does not support the umount2 syscall
84#warning -> The umount2 system call is being stubbed out...
85 /* BusyBox was compiled against a kernel that did not support
86 * the umount2 system call. To make this application work,
87 * you will need to recompile with a kernel supporting the
88 * umount2 system call.
89 */
90 bb_error_msg("\n\nTo make this application work, you will need to recompile\n"
91 "BusyBox with a kernel supporting the umount2 system call.\n");
92 errno=ENOSYS;
93 return -1;
94#else
95 return(syscall(__NR_umount2, special_file, flags));
Eric Andersenaad1a882001-03-16 22:47:14 +000096#endif
Eric Andersen82ab3d72003-05-26 18:48:56 +000097}
Eric Andersenaad1a882001-03-16 22:47:14 +000098
Eric Andersene76c3b02001-04-05 03:14:39 +000099
100#endif /* __GNU_LIBRARY__ < 5 */
101
102
Eric Andersenaad1a882001-03-16 22:47:14 +0000103/* END CODE */
104/*
105Local Variables:
106c-file-style: "linux"
107c-basic-offset: 4
108tab-width: 4
109End:
110*/