blob: 6786b1e6ba4a5fd5c96ee715a977ed8f6acd1474 [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 Andersenc7bda1c2004-03-15 08:29:22 +00005 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
Eric Andersenaad1a882001-03-16 22:47:14 +00006 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 *
Eric Andersenaad1a882001-03-16 22:47:14 +000021 */
22
23#include <stdio.h>
24#include <errno.h>
Eric Andersena2a978a2001-04-05 06:08:14 +000025#include <unistd.h>
26/* Kernel headers before 2.1.mumble need this on the Alpha to get
27 _syscall* defined. */
28#define __LIBRARY__
Eric Andersena2a978a2001-04-05 06:08:14 +000029#include <sys/syscall.h>
Eric Andersenaad1a882001-03-16 22:47:14 +000030#include "libbb.h"
31
Mike Frysinger9b9e5472005-03-04 01:27:18 +000032int sysfs(int option, unsigned int fs_index, char * buf)
Eric Andersena2a978a2001-04-05 06:08:14 +000033{
Mike Frysingerddddb942005-08-27 18:19:01 +000034#ifndef __NR_pivot_root
35#warning This kernel does not support the sysfs syscall
36#warning -> The sysfs system call is being stubbed out...
37 bb_error_msg("\n\nTo make this application work, you will need to recompile\n"
38 "BusyBox with a kernel supporting the pivot_root system call.\n");
39 errno = ENOSYS;
40 return -1;
41#else
Eric Andersena2a978a2001-04-05 06:08:14 +000042 return(syscall(__NR_sysfs, option, fs_index, buf));
Mike Frysingerddddb942005-08-27 18:19:01 +000043#endif
Eric Andersena2a978a2001-04-05 06:08:14 +000044}
Eric Andersenaad1a882001-03-16 22:47:14 +000045
Eric Andersen82ab3d72003-05-26 18:48:56 +000046int pivot_root(const char * new_root,const char * put_old)
47{
Eric Andersene76c3b02001-04-05 03:14:39 +000048#ifndef __NR_pivot_root
49#warning This kernel does not support the pivot_root syscall
50#warning -> The pivot_root system call is being stubbed out...
Mike Frysinger9b9e5472005-03-04 01:27:18 +000051 /* BusyBox was compiled against a kernel that did not support
52 * the pivot_root system call. To make this application work,
53 * you will need to recompile with a kernel supporting the
54 * pivot_root system call.
55 */
56 bb_error_msg("\n\nTo make this application work, you will need to recompile\n"
57 "BusyBox with a kernel supporting the pivot_root system call.\n");
58 errno = ENOSYS;
59 return -1;
Eric Andersene76c3b02001-04-05 03:14:39 +000060#else
Mike Frysinger9b9e5472005-03-04 01:27:18 +000061 return(syscall(__NR_pivot_root, new_root, put_old));
62#endif /* __NR_pivot_root */
Eric Andersen82ab3d72003-05-26 18:48:56 +000063}
Eric Andersene76c3b02001-04-05 03:14:39 +000064
65
Mike Frysinger9b9e5472005-03-04 01:27:18 +000066/* These syscalls are not included in ancient glibc versions,
67 so we have to define them ourselves, whee ! */
Eric Andersen85e5e722003-07-22 08:56:55 +000068#if ((__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 1))
Eric Andersen82ab3d72003-05-26 18:48:56 +000069
Eric Andersen82ab3d72003-05-26 18:48:56 +000070int bdflush(int func, int data)
71{
Mike Frysinger9b9e5472005-03-04 01:27:18 +000072 return(syscall(__NR_bdflush, func, data));
Eric Andersen82ab3d72003-05-26 18:48:56 +000073}
Eric Andersene76c3b02001-04-05 03:14:39 +000074
75#ifndef __alpha__
76# define __NR_klogctl __NR_syslog
Eric Andersen82ab3d72003-05-26 18:48:56 +000077int klogctl(int type, char *b, int len)
78{
Mike Frysinger9b9e5472005-03-04 01:27:18 +000079 return(syscall(__NR_klogctl, type, b, len));
Eric Andersen82ab3d72003-05-26 18:48:56 +000080}
Mike Frysinger9b9e5472005-03-04 01:27:18 +000081#endif /* __alpha__ */
Eric Andersenaad1a882001-03-16 22:47:14 +000082
Eric Andersen82ab3d72003-05-26 18:48:56 +000083
Eric Andersenaad1a882001-03-16 22:47:14 +000084int umount2(const char * special_file, int flags)
85{
Mike Frysingera36ac0d2005-03-04 01:34:23 +000086#ifndef __NR_umount2
Eric Andersen82ab3d72003-05-26 18:48:56 +000087#warning This kernel does not support the umount2 syscall
88#warning -> The umount2 system call is being stubbed out...
Mike Frysinger9b9e5472005-03-04 01:27:18 +000089 /* BusyBox was compiled against a kernel that did not support
90 * the umount2 system call. To make this application work,
91 * you will need to recompile with a kernel supporting the
92 * umount2 system call.
93 */
94 bb_error_msg("\n\nTo make this application work, you will need to recompile\n"
95 "BusyBox with a kernel supporting the umount2 system call.\n");
96 errno = ENOSYS;
97 return -1;
Eric Andersen82ab3d72003-05-26 18:48:56 +000098#else
Mike Frysinger9b9e5472005-03-04 01:27:18 +000099 return(syscall(__NR_umount2, special_file, flags));
100#endif /* __NR_pivot_root */
Eric Andersen82ab3d72003-05-26 18:48:56 +0000101}
Eric Andersenaad1a882001-03-16 22:47:14 +0000102
Mike Frysinger9b9e5472005-03-04 01:27:18 +0000103#endif /* old glibc check */
Eric Andersene76c3b02001-04-05 03:14:39 +0000104
105
Eric Andersenaad1a882001-03-16 22:47:14 +0000106/* END CODE */
107/*
108Local Variables:
109c-file-style: "linux"
110c-basic-offset: 4
111tab-width: 4
112End:
113*/