realpath.c revision 1.1
11.1Skamil/* $NetBSD: realpath.c,v 1.1 2020/02/02 21:49:44 kamil Exp $ */ 21.1Skamil/*- 31.1Skamil * SPDX-License-Identifier: BSD-3-Clause 41.1Skamil * 51.1Skamil * Copyright (c) 1991, 1993, 1994 61.1Skamil * The Regents of the University of California. All rights reserved. 71.1Skamil * 81.1Skamil * Redistribution and use in source and binary forms, with or without 91.1Skamil * modification, are permitted provided that the following conditions 101.1Skamil * are met: 111.1Skamil * 1. Redistributions of source code must retain the above copyright 121.1Skamil * notice, this list of conditions and the following disclaimer. 131.1Skamil * 2. Redistributions in binary form must reproduce the above copyright 141.1Skamil * notice, this list of conditions and the following disclaimer in the 151.1Skamil * documentation and/or other materials provided with the distribution. 161.1Skamil * 3. Neither the name of the University nor the names of its contributors 171.1Skamil * may be used to endorse or promote products derived from this software 181.1Skamil * without specific prior written permission. 191.1Skamil * 201.1Skamil * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 211.1Skamil * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 221.1Skamil * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 231.1Skamil * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 241.1Skamil * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 251.1Skamil * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 261.1Skamil * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 271.1Skamil * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 281.1Skamil * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 291.1Skamil * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 301.1Skamil * SUCH DAMAGE. 311.1Skamil */ 321.1Skamil 331.1Skamil#include <sys/cdefs.h> 341.1Skamil#if !defined(lint) 351.1Skamil#if 0 361.1Skamil__FBSDID("$FreeBSD: head/bin/realpath/realpath.c 326025 2017-11-20 19:49:47Z pfg $"); 371.1Skamil#else 381.1Skamil__RCSID("$NetBSD: realpath.c,v 1.1 2020/02/02 21:49:44 kamil Exp $"); 391.1Skamil#endif 401.1Skamil#endif /* not lint */ 411.1Skamil 421.1Skamil#include <sys/param.h> 431.1Skamil 441.1Skamil#include <err.h> 451.1Skamil#include <stdio.h> 461.1Skamil#include <stdlib.h> 471.1Skamil#include <unistd.h> 481.1Skamil 491.1Skamilstatic void usage(void) __dead; 501.1Skamil 511.1Skamilint 521.1Skamilmain(int argc, char *argv[]) 531.1Skamil{ 541.1Skamil char buf[PATH_MAX]; 551.1Skamil char *p; 561.1Skamil const char *path; 571.1Skamil int ch, qflag, rval; 581.1Skamil 591.1Skamil setprogname(argv[0]); 601.1Skamil 611.1Skamil qflag = 0; 621.1Skamil while ((ch = getopt(argc, argv, "q")) != -1) { 631.1Skamil switch (ch) { 641.1Skamil case 'q': 651.1Skamil qflag = 1; 661.1Skamil break; 671.1Skamil case '?': 681.1Skamil default: 691.1Skamil usage(); 701.1Skamil } 711.1Skamil } 721.1Skamil argc -= optind; 731.1Skamil argv += optind; 741.1Skamil path = *argv != NULL ? *argv++ : "."; 751.1Skamil rval = 0; 761.1Skamil do { 771.1Skamil if ((p = realpath(path, buf)) == NULL) { 781.1Skamil if (!qflag) 791.1Skamil warn("%s", path); 801.1Skamil rval = 1; 811.1Skamil } else 821.1Skamil (void)printf("%s\n", p); 831.1Skamil } while ((path = *argv++) != NULL); 841.1Skamil exit(rval); 851.1Skamil} 861.1Skamil 871.1Skamilstatic void 881.1Skamilusage(void) 891.1Skamil{ 901.1Skamil 911.1Skamil (void)fprintf(stderr, "usage: %s [-q] [path ...]\n", getprogname()); 921.1Skamil exit(1); 931.1Skamil} 94