11.8Sdbj/* $NetBSD: getmode.c,v 1.8 2008/11/04 23:31:32 dbj Exp $ */ 21.1Stv 31.1Stv/*- 41.1Stv * Copyright (c) 2001 The NetBSD Foundation, Inc. 51.1Stv * All rights reserved. 61.1Stv * 71.1Stv * This code is derived from software contributed to The NetBSD Foundation 81.1Stv * by Todd Vierling. 91.1Stv * 101.1Stv * Redistribution and use in source and binary forms, with or without 111.1Stv * modification, are permitted provided that the following conditions 121.1Stv * are met: 131.1Stv * 1. Redistributions of source code must retain the above copyright 141.1Stv * notice, this list of conditions and the following disclaimer. 151.1Stv * 2. Redistributions in binary form must reproduce the above copyright 161.1Stv * notice, this list of conditions and the following disclaimer in the 171.1Stv * documentation and/or other materials provided with the distribution. 181.1Stv * 191.1Stv * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 201.1Stv * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 211.1Stv * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 221.1Stv * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 231.1Stv * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 241.1Stv * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 251.1Stv * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 261.1Stv * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 271.1Stv * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 281.1Stv * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 291.1Stv * POSSIBILITY OF SUCH DAMAGE. 301.1Stv */ 311.1Stv 321.3Slukem#include "nbtool_config.h" 331.1Stv#include <stdlib.h> 341.8Sdbj#include <unistd.h> 351.1Stv 361.4Ssimonbvoid * 371.4Ssimonbsetmode(const char *str) 381.4Ssimonb{ 391.1Stv mode_t *mp = malloc(sizeof(mode_t)); 401.1Stv 411.1Stv *mp = strtoul(str, NULL, 8); 421.1Stv 431.1Stv return mp; 441.1Stv} 451.1Stv 461.4Ssimonbmode_t 471.4Ssimonbgetmode(const void *mp, mode_t mode) 481.4Ssimonb{ 491.6Ssimonb mode_t m; 501.4Ssimonb 511.5Ssimonb m = *((const mode_t *)mp); 521.5Ssimonb 531.5Ssimonb mode &= ~ALLPERMS; /* input mode less RWX permissions */ 541.5Ssimonb m &= ALLPERMS; /* new RWX permissions */ 551.5Ssimonb 561.5Ssimonb return m | mode; 571.1Stv} 58