/*---------------------------------------------------------------------- Set or clear the specified tty mode Args: ps -- struct pine mode -- mode bits to modify clear -- whether or not to clear or set Result: tty driver mode change. ----------------------------------------------------------------------*/ void tty_chmod(struct pine *ps, int mode, int func) { char *tty_name; int new_mode; struct stat sbuf; static int saved_mode = -1; /* if no problem figuring out tty's name & mode? */ if((((tty_name = (char *) ttyname(STDIN_FD)) != NULL && fstat(STDIN_FD, &sbuf) == 0) || ((tty_name = (char *) ttyname(STDOUT_FD)) != NULL && fstat(STDOUT_FD, &sbuf) == 0)) && !(func == TMD_RESET && saved_mode < 0)){ new_mode = (func == TMD_RESET) ? saved_mode : (func == TMD_CLEAR) ? (sbuf.st_mode & ~mode) : (sbuf.st_mode | mode); /* assign tty new mode */ if(our_chmod(tty_name, new_mode) == 0){ if(func == TMD_RESET) /* forget we knew */ saved_mode = -1; else if(saved_mode < 0) saved_mode = sbuf.st_mode; /* remember original */ } } }
/*---------------------------------------------------------------------- Create the mail subdirectory. Args: dir -- Name of the directory to create Result: Directory is created. Returns 0 on success, else -1 on error and errno is valid. ----*/ int create_mail_dir(char *dir) { if(our_mkdir(dir, MAILDIR_MODE) < 0) return(-1); #ifndef _WINDOWS our_chmod(dir, MAILDIR_MODE); /* Some systems need this, on others we don't care if it fails */ our_chown(dir, getuid(), getgid()); #endif /* !_WINDOWS */ return(0); }