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