summaryrefslogtreecommitdiff
path: root/gnu/dist/groff/src/libs/libgroff/searchpath.cpp
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2016-01-13 19:24:59 +0000
committerchristos <christos@NetBSD.org>2016-01-13 19:24:59 +0000
commita9cc03d5ae6c144ac3d14dbbe60d7922b532f3dc (patch)
tree45905651b35cf9b92d48ecfed92e3c5037e7d2d9 /gnu/dist/groff/src/libs/libgroff/searchpath.cpp
parent64a6ddad5b422a192c6fc189ac147ecef15d0290 (diff)
groff has moved to external
Diffstat (limited to 'gnu/dist/groff/src/libs/libgroff/searchpath.cpp')
-rw-r--r--gnu/dist/groff/src/libs/libgroff/searchpath.cpp210
1 files changed, 0 insertions, 210 deletions
diff --git a/gnu/dist/groff/src/libs/libgroff/searchpath.cpp b/gnu/dist/groff/src/libs/libgroff/searchpath.cpp
deleted file mode 100644
index 14b27a88956..00000000000
--- a/gnu/dist/groff/src/libs/libgroff/searchpath.cpp
+++ /dev/null
@@ -1,210 +0,0 @@
-/* $NetBSD: searchpath.cpp,v 1.1.1.3 2006/02/06 18:13:55 wiz Exp $ */
-
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003, 2005
- Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "lib.h"
-
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "searchpath.h"
-#include "nonposix.h"
-
-#ifdef _WIN32
-# include "relocate.h"
-#else
-# define relocate(path) strsave(path)
-#endif
-
-search_path::search_path(const char *envvar, const char *standard,
- int add_home, int add_current)
-{
- char *home = 0;
- if (add_home)
- home = getenv("HOME");
- char *e = 0;
- if (envvar)
- e = getenv(envvar);
- dirs = new char[((e && *e) ? strlen(e) + 1 : 0)
- + (add_current ? 1 + 1 : 0)
- + ((home && *home) ? strlen(home) + 1 : 0)
- + ((standard && *standard) ? strlen(standard) : 0)
- + 1];
- *dirs = '\0';
- if (e && *e) {
- strcat(dirs, e);
- strcat(dirs, PATH_SEP);
- }
- if (add_current) {
- strcat(dirs, ".");
- strcat(dirs, PATH_SEP);
- }
- if (home && *home) {
- strcat(dirs, home);
- strcat(dirs, PATH_SEP);
- }
- if (standard && *standard)
- strcat(dirs, standard);
- init_len = strlen(dirs);
-}
-
-search_path::~search_path()
-{
- // dirs is always allocated
- a_delete dirs;
-}
-
-void search_path::command_line_dir(const char *s)
-{
- char *old = dirs;
- unsigned old_len = strlen(old);
- unsigned slen = strlen(s);
- dirs = new char[old_len + 1 + slen + 1];
- memcpy(dirs, old, old_len - init_len);
- char *p = dirs;
- p += old_len - init_len;
- if (init_len == 0)
- *p++ = PATH_SEP_CHAR;
- memcpy(p, s, slen);
- p += slen;
- if (init_len > 0) {
- *p++ = PATH_SEP_CHAR;
- memcpy(p, old + old_len - init_len, init_len);
- p += init_len;
- }
- *p++ = '\0';
- a_delete old;
-}
-
-FILE *search_path::open_file(const char *name, char **pathp)
-{
- assert(name != 0);
- if (IS_ABSOLUTE(name) || *dirs == '\0') {
- FILE *fp = fopen(name, "r");
- if (fp) {
- if (pathp)
- *pathp = strsave(name);
- return fp;
- }
- else
- return 0;
- }
- unsigned namelen = strlen(name);
- char *p = dirs;
- for (;;) {
- char *end = strchr(p, PATH_SEP_CHAR);
- if (!end)
- end = strchr(p, '\0');
- int need_slash = end > p && strchr(DIR_SEPS, end[-1]) == 0;
- char *origpath = new char[(end - p) + need_slash + namelen + 1];
- memcpy(origpath, p, end - p);
- if (need_slash)
- origpath[end - p] = '/';
- strcpy(origpath + (end - p) + need_slash, name);
-#if 0
- fprintf(stderr, "origpath `%s'\n", origpath);
-#endif
- char *path = relocate(origpath);
- a_delete origpath;
-#if 0
- fprintf(stderr, "trying `%s'\n", path);
-#endif
- FILE *fp = fopen(path, "r");
- if (fp) {
- if (pathp)
- *pathp = path;
- else
- a_delete path;
- return fp;
- }
- a_delete path;
- if (*end == '\0')
- break;
- p = end + 1;
- }
- return 0;
-}
-
-FILE *search_path::open_file_cautious(const char *name, char **pathp,
- const char *mode)
-{
- if (!mode)
- mode = "r";
- bool reading = (strchr(mode, 'r') != 0);
- if (name == 0 || strcmp(name, "-") == 0) {
- if (pathp)
- *pathp = strsave(reading ? "stdin" : "stdout");
- return (reading ? stdin : stdout);
- }
- if (!reading || IS_ABSOLUTE(name) || *dirs == '\0') {
- FILE *fp = fopen(name, mode);
- if (fp) {
- if (pathp)
- *pathp = strsave(name);
- return fp;
- }
- else
- return 0;
- }
- unsigned namelen = strlen(name);
- char *p = dirs;
- for (;;) {
- char *end = strchr(p, PATH_SEP_CHAR);
- if (!end)
- end = strchr(p, '\0');
- int need_slash = end > p && strchr(DIR_SEPS, end[-1]) == 0;
- char *origpath = new char[(end - p) + need_slash + namelen + 1];
- memcpy(origpath, p, end - p);
- if (need_slash)
- origpath[end - p] = '/';
- strcpy(origpath + (end - p) + need_slash, name);
-#if 0
- fprintf(stderr, "origpath `%s'\n", origpath);
-#endif
- char *path = relocate(origpath);
- a_delete origpath;
-#if 0
- fprintf(stderr, "trying `%s'\n", path);
-#endif
- FILE *fp = fopen(path, mode);
- if (fp) {
- if (pathp)
- *pathp = path;
- else
- a_delete path;
- return fp;
- }
- int err = errno;
- a_delete path;
- if (err != ENOENT)
- {
- errno = err;
- return 0;
- }
- if (*end == '\0')
- break;
- p = end + 1;
- }
- errno = ENOENT;
- return 0;
-}