⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oslib.c

📁 android-w.song.android.widget
💻 C
字号:
/* oslib.c - functions present only in some unix versions. *//* Copyright (C) 1995,2010 Free Software Foundation, Inc.   This file is part of GNU Bash, the Bourne Again SHell.   Bash is free software: you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation, either version 3 of the License, or   (at your option) any later version.   Bash is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with Bash.  If not, see <http://www.gnu.org/licenses/>.*/#include <config.h>#include <bashtypes.h>#ifndef _MINIX#  include <sys/param.h>#endif#if defined (HAVE_UNISTD_H)#  include <unistd.h>#endif#if defined (HAVE_LIMITS_H)#  include <limits.h>#endif#include <posixstat.h>#include <filecntl.h>#include <bashansi.h>#if !defined (HAVE_KILLPG)#  include <signal.h>#endif#include <stdio.h>#include <errno.h>#include <chartypes.h>#include <shell.h>#if !defined (errno)extern int errno;#endif /* !errno *//* Make the functions strchr and strrchr if they do not exist. */#if !defined (HAVE_STRCHR)char *strchr (string, c)     char *string;     int c;{  register char *s;  for (s = string; s && *s; s++)    if (*s == c)      return (s);  return ((char *) NULL);}char *strrchr (string, c)     char *string;     int c;{  register char *s, *t;  for (s = string, t = (char *)NULL; s && *s; s++)    if (*s == c)      t = s;  return (t);}#endif /* !HAVE_STRCHR */#if !defined (HAVE_DUP2) || defined (DUP2_BROKEN)/* Replacement for dup2 (), for those systems which either don't have it,   or supply one with broken behaviour. */intdup2 (fd1, fd2)     int fd1, fd2;{  int saved_errno, r;  /* If FD1 is not a valid file descriptor, then return immediately with     an error. */  if (fcntl (fd1, F_GETFL, 0) == -1)    return (-1);  if (fd2 < 0 || fd2 >= getdtablesize ())    {      errno = EBADF;      return (-1);    }  if (fd1 == fd2)    return (0);  saved_errno = errno;  (void) close (fd2);  r = fcntl (fd1, F_DUPFD, fd2);  if (r >= 0)    errno = saved_errno;  else    if (errno == EINVAL)      errno = EBADF;  /* Force the new file descriptor to remain open across exec () calls. */  SET_OPEN_ON_EXEC (fd2);  return (r);}#endif /* !HAVE_DUP2 *//* * Return the total number of available file descriptors. * * On some systems, like 4.2BSD and its descendents, there is a system call * that returns the size of the descriptor table: getdtablesize().  There are * lots of ways to emulate this on non-BSD systems. * * On System V.3, this can be obtained via a call to ulimit: *	return (ulimit(4, 0L)); * * On other System V systems, NOFILE is defined in /usr/include/sys/param.h * (this is what we assume below), so we can simply use it: *	return (NOFILE); * * On POSIX systems, there are specific functions for retrieving various * configuration parameters: *	return (sysconf(_SC_OPEN_MAX)); * */#if !defined (HAVE_GETDTABLESIZE)intgetdtablesize (){#  if defined (_POSIX_VERSION) && defined (HAVE_SYSCONF) && defined (_SC_OPEN_MAX)  return (sysconf(_SC_OPEN_MAX));	/* Posix systems use sysconf */#  else /* ! (_POSIX_VERSION && HAVE_SYSCONF && _SC_OPEN_MAX) */#    if defined (ULIMIT_MAXFDS)  return (ulimit (4, 0L));	/* System V.3 systems use ulimit(4, 0L) */#    else /* !ULIMIT_MAXFDS */#      if defined (NOFILE)	/* Other systems use NOFILE */  return (NOFILE);#      else /* !NOFILE */  return (20);			/* XXX - traditional value is 20 */#      endif /* !NOFILE */#    endif /* !ULIMIT_MAXFDS */#  endif /* ! (_POSIX_VERSION && _SC_OPEN_MAX) */}#endif /* !HAVE_GETDTABLESIZE */#if !defined (HAVE_BCOPY)#  if defined (bcopy)#    undef bcopy#  endifvoidbcopy (s,d,n)     char *d, *s;     int n;{  FASTCOPY (s, d, n);}#endif /* !HAVE_BCOPY */#if !defined (HAVE_BZERO)#  if defined (bzero)#    undef bzero#  endifvoidbzero (s, n)     char *s;     int n;{  register int i;  register char *r;  for (i = 0, r = s; i < n; i++)    *r++ = '\0';}#endif#if !defined (HAVE_GETHOSTNAME)#  if defined (HAVE_UNAME)#    include <sys/utsname.h>intgethostname (name, namelen)     char *name;     int namelen;{  int i;  struct utsname ut;  --namelen;  uname (&ut);  i = strlen (ut.nodename) + 1;  strncpy (name, ut.nodename, i < namelen ? i : namelen);  name[namelen] = '\0';  return (0);}#  else /* !HAVE_UNAME */intgethostname (name, namelen)     char *name;     int namelen;{  strncpy (name, "unknown", namelen);  name[namelen] = '\0';  return 0;}#  endif /* !HAVE_UNAME */#endif /* !HAVE_GETHOSTNAME */#if !defined (HAVE_KILLPG)intkillpg (pgrp, sig)     pid_t pgrp;     int sig;{  return (kill (-pgrp, sig));}#endif /* !HAVE_KILLPG */#if !defined (HAVE_MKFIFO) && defined (PROCESS_SUBSTITUTION)intmkfifo (path, mode)     char *path;     int mode;{#if defined (S_IFIFO)  return (mknod (path, (mode | S_IFIFO), 0));#else /* !S_IFIFO */  return (-1);#endif /* !S_IFIFO */}#endif /* !HAVE_MKFIFO && PROCESS_SUBSTITUTION */#define DEFAULT_MAXGROUPS 64intgetmaxgroups (){  static int maxgroups = -1;  if (maxgroups > 0)    return maxgroups;#if defined (HAVE_SYSCONF) && defined (_SC_NGROUPS_MAX)  maxgroups = sysconf (_SC_NGROUPS_MAX);#else#  if defined (NGROUPS_MAX)  maxgroups = NGROUPS_MAX;#  else /* !NGROUPS_MAX */#    if defined (NGROUPS)  maxgroups = NGROUPS;#    else /* !NGROUPS */  maxgroups = DEFAULT_MAXGROUPS;#    endif /* !NGROUPS */#  endif /* !NGROUPS_MAX */  #endif /* !HAVE_SYSCONF || !SC_NGROUPS_MAX */  if (maxgroups <= 0)    maxgroups = DEFAULT_MAXGROUPS;  return maxgroups;}longgetmaxchild (){  static long maxchild = -1L;  if (maxchild > 0)    return maxchild;#if defined (HAVE_SYSCONF) && defined (_SC_CHILD_MAX)  maxchild = sysconf (_SC_CHILD_MAX);#else#  if defined (CHILD_MAX)  maxchild = CHILD_MAX;#  else#    if defined (MAXUPRC)  maxchild = MAXUPRC;#    endif /* MAXUPRC */#  endif /* CHILD_MAX */#endif /* !HAVE_SYSCONF || !_SC_CHILD_MAX */  return (maxchild);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -