138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin/* 238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl> 338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl> 438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com> 538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl> 638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2012 Denys Vlasenko <vda.linux@googlemail.com> 739bac055674d23770b9a724221b728e443196ea7Elliott Hughes * Copyright (c) 2012-2017 The strace developers. 838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * All rights reserved. 938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 1038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Redistribution and use in source and binary forms, with or without 1138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * modification, are permitted provided that the following conditions 1238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * are met: 1338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 1. Redistributions of source code must retain the above copyright 1438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * notice, this list of conditions and the following disclaimer. 1538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 2. Redistributions in binary form must reproduce the above copyright 1638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * notice, this list of conditions and the following disclaimer in the 1738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * documentation and/or other materials provided with the distribution. 1838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 3. The name of the author may not be used to endorse or promote products 1938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * derived from this software without specific prior written permission. 2038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 2138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 3038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin */ 3238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin 339514ac73c71456fe9082f40bf7c9a8a2278b47aaDmitry V. Levin#include "defs.h" 349514ac73c71456fe9082f40bf7c9a8a2278b47aaDmitry V. Levin 359514ac73c71456fe9082f40bf7c9a8a2278b47aaDmitry V. Levin#include <fcntl.h> 36d34e00b293942b1012ddc49ed3ab379a32337611Felix Janda#include <sys/stat.h> 379514ac73c71456fe9082f40bf7c9a8a2278b47aaDmitry V. Levin 389514ac73c71456fe9082f40bf7c9a8a2278b47aaDmitry V. Levin#include "xlat/modetypes.h" 399514ac73c71456fe9082f40bf7c9a8a2278b47aaDmitry V. Levin 408d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levinvoid 418d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levinprint_symbolic_mode_t(const unsigned int mode) 429514ac73c71456fe9082f40bf7c9a8a2278b47aaDmitry V. Levin{ 438d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin const char *ifmt; 448d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin 458d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin if (mode & S_IFMT) { 468d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin ifmt = xlookup(modetypes, mode & S_IFMT); 478d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin if (!ifmt) { 488d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin tprintf("%#03o", mode); 498d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin return; 508d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin } 518d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin } else { 528d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin ifmt = NULL; 539514ac73c71456fe9082f40bf7c9a8a2278b47aaDmitry V. Levin } 548d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin 558d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin tprintf("%s%s%s%s%s%#03o", 568d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin ifmt ? ifmt : "", 578d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin ifmt ? "|" : "", 588d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin (mode & S_ISUID) ? "S_ISUID|" : "", 598d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin (mode & S_ISGID) ? "S_ISGID|" : "", 608d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin (mode & S_ISVTX) ? "S_ISVTX|" : "", 618d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX)); 628d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin} 638d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin 648d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levinvoid 658d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levinprint_numeric_umode_t(const unsigned short mode) 668d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin{ 678d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin tprintf("%#03ho", mode); 688d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin} 698d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin 708d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levinvoid 718d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levinprint_numeric_long_umask(const unsigned long mode) 728d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin{ 738d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin tprintf("%#03lo", mode); 749514ac73c71456fe9082f40bf7c9a8a2278b47aaDmitry V. Levin} 75