KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17
System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64
User : nobody ( 99)
PHP Version : 5.2.17
Disable Function : NONE
Directory :  /proc/22697/root/usr/include/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //proc/22697/root/usr/include/baudboy.h
/* Copyright (C) 2001 Red Hat, Inc.

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public License
   as published by the Free Software Foundation; either version 2 of
   the License, or (at your option) any later version.

   It 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 Lesser General
   Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with this software; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */


#ifndef _BAUDBOY_H_
#define _BAUDBOY_H_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>

#ifdef	__cplusplus
extern "C" {
#endif

#define	LOCKDEV_PATH	"/usr/sbin/lockdev"

static inline int _doit(const char * argv[])
{
    pid_t child;
    int status;
    void (*osig) (int) = signal(SIGCHLD, SIG_DFL);
    int rc;

    if (!(child = fork())) {
	int fd;
        /* these have to be open to something */
	if ((fd = open("/dev/null", 2)) < 0)
	    exit(-1);
	dup2(fd, 0);
	dup2(fd, 1);
	dup2(fd, 2);
	close(fd);
	/* Swap egid and gid for lockdev's access(2) device check. */
	setregid(getegid(), getgid());
	execv(argv[0], (char *const *)argv);
	exit(-1);
    }

    rc = (int) waitpid(child, &status, 0);
    signal(SIGCHLD, osig);
    if (rc == child && WIFEXITED(status)) {
	/*
	 * Exit		dev_lock	dev_unlock	dev_testlock
	 *	  0	OK		OK		not locked
	 *	  1	locked other	locked other	locked
	 *	  2	EACCES
	 *	  3	EROFS
	 *	  4	EFAULT
	 *	  5	EINVAL
	 *	  6	ENAMETOOLONG
	 *	  7	ENOENT
	 *	  8	ENOTDIR
	 *	  9	ENOMEM
	 *	 10	ELOOP
	 *	 11	EIO
	 *	255	error		error		error
	 */
	rc = WEXITSTATUS(status);
	switch(rc) {
	case  0:	rc = 0;		break;
	default:
	case  1:	rc = -EPERM;	break;
	case  2:	rc = -EACCES;	break;
	case  3:	rc = -EROFS;	break;
	case  4:	rc = -EFAULT;	break;
	case  5:	rc = -EINVAL;	break;
	case  6:	rc = -ENAMETOOLONG;	break;
	case  7:	rc = -ENOENT;	break;
	case  8:	rc = -ENOTDIR;	break;
	case  9:	rc = -ENOMEM;	break;
	case 10:	rc = -ELOOP;	break;
	case 11:	rc = -EIO;	break;
	}
    } else if (rc == -1)
	rc = -errno;
    else
	rc = -ECHILD;

    return rc;

}

static inline int ttylock(const char * devname)
{
    const char * argv[] = { LOCKDEV_PATH, "-l", NULL, NULL};
    argv[2] = devname;
    return _doit(argv);
}

static inline int ttyunlock(const char * devname)
{
    const char * argv[] = { LOCKDEV_PATH, "-u", NULL, NULL};
    argv[2] = devname;
    return _doit(argv);
}

static inline int ttylocked(const char * devname)
{
    const char * argv[] = { LOCKDEV_PATH, NULL, NULL};
    argv[1] = devname;
    return _doit(argv);
}

static inline int ttywait(const char * devname)
{
    int rc;
    while((rc = ttylocked(devname)) == 0)
	sleep(1);
    return rc;
}

#ifdef	__cplusplus
};
#endif

#endif /* _BAUDBOY_H_ */

Anon7 - 2021