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

📄 bsd-misc.c

📁 OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。它用安全、加密的网络连接工具代替了 telnet、ftp、 rlogin、rsh 和 rcp 工具。OpenSSH 支持
💻 C
字号:
/* * Copyright (c) 1999-2004 Damien Miller <djm@mindrot.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */#include "includes.h"#include "xmalloc.h"RCSID("$Id: bsd-misc.c,v 1.26 2005/02/25 23:07:38 dtucker Exp $");#ifndef HAVE___PROGNAMEchar *__progname;#endif/* * NB. duplicate __progname in case it is an alias for argv[0] * Otherwise it may get clobbered by setproctitle() */char *ssh_get_progname(char *argv0){#ifdef HAVE___PROGNAME	extern char *__progname;	return xstrdup(__progname);#else	char *p;	if (argv0 == NULL)		return ("unknown");	/* XXX */	p = strrchr(argv0, '/');	if (p == NULL)		p = argv0;	else		p++;	return (xstrdup(p));#endif}#ifndef HAVE_SETLOGINint setlogin(const char *name){	return (0);}#endif /* !HAVE_SETLOGIN */#ifndef HAVE_INNETGRint innetgr(const char *netgroup, const char *host,             const char *user, const char *domain){	return (0);}#endif /* HAVE_INNETGR */#if !defined(HAVE_SETEUID) && defined(HAVE_SETREUID)int seteuid(uid_t euid){	return (setreuid(-1, euid));}#endif /* !defined(HAVE_SETEUID) && defined(HAVE_SETREUID) */#if !defined(HAVE_SETEGID) && defined(HAVE_SETRESGID)int setegid(uid_t egid){	return(setresgid(-1, egid, -1));}#endif /* !defined(HAVE_SETEGID) && defined(HAVE_SETRESGID) */#if !defined(HAVE_STRERROR) && defined(HAVE_SYS_ERRLIST) && defined(HAVE_SYS_NERR)const char *strerror(int e){	extern int sys_nerr;	extern char *sys_errlist[];		if ((e >= 0) && (e < sys_nerr))		return (sys_errlist[e]);	return ("unlisted error");}#endif#ifndef HAVE_UTIMESint utimes(char *filename, struct timeval *tvp){	struct utimbuf ub;	ub.actime = tvp[0].tv_sec;	ub.modtime = tvp[1].tv_sec;		return (utime(filename, &ub));}#endif #ifndef HAVE_TRUNCATEint truncate(const char *path, off_t length){	int fd, ret, saverrno;	fd = open(path, O_WRONLY);	if (fd < 0)		return (-1);	ret = ftruncate(fd, length);	saverrno = errno;	close(fd);	if (ret == -1)		errno = saverrno;	return(ret);}#endif /* HAVE_TRUNCATE */#if !defined(HAVE_NANOSLEEP) && !defined(HAVE_NSLEEP)int nanosleep(const struct timespec *req, struct timespec *rem){	int rc, saverrno;	extern int errno;	struct timeval tstart, tstop, tremain, time2wait;	TIMESPEC_TO_TIMEVAL(&time2wait, req)	(void) gettimeofday(&tstart, NULL);	rc = select(0, NULL, NULL, NULL, &time2wait);	if (rc == -1) {		saverrno = errno;		(void) gettimeofday (&tstop, NULL);		errno = saverrno;		tremain.tv_sec = time2wait.tv_sec - 			(tstop.tv_sec - tstart.tv_sec);		tremain.tv_usec = time2wait.tv_usec - 			(tstop.tv_usec - tstart.tv_usec);		tremain.tv_sec += tremain.tv_usec / 1000000L;		tremain.tv_usec %= 1000000L;	} else {		tremain.tv_sec = 0;		tremain.tv_usec = 0;	}	TIMEVAL_TO_TIMESPEC(&tremain, rem)	return(rc);}#endif#ifndef HAVE_TCGETPGRPpid_ttcgetpgrp(int fd){	int ctty_pgrp;	if (ioctl(fd, TIOCGPGRP, &ctty_pgrp) == -1)		return(-1);	else		return(ctty_pgrp);}#endif /* HAVE_TCGETPGRP */#ifndef HAVE_TCSENDBREAKinttcsendbreak(int fd, int duration){# if defined(TIOCSBRK) && defined(TIOCCBRK)	struct timeval sleepytime;	sleepytime.tv_sec = 0;	sleepytime.tv_usec = 400000;	if (ioctl(fd, TIOCSBRK, 0) == -1)		return (-1);	(void)select(0, 0, 0, 0, &sleepytime);	if (ioctl(fd, TIOCCBRK, 0) == -1)		return (-1);	return (0);# else	return -1;# endif}#endif /* HAVE_TCSENDBREAK */mysig_tmysignal(int sig, mysig_t act){#ifdef HAVE_SIGACTION	struct sigaction sa, osa;	if (sigaction(sig, NULL, &osa) == -1)		return (mysig_t) -1;	if (osa.sa_handler != act) {		memset(&sa, 0, sizeof(sa));		sigemptyset(&sa.sa_mask);		sa.sa_flags = 0;#ifdef SA_INTERRUPT		if (sig == SIGALRM)			sa.sa_flags |= SA_INTERRUPT;#endif		sa.sa_handler = act;		if (sigaction(sig, &sa, NULL) == -1)			return (mysig_t) -1;	}	return (osa.sa_handler);#else	#undef signal	return (signal(sig, act));#endif}

⌨️ 快捷键说明

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