diff options
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/vi/build/Makefile | 4 | ||||
-rw-r--r-- | usr.bin/vi/common/common.h | 3 | ||||
-rw-r--r-- | usr.bin/vi/common/exf.c | 4 | ||||
-rw-r--r-- | usr.bin/vi/common/msg.c | 4 | ||||
-rw-r--r-- | usr.bin/vi/common/screen.h | 4 | ||||
-rw-r--r-- | usr.bin/vi/common/search.c | 5 | ||||
-rw-r--r-- | usr.bin/vi/docs/USD.doc/vi.man/vi.1 | 13 | ||||
-rw-r--r-- | usr.bin/vi/docs/help | 1 | ||||
-rw-r--r-- | usr.bin/vi/ex/ex.h | 4 | ||||
-rw-r--r-- | usr.bin/vi/ex/ex_cmd.c | 7 | ||||
-rw-r--r-- | usr.bin/vi/ex/ex_cscope.c | 1010 | ||||
-rw-r--r-- | usr.bin/vi/ex/ex_display.c | 13 | ||||
-rw-r--r-- | usr.bin/vi/ex/ex_init.c | 3 | ||||
-rw-r--r-- | usr.bin/vi/ex/ex_subst.c | 73 | ||||
-rw-r--r-- | usr.bin/vi/ex/ex_tag.c | 14 | ||||
-rw-r--r-- | usr.bin/vi/ex/tag.h | 31 | ||||
-rw-r--r-- | usr.bin/vi/include/ex_def.h | 117 | ||||
-rw-r--r-- | usr.bin/vi/include/ex_extern.h | 5 |
18 files changed, 89 insertions, 1226 deletions
diff --git a/usr.bin/vi/build/Makefile b/usr.bin/vi/build/Makefile index 4d2d25f3546..68e7b544df9 100644 --- a/usr.bin/vi/build/Makefile +++ b/usr.bin/vi/build/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.21 2014/11/20 08:50:53 bentley Exp $ +# $OpenBSD: Makefile,v 1.22 2015/11/19 07:53:30 bentley Exp $ # @(#)Makefile.in 8.75 (Berkeley) 10/23/96 PROG= vi @@ -18,7 +18,7 @@ CFLAGS+= -fno-tree-dominator-opts SRCS= cl_funcs.c cl_main.c cl_read.c cl_screen.c cl_term.c \ cut.c delete.c ex.c ex_abbrev.c ex_append.c ex_args.c ex_argv.c \ - ex_at.c ex_bang.c ex_cd.c ex_cmd.c ex_cscope.c ex_delete.c \ + ex_at.c ex_bang.c ex_cd.c ex_cmd.c ex_delete.c \ ex_display.c ex_edit.c ex_equal.c ex_file.c ex_filter.c \ ex_global.c ex_init.c ex_join.c ex_map.c ex_mark.c ex_mkexrc.c \ ex_move.c ex_open.c ex_preserve.c ex_print.c ex_put.c \ diff --git a/usr.bin/vi/common/common.h b/usr.bin/vi/common/common.h index 66b4d1f8864..d7d05c086c4 100644 --- a/usr.bin/vi/common/common.h +++ b/usr.bin/vi/common/common.h @@ -1,4 +1,4 @@ -/* $OpenBSD: common.h,v 1.7 2014/11/12 16:29:04 millert Exp $ */ +/* $OpenBSD: common.h,v 1.8 2015/11/19 07:53:31 bentley Exp $ */ /*- * Copyright (c) 1991, 1993, 1994 @@ -19,7 +19,6 @@ * are far too interrelated for a clean solution. */ typedef struct _cb CB; -typedef struct _csc CSC; typedef struct _event EVENT; typedef struct _excmd EXCMD; typedef struct _exf EXF; diff --git a/usr.bin/vi/common/exf.c b/usr.bin/vi/common/exf.c index 33aee068c9b..863eb0f4774 100644 --- a/usr.bin/vi/common/exf.c +++ b/usr.bin/vi/common/exf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: exf.c,v 1.37 2015/07/07 18:34:12 millert Exp $ */ +/* $OpenBSD: exf.c,v 1.38 2015/11/19 07:53:31 bentley Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 @@ -933,7 +933,7 @@ file_write(SCR *sp, MARK *fm, MARK *tm, char *name, int flags) } /* - * There's a nasty problem with long path names. Cscope and tags files + * There's a nasty problem with long path names. Tags files * can result in long paths and vi will request a continuation key from * the user. Unfortunately, the user has typed ahead, and chaos will * result. If we assume that the characters in the filenames only take diff --git a/usr.bin/vi/common/msg.c b/usr.bin/vi/common/msg.c index 147311b173e..8e0a653379a 100644 --- a/usr.bin/vi/common/msg.c +++ b/usr.bin/vi/common/msg.c @@ -1,4 +1,4 @@ -/* $OpenBSD: msg.c,v 1.22 2015/01/16 06:40:14 deraadt Exp $ */ +/* $OpenBSD: msg.c,v 1.23 2015/11/19 07:53:31 bentley Exp $ */ /*- * Copyright (c) 1991, 1993, 1994 @@ -459,7 +459,7 @@ msgq_status(SCR *sp, recno_t lno, u_int flags) len = p - bp; /* - * There's a nasty problem with long path names. Cscope and tags files + * There's a nasty problem with long path names. Tags files * can result in long paths and vi will request a continuation key from * the user as soon as it starts the screen. Unfortunately, the user * has already typed ahead, and chaos results. If we assume that the diff --git a/usr.bin/vi/common/screen.h b/usr.bin/vi/common/screen.h index 8cd74a37d37..a05eb5fcfcf 100644 --- a/usr.bin/vi/common/screen.h +++ b/usr.bin/vi/common/screen.h @@ -1,4 +1,4 @@ -/* $OpenBSD: screen.h,v 1.7 2014/11/20 08:50:53 bentley Exp $ */ +/* $OpenBSD: screen.h,v 1.8 2015/11/19 07:53:31 bentley Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 @@ -98,7 +98,6 @@ struct _scr { CHAR_T at_lbuf; /* Ex/vi: Last executed at buffer. */ /* Ex/vi: re_compile flags. */ -#define RE_C_CSCOPE 0x0001 /* Compile cscope pattern. */ #define RE_C_SEARCH 0x0002 /* Compile search replacement. */ #define RE_C_SILENT 0x0004 /* No error messages. */ #define RE_C_SUBST 0x0008 /* Compile substitute replacement. */ @@ -107,7 +106,6 @@ struct _scr { #define RE_WSTART "[[:<:]]" /* Ex/vi: not-in-word search pattern. */ #define RE_WSTOP "[[:>:]]" /* Ex/vi: flags to search routines. */ -#define SEARCH_CSCOPE 0x0001 /* Search for a cscope pattern. */ #define SEARCH_EOL 0x0002 /* Offset past EOL is okay. */ #define SEARCH_FILE 0x0004 /* Search the entire file. */ #define SEARCH_INCR 0x0008 /* Search incrementally. */ diff --git a/usr.bin/vi/common/search.c b/usr.bin/vi/common/search.c index e0c02b8eb33..033d3eff9cf 100644 --- a/usr.bin/vi/common/search.c +++ b/usr.bin/vi/common/search.c @@ -1,4 +1,4 @@ -/* $OpenBSD: search.c,v 1.11 2015/03/10 00:10:59 bentley Exp $ */ +/* $OpenBSD: search.c,v 1.12 2015/11/19 07:53:31 bentley Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 @@ -119,8 +119,7 @@ prev: if (sp->re == NULL) { if (re_compile(sp, ptrn, plen, &sp->re, &sp->re_len, &sp->re_c, RE_C_SEARCH | (LF_ISSET(SEARCH_MSG) ? 0 : RE_C_SILENT) | - (LF_ISSET(SEARCH_TAG) ? RE_C_TAG : 0) | - (LF_ISSET(SEARCH_CSCOPE) ? RE_C_CSCOPE : 0))) + (LF_ISSET(SEARCH_TAG) ? RE_C_TAG : 0))) return (1); /* Set the search direction. */ diff --git a/usr.bin/vi/docs/USD.doc/vi.man/vi.1 b/usr.bin/vi/docs/USD.doc/vi.man/vi.1 index 0f503bc0950..4191fdaea50 100644 --- a/usr.bin/vi/docs/USD.doc/vi.man/vi.1 +++ b/usr.bin/vi/docs/USD.doc/vi.man/vi.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: vi.1,v 1.60 2015/09/14 20:06:58 schwarze Exp $ +.\" $OpenBSD: vi.1,v 1.61 2015/11/19 07:53:31 bentley Exp $ .\" .\" Copyright (c) 1994 .\" The Regents of the University of California. All rights reserved. @@ -14,7 +14,7 @@ .\" .\" @(#)vi.1 8.51 (Berkeley) 10/10/96 .\" -.Dd $Mdocdate: September 14 2015 $ +.Dd $Mdocdate: November 19 2015 $ .Dt VI 1 .Os .Sh NAME @@ -1780,12 +1780,6 @@ Copy the specified lines after the destination .Ar line . .Pp .It Xo -.Cm cs Ns Op Cm cope -.Cm add | find | help | kill | reset -.Xc -Execute a Cscope command. -.Pp -.It Xo .Op Ar range .Cm d Ns Op Cm elete .Op Ar buffer @@ -1797,11 +1791,10 @@ Delete the lines from the file. .It Xo .Cm di Ns Op Cm splay .Cm b Ns Oo Cm uffers Oc | -.Cm c Ns Oo Cm onnections Oc | .Cm s Ns Oo Cm creens Oc | .Cm t Ns Op Cm ags .Xc -Display buffers, Cscope connections, screens or tags. +Display buffers, screens or tags. .Pp .It Xo .Op Cm Ee Ns diff --git a/usr.bin/vi/docs/help b/usr.bin/vi/docs/help index 265dbd61d35..f856f4c6c6a 100644 --- a/usr.bin/vi/docs/help +++ b/usr.bin/vi/docs/help @@ -143,7 +143,6 @@ EX COMMANDS: cd: change the current directory chdir: change the current directory copy: copy lines elsewhere in the file - cscope: create a set of tags using a cscope command delete: delete lines from the file display: display buffers, screens or tags [Ee]dit: begin editing another file diff --git a/usr.bin/vi/ex/ex.h b/usr.bin/vi/ex/ex.h index 17a746b1116..ae0ca33f208 100644 --- a/usr.bin/vi/ex/ex.h +++ b/usr.bin/vi/ex/ex.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ex.h,v 1.8 2013/12/01 16:47:59 krw Exp $ */ +/* $OpenBSD: ex.h,v 1.9 2015/11/19 07:53:31 bentley Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 @@ -161,7 +161,6 @@ struct _excmd { typedef struct _ex_private { TAILQ_HEAD(_tqh, _tagq) tq; /* Tag queue. */ TAILQ_HEAD(_tagfh, _tagf) tagfq;/* Tag file list. */ - LIST_HEAD(_csch, _csc) cscq; /* Cscope connection list. */ char *tag_last; /* Saved last tag string. */ CHAR_T *lastbcomm; /* Last bang command. */ @@ -186,7 +185,6 @@ typedef struct _ex_private { char obp[1024]; /* Ex output buffer. */ size_t obp_len; /* Ex output buffer length. */ -#define EXP_CSCINIT 0x01 /* Cscope initialized. */ u_int8_t flags; } EX_PRIVATE; #define EXP(sp) ((EX_PRIVATE *)((sp)->ex_private)) diff --git a/usr.bin/vi/ex/ex_cmd.c b/usr.bin/vi/ex/ex_cmd.c index 2bc37f1995b..a7665b52709 100644 --- a/usr.bin/vi/ex/ex_cmd.c +++ b/usr.bin/vi/ex/ex_cmd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ex_cmd.c,v 1.9 2014/11/20 08:50:53 bentley Exp $ */ +/* $OpenBSD: ex_cmd.c,v 1.10 2015/11/19 07:53:31 bentley Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 @@ -132,11 +132,6 @@ EXCMDLIST const cmds[] = { "l1", "[line [,line]] co[py] line [flags]", "copy lines elsewhere in the file"}, -/* C_CSCOPE */ - {"cscope", ex_cscope, 0, - "!s", - "cs[cope] command [args]", - "create a set of tags using a cscope command"}, /* * !!! * Adding new commands starting with 'd' may break the delete command code diff --git a/usr.bin/vi/ex/ex_cscope.c b/usr.bin/vi/ex/ex_cscope.c deleted file mode 100644 index df26cba3d74..00000000000 --- a/usr.bin/vi/ex/ex_cscope.c +++ /dev/null @@ -1,1010 +0,0 @@ -/* $OpenBSD: ex_cscope.c,v 1.26 2015/04/24 21:48:31 brynet Exp $ */ - -/*- - * Copyright (c) 1994, 1996 - * Rob Mayoff. All rights reserved. - * Copyright (c) 1996 - * Keith Bostic. All rights reserved. - * - * See the LICENSE file for redistribution information. - */ - -#include "config.h" - -#include <sys/queue.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <sys/wait.h> - -#include <bitstring.h> -#include <ctype.h> -#include <errno.h> -#include <fcntl.h> -#include <limits.h> -#include <paths.h> -#include <stddef.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <time.h> -#include <termios.h> -#include <unistd.h> - -#include "../common/common.h" -#include "tag.h" - -#define CSCOPE_DBFILE "cscope.out" -#define CSCOPE_PATHS "cscope.tpath" - -/* - * 0name find all uses of name - * 1name find definition of name - * 2name find all function calls made from name - * 3name find callers of name - * 4string find text string (cscope 12.9) - * 4name find assignments to name (cscope 13.3) - * 5pattern change pattern -- NOT USED - * 6pattern find pattern - * 7name find files with name as substring - * 8name find files #including name - */ -#define FINDHELP "\ -find c|d|e|f|g|i|s|t buffer|pattern\n\ - c: find callers of name\n\ - d: find all function calls made from name\n\ - e: find pattern\n\ - f: find files with name as substring\n\ - g: find definition of name\n\ - i: find files #including name\n\ - s: find all uses of name\n\ - t: find assignments to name" - -static int cscope_add(SCR *, EXCMD *, char *); -static int cscope_find(SCR *, EXCMD*, char *); -static int cscope_help(SCR *, EXCMD *, char *); -static int cscope_kill(SCR *, EXCMD *, char *); -static int cscope_reset(SCR *, EXCMD *, char *); - -typedef struct _cc { - char *name; - int (*function)(SCR *, EXCMD *, char *); - char *help_msg; - char *usage_msg; -} CC; - -static CC const cscope_cmds[] = { - { "add", cscope_add, - "Add a new cscope database", "add file | directory" }, - { "find", cscope_find, - "Query the databases for a pattern", FINDHELP }, - { "help", cscope_help, - "Show help for cscope commands", "help [command]" }, - { "kill", cscope_kill, - "Kill a cscope connection", "kill number" }, - { "reset", cscope_reset, - "Discard all current cscope connections", "reset" }, - { NULL } -}; - -static TAGQ *create_cs_cmd(SCR *, char *, size_t *); -static int csc_help(SCR *, char *); -static void csc_file(SCR *, CSC *, char *, char **, size_t *, int *); -static int get_paths(SCR *, CSC *); -static CC const *lookup_ccmd(char *); -static int parse(SCR *, CSC *, TAGQ *, int *); -static int read_prompt(SCR *, CSC *); -static int run_cscope(SCR *, CSC *, char *); -static int start_cscopes(SCR *, EXCMD *); -static int terminate(SCR *, CSC *, int); - -/* - * ex_cscope -- - * Perform an ex cscope. - * - * PUBLIC: int ex_cscope(SCR *, EXCMD *); - */ -int -ex_cscope(SCR *sp, EXCMD *cmdp) -{ - CC const *ccp; - EX_PRIVATE *exp; - int i; - char *cmd, *p; - - /* Initialize the default cscope directories. */ - exp = EXP(sp); - if (!F_ISSET(exp, EXP_CSCINIT) && start_cscopes(sp, cmdp)) - return (1); - F_SET(exp, EXP_CSCINIT); - - /* Skip leading whitespace. */ - for (p = cmdp->argv[0]->bp, i = cmdp->argv[0]->len; i > 0; --i, ++p) - if (!isspace(*p)) - break; - if (i == 0) - goto usage; - - /* Skip the command to any arguments. */ - for (cmd = p; i > 0; --i, ++p) - if (isspace(*p)) - break; - if (*p != '\0') { - *p++ = '\0'; - for (; isspace(*p); ++p); - } - - if ((ccp = lookup_ccmd(cmd)) == NULL) { -usage: msgq(sp, M_ERR, "309|Use \"cscope help\" for help"); - return (1); - } - - /* Call the underlying function. */ - return (ccp->function(sp, cmdp, p)); -} - -/* - * start_cscopes -- - * Initialize the cscope package. - */ -static int -start_cscopes(SCR *sp, EXCMD *cmdp) -{ - size_t blen, len; - char *bp, *cscopes, *p, *t; - - /* - * EXTENSION #1: - * - * If the CSCOPE_DIRS environment variable is set, we treat it as a - * list of cscope directories that we're using, similar to the tags - * edit option. - * - * XXX - * This should probably be an edit option, although that implies that - * we start/stop cscope processes periodically, instead of once when - * the editor starts. - */ - if ((cscopes = getenv("CSCOPE_DIRS")) == NULL) - return (0); - len = strlen(cscopes); - GET_SPACE_RET(sp, bp, blen, len); - memcpy(bp, cscopes, len + 1); - - for (cscopes = t = bp; (p = strsep(&t, "\t :")) != NULL;) - if (*p != '\0') - (void)cscope_add(sp, cmdp, p); - - FREE_SPACE(sp, bp, blen); - return (0); -} - -/* - * cscope_add -- - * The cscope add command. - */ -static int -cscope_add(SCR *sp, EXCMD *cmdp, char *dname) -{ - struct stat sb; - EX_PRIVATE *exp; - CSC *csc; - size_t len; - int cur_argc; - char *dbname, path[PATH_MAX]; - - exp = EXP(sp); - - /* - * 0 additional args: usage. - * 1 additional args: matched a file. - * >1 additional args: object, too many args. - */ - cur_argc = cmdp->argc; - if (argv_exp2(sp, cmdp, dname, strlen(dname))) - return (1); - if (cmdp->argc == cur_argc) { - (void)csc_help(sp, "add"); - return (1); - } - if (cmdp->argc == cur_argc + 1) - dname = cmdp->argv[cur_argc]->bp; - else { - ex_emsg(sp, dname, EXM_FILECOUNT); - return (1); - } - - /* - * The user can specify a specific file (so they can have multiple - * Cscope databases in a single directory) or a directory. If the - * file doesn't exist, we're done. If it's a directory, append the - * standard database file name and try again. Store the directory - * name regardless so that we can use it as a base for searches. - */ - if (stat(dname, &sb)) { - msgq(sp, M_SYSERR, dname); - return (1); - } - if (S_ISDIR(sb.st_mode)) { - (void)snprintf(path, sizeof(path), - "%s/%s", dname, CSCOPE_DBFILE); - if (stat(path, &sb)) { - msgq(sp, M_SYSERR, path); - return (1); - } - dbname = CSCOPE_DBFILE; - } else if ((dbname = strrchr(dname, '/')) != NULL) - *dbname++ = '\0'; - else { - dbname = dname; - dname = "."; - } - - /* Allocate a cscope connection structure and initialize its fields. */ - len = strlen(dname); - CALLOC_RET(sp, csc, CSC *, 1, sizeof(CSC) + len); - csc->dname = csc->buf; - csc->dlen = len; - memcpy(csc->dname, dname, len); - csc->mtim = sb.st_mtim; - - /* Get the search paths for the cscope. */ - if (get_paths(sp, csc)) - goto err; - - /* Start the cscope process. */ - if (run_cscope(sp, csc, dbname)) - goto err; - - /* - * Add the cscope connection to the screen's list. From now on, - * on error, we have to call terminate, which expects the csc to - * be on the chain. - */ - LIST_INSERT_HEAD(&exp->cscq, csc, q); - - /* Read the initial prompt from the cscope to make sure it's okay. */ - if (read_prompt(sp, csc)) - return (1); - - return (0); - -err: free(csc); - return (1); -} - -/* - * get_paths -- - * Get the directories to search for the files associated with this - * cscope database. - */ -static int -get_paths(SCR *sp, CSC *csc) -{ - struct stat sb; - int fd, nentries; - size_t len; - char *p, **pathp, buf[PATH_MAX * 2]; - - /* - * EXTENSION #2: - * - * If there's a cscope directory with a file named CSCOPE_PATHS, it - * contains a colon-separated list of paths in which to search for - * files returned by cscope. - * - * XXX - * These paths are absolute paths, and not relative to the cscope - * directory. To fix this, rewrite the each path using the cscope - * directory as a prefix. - */ - (void)snprintf(buf, sizeof(buf), "%s/%s", csc->dname, CSCOPE_PATHS); - if (stat(buf, &sb) == 0) { - /* Read in the CSCOPE_PATHS file. */ - len = sb.st_size; - MALLOC_RET(sp, csc->pbuf, char *, len + 1); - if ((fd = open(buf, O_RDONLY, 0)) < 0 || - read(fd, csc->pbuf, len) != len) { - msgq_str(sp, M_SYSERR, buf, "%s"); - if (fd >= 0) - (void)close(fd); - return (1); - } - (void)close(fd); - csc->pbuf[len] = '\0'; - - /* Count up the entries. */ - for (nentries = 0, p = csc->pbuf; *p != '\0'; ++p) - if (p[0] == ':' && p[1] != '\0') - ++nentries; - - /* Build an array of pointers to the paths. */ - CALLOC_GOTO(sp, - csc->paths, char **, nentries + 1, sizeof(char **)); - for (pathp = csc->paths, p = strtok(csc->pbuf, ":"); - p != NULL; p = strtok(NULL, ":")) - *pathp++ = p; - return (0); - } - - /* - * If the CSCOPE_PATHS file doesn't exist, we look for files - * relative to the cscope directory. - */ - if ((csc->pbuf = strdup(csc->dname)) == NULL) { - msgq(sp, M_SYSERR, NULL); - return (1); - } - CALLOC_GOTO(sp, csc->paths, char **, 2, sizeof(char *)); - csc->paths[0] = csc->pbuf; - return (0); - -alloc_err: - if (csc->pbuf != NULL) { - free(csc->pbuf); - csc->pbuf = NULL; - } - return (1); -} - -/* - * run_cscope -- - * Fork off the cscope process. - */ -static int -run_cscope(SCR *sp, CSC *csc, char *dbname) -{ - int to_cs[2], from_cs[2]; - char cmd[PATH_MAX * 2]; - - /* - * Cscope reads from to_cs[0] and writes to from_cs[1]; vi reads from - * from_cs[0] and writes to to_cs[1]. - */ - to_cs[0] = to_cs[1] = from_cs[0] = from_cs[1] = -1; - if (pipe(to_cs) < 0 || pipe(from_cs) < 0) { - msgq(sp, M_SYSERR, "pipe"); - goto err; - } - switch (csc->pid = vfork()) { - case -1: - msgq(sp, M_SYSERR, "vfork"); -err: if (to_cs[0] != -1) - (void)close(to_cs[0]); - if (to_cs[1] != -1) - (void)close(to_cs[1]); - if (from_cs[0] != -1) - (void)close(from_cs[0]); - if (from_cs[1] != -1) - (void)close(from_cs[1]); - return (1); - case 0: /* child: run cscope. */ - (void)dup2(to_cs[0], STDIN_FILENO); - (void)dup2(from_cs[1], STDOUT_FILENO); - (void)dup2(from_cs[1], STDERR_FILENO); - - /* Close unused file descriptors. */ - (void)close(to_cs[1]); - (void)close(from_cs[0]); - - /* Run the cscope command. */ -#define CSCOPE_CMD_FMT "cd '%s' && exec cscope -dl -f %s" - (void)snprintf(cmd, sizeof(cmd), - CSCOPE_CMD_FMT, csc->dname, dbname); - (void)execl(_PATH_BSHELL, "sh", "-c", cmd, (char *)NULL); - msgq_str(sp, M_SYSERR, cmd, "execl: %s"); - _exit (127); - /* NOTREACHED */ - default: /* parent. */ - /* Close unused file descriptors. */ - (void)close(to_cs[0]); - (void)close(from_cs[1]); - - /* - * Save the file descriptors for later duplication, and - * reopen as streams. - */ - csc->to_fd = to_cs[1]; - csc->to_fp = fdopen(to_cs[1], "w"); - csc->from_fd = from_cs[0]; - csc->from_fp = fdopen(from_cs[0], "r"); - break; - } - return (0); -} - -/* - * cscope_find -- - * The cscope find command. - */ -static int -cscope_find(SCR *sp, EXCMD *cmdp, char *pattern) -{ - CSC *csc, *csc_next; - EX_PRIVATE *exp; - FREF *frp; - TAGQ *rtqp, *tqp; - TAG *rtp; - recno_t lno; - size_t cno, search; - int force, istmp, matches; - - exp = EXP(sp); - - /* Check for connections. */ - if (LIST_FIRST(&exp->cscq) == NULL) { - msgq(sp, M_ERR, "310|No cscope connections running"); - return (1); - } - - /* - * Allocate all necessary memory before doing anything hard. If the - * tags stack is empty, we'll need the `local context' TAGQ structure - * later. - */ - rtp = NULL; - rtqp = NULL; - if (TAILQ_EMPTY(&exp->tq)) { - /* Initialize the `local context' tag queue structure. */ - CALLOC_GOTO(sp, rtqp, TAGQ *, 1, sizeof(TAGQ)); - TAILQ_INIT(&rtqp->tagq); - - /* Initialize and link in its tag structure. */ - CALLOC_GOTO(sp, rtp, TAG *, 1, sizeof(TAG)); - TAILQ_INSERT_HEAD(&rtqp->tagq, rtp, q); - rtqp->current = rtp; - } - - /* Create the cscope command. */ - if ((tqp = create_cs_cmd(sp, pattern, &search)) == NULL) - goto err; - - /* - * Stick the current context in a convenient place, we'll lose it - * when we switch files. - */ - frp = sp->frp; - lno = sp->lno; - cno = sp->cno; - istmp = F_ISSET(sp->frp, FR_TMPFILE) && !F_ISSET(cmdp, E_NEWSCREEN); - - /* Search all open connections for a match. */ - matches = 0; - for (csc = LIST_FIRST(&exp->cscq); csc != NULL; csc = csc_next) { - /* Copy csc->q.lh_next here in case csc is killed. */ - csc_next = LIST_NEXT(csc, q); - - /* - * Send the command to the cscope program. (We skip the - * first two bytes of the command, because we stored the - * search cscope command character and a leading space - * there.) - */ - (void)fprintf(csc->to_fp, "%lu%s\n", (unsigned long)search, - tqp->tag + 2); - (void)fflush(csc->to_fp); - - /* Read the output. */ - if (parse(sp, csc, tqp, &matches)) { - if (rtqp != NULL) - free(rtqp); - tagq_free(sp, tqp); - return (1); - } - } - - if (matches == 0) { - msgq(sp, M_INFO, "278|No matches for query"); - return (0); - } - - tqp->current = TAILQ_FIRST(&tqp->tagq); - - /* Try to switch to the first tag. */ - force = FL_ISSET(cmdp->iflags, E_C_FORCE); - if (F_ISSET(cmdp, E_NEWSCREEN)) { - if (ex_tag_Nswitch(sp, tqp->current, force)) - goto err; - - /* Everything else gets done in the new screen. */ - sp = sp->nextdisp; - exp = EXP(sp); - } else - if (ex_tag_nswitch(sp, tqp->current, force)) - goto err; - - /* - * If this is the first tag, put a `current location' queue entry - * in place, so we can pop all the way back to the current mark. - * Note, it doesn't point to much of anything, it's a placeholder. - */ - if (TAILQ_EMPTY(&exp->tq)) { - TAILQ_INSERT_HEAD(&exp->tq, rtqp, q); - } else - rtqp = TAILQ_FIRST(&exp->tq); - - /* Link the current TAGQ structure into place. */ - TAILQ_INSERT_HEAD(&exp->tq, tqp, q); - - (void)cscope_search(sp, tqp, tqp->current); - - /* - * Move the current context from the temporary save area into the - * right structure. - * - * If we were in a temporary file, we don't have a context to which - * we can return, so just make it be the same as what we're moving - * to. It will be a little odd that ^T doesn't change anything, but - * I don't think it's a big deal. - */ - if (istmp) { - rtqp->current->frp = sp->frp; - rtqp->current->lno = sp->lno; - rtqp->current->cno = sp->cno; - } else { - rtqp->current->frp = frp; - rtqp->current->lno = lno; - rtqp->current->cno = cno; - } - - return (0); - -err: -alloc_err: - if (rtqp != NULL) - free(rtqp); - if (rtp != NULL) - free(rtp); - return (1); -} - -/* - * create_cs_cmd -- - * Build a cscope command, creating and initializing the base TAGQ. - */ -static TAGQ * -create_cs_cmd(SCR *sp, char *pattern, size_t *searchp) -{ - CB *cbp; - TAGQ *tqp; - size_t tlen; - char *p; - - /* - * Cscope supports a "change pattern" command which we never use, - * cscope command 5. Set CSCOPE_QUERIES[5] to " " since the user - * can't pass " " as the first character of pattern. That way the - * user can't ask for pattern 5 so we don't need any special-case - * code. - */ -#define CSCOPE_QUERIES "sgdct efi" - - if (pattern == NULL) - goto usage; - - /* Skip leading blanks, check for command character. */ - for (; isblank(pattern[0]); ++pattern); - if (pattern[0] == '\0' || !isblank(pattern[1])) - goto usage; - for (*searchp = 0, p = CSCOPE_QUERIES; - *p != '\0' && *p != pattern[0]; ++*searchp, ++p); - if (*p == '\0') { - msgq(sp, M_ERR, - "311|%s: unknown search type: use one of %s", - KEY_NAME(sp, pattern[0]), CSCOPE_QUERIES); - return (NULL); - } - - /* Skip <blank> characters to the pattern. */ - for (p = pattern + 1; isblank(*p); ++p); - if (*p == '\0') { -usage: (void)csc_help(sp, "find"); - return (NULL); - } - - /* The user can specify the contents of a buffer as the pattern. */ - cbp = NULL; - if (p[0] == '"' && p[1] != '\0' && p[2] == '\0') - CBNAME(sp, cbp, p[1]); - if (cbp != NULL) { - p = TAILQ_FIRST(&cbp->textq)->lb; - tlen = TAILQ_FIRST(&cbp->textq)->len; - } else - tlen = strlen(p); - - /* Allocate and initialize the TAGQ structure. */ - CALLOC(sp, tqp, TAGQ *, 1, sizeof(TAGQ) + tlen + 3); - if (tqp == NULL) - return (NULL); - TAILQ_INIT(&tqp->tagq); - tqp->tag = tqp->buf; - tqp->tag[0] = pattern[0]; - tqp->tag[1] = ' '; - tqp->tlen = tlen + 2; - memcpy(tqp->tag + 2, p, tlen); - tqp->tag[tlen + 2] = '\0'; - F_SET(tqp, TAG_CSCOPE); - - return (tqp); -} - -/* - * parse -- - * Parse the cscope output. - */ -static int -parse(SCR *sp, CSC *csc, TAGQ *tqp, int *matchesp) -{ - TAG *tp; - recno_t slno; - size_t dlen, nlen, slen; - int ch, i, isolder, nlines; - char *dname, *name, *search, *p, *t, dummy[2], buf[2048]; - - for (;;) { - if (!fgets(buf, sizeof(buf), csc->from_fp)) - goto io_err; - - /* - * If the database is out of date, or there's some other - * problem, cscope will output error messages before the - * number-of-lines output. Display/discard any output - * that doesn't match what we want. - */ -#define CSCOPE_NLINES_FMT "cscope: %d lines%1[\n]" - if (sscanf(buf, CSCOPE_NLINES_FMT, &nlines, dummy) == 2) - break; - buf[strcspn(buf, "\n")] = '\0'; - msgq(sp, M_ERR, "%s: \"%s\"", csc->dname, buf); - } - - while (nlines--) { - if (fgets(buf, sizeof(buf), csc->from_fp) == NULL) - goto io_err; - - /* If the line's too long for the buffer, discard it. */ - if ((p = strchr(buf, '\n')) == NULL) { - while ((ch = getc(csc->from_fp)) != EOF && ch != '\n'); - continue; - } - *p = '\0'; - - /* - * The cscope output is in the following format: - * - * <filename> <context> <line number> <pattern> - * - * Figure out how long everything is so we can allocate in one - * swell foop, but discard anything that looks wrong. - */ - for (p = buf, i = 0; - i < 3 && (t = strsep(&p, "\t ")) != NULL; ++i) - switch (i) { - case 0: /* Filename. */ - name = t; - nlen = strlen(name); - break; - case 1: /* Context. */ - break; - case 2: /* Line number. */ - slno = (recno_t)atol(t); - break; - } - if (i != 3 || p == NULL || t == NULL) - continue; - - /* The rest of the string is the search pattern. */ - search = p; - slen = strlen(p); - - /* Resolve the file name. */ - csc_file(sp, csc, name, &dname, &dlen, &isolder); - - /* - * If the file is older than the cscope database, that is, - * the database was built since the file was last modified, - * or there wasn't a search string, use the line number. - */ - if (isolder || strcmp(search, "<unknown>") == 0) { - search = NULL; - slen = 0; - } - - /* - * Allocate and initialize a tag structure plus the variable - * length cscope information that follows it. - */ - CALLOC_RET(sp, tp, - TAG *, 1, sizeof(TAG) + dlen + 2 + nlen + 1 + slen + 1); - tp->fname = tp->buf; - if (dlen != 0) { - memcpy(tp->fname, dname, dlen); - tp->fname[dlen] = '/'; - ++dlen; - } - memcpy(tp->fname + dlen, name, nlen + 1); - tp->fnlen = dlen + nlen; - tp->slno = slno; - if (slen != 0) { - tp->search = tp->fname + tp->fnlen + 1; - memcpy(tp->search, search, (tp->slen = slen) + 1); - } - TAILQ_INSERT_TAIL(&tqp->tagq, tp, q); - - ++*matchesp; - } - - (void)read_prompt(sp, csc); - return (0); - -io_err: if (feof(csc->from_fp)) - errno = EIO; - msgq_str(sp, M_SYSERR, "%s", csc->dname); - terminate(sp, csc, 0); - return (1); -} - -/* - * csc_file -- - * Search for the right path to this file. - */ -static void -csc_file(SCR *sp, CSC *csc, char *name, char **dirp, size_t *dlenp, - int *isolderp) -{ - struct stat sb; - char **pp, buf[PATH_MAX]; - - /* - * Check for the file in all of the listed paths. If we don't - * find it, we simply return it unchanged. We have to do this - * now, even though it's expensive, because if the user changes - * directories, we can't change our minds as to where the file - * lives. - */ - for (pp = csc->paths; *pp != NULL; ++pp) { - (void)snprintf(buf, sizeof(buf), "%s/%s", *pp, name); - if (stat(buf, &sb) == 0) { - *dirp = *pp; - *dlenp = strlen(*pp); - *isolderp = timespeccmp( - &sb.st_mtim, &csc->mtim, <); - return; - } - } - *dlenp = 0; -} - -/* - * cscope_help -- - * The cscope help command. - */ -static int -cscope_help(SCR *sp, EXCMD *cmdp, char *subcmd) -{ - return (csc_help(sp, subcmd)); -} - -/* - * csc_help -- - * Display help/usage messages. - */ -static int -csc_help(SCR *sp, char *cmd) -{ - CC const *ccp; - - if (cmd != NULL && *cmd != '\0') { - if ((ccp = lookup_ccmd(cmd)) == NULL) { - ex_printf(sp, - "%s doesn't match any cscope command\n", cmd); - return (1); - } else { - ex_printf(sp, - "Command: %s (%s)\n", ccp->name, ccp->help_msg); - ex_printf(sp, " Usage: %s\n", ccp->usage_msg); - return (0); - } - } - - ex_printf(sp, "cscope commands:\n"); - for (ccp = cscope_cmds; ccp->name != NULL; ++ccp) - ex_printf(sp, " %*s: %s\n", 5, ccp->name, ccp->help_msg); - return (0); -} - -/* - * cscope_kill -- - * The cscope kill command. - */ -static int -cscope_kill(SCR *sp, EXCMD *cmdp, char *cn) -{ - return (terminate(sp, NULL, atoi(cn))); -} - -/* - * terminate -- - * Detach from a cscope process. - */ -static int -terminate(SCR *sp, CSC *csc, int n) -{ - EX_PRIVATE *exp; - int i, pstat; - - exp = EXP(sp); - - /* - * We either get a csc structure or a number. If not provided a - * csc structure, find the right one. - */ - if (csc == NULL) { - if (n < 1) - goto badno; - for (i = 1, csc = LIST_FIRST(&exp->cscq); - csc != NULL; csc = LIST_NEXT(csc, q), i++) - if (i == n) - break; - if (csc == NULL) { -badno: msgq(sp, M_ERR, "312|%d: no such cscope session", n); - return (1); - } - } - - /* - * XXX - * Theoretically, we have the only file descriptors to the process, - * so closing them should let it exit gracefully, deleting temporary - * files, etc. The original vi cscope integration sent the cscope - * connection a SIGTERM signal, so I'm not sure if closing the file - * descriptors is sufficient. - */ - if (csc->from_fp != NULL) - (void)fclose(csc->from_fp); - if (csc->to_fp != NULL) - (void)fclose(csc->to_fp); - (void)waitpid(csc->pid, &pstat, 0); - - /* Discard cscope connection information. */ - LIST_REMOVE(csc, q); - if (csc->pbuf != NULL) - free(csc->pbuf); - if (csc->paths != NULL) - free(csc->paths); - free(csc); - return (0); -} - -/* - * cscope_reset -- - * The cscope reset command. - */ -static int -cscope_reset(SCR *sp, EXCMD *cmdp, char *notusedp) -{ - EX_PRIVATE *exp; - - for (exp = EXP(sp); LIST_FIRST(&exp->cscq) != NULL;) - if (cscope_kill(sp, cmdp, "1")) - return (1); - return (0); -} - -/* - * cscope_display -- - * Display current connections. - * - * PUBLIC: int cscope_display(SCR *); - */ -int -cscope_display(SCR *sp) -{ - EX_PRIVATE *exp; - CSC *csc; - int i; - - exp = EXP(sp); - if (LIST_FIRST(&exp->cscq) == NULL) { - ex_printf(sp, "No cscope connections.\n"); - return (0); - } - for (i = 1, - csc = LIST_FIRST(&exp->cscq); csc != NULL; ++i, csc = LIST_NEXT(csc, q)) - ex_printf(sp, - "%2d %s (process %ld)\n", i, csc->dname, (long)csc->pid); - return (0); -} - -/* - * cscope_search -- - * Search a file for a cscope entry. - * - * PUBLIC: int cscope_search(SCR *, TAGQ *, TAG *); - */ -int -cscope_search(SCR *sp, TAGQ *tqp, TAG *tp) -{ - MARK m; - - /* If we don't have a search pattern, use the line number. */ - if (tp->search == NULL) { - if (!db_exist(sp, tp->slno)) { - tag_msg(sp, TAG_BADLNO, tqp->tag); - return (1); - } - m.lno = tp->slno; - } else { - /* - * Search for the tag; cheap fallback for C functions - * if the name is the same but the arguments have changed. - */ - m.lno = 1; - m.cno = 0; - if (f_search(sp, &m, &m, - tp->search, tp->slen, NULL, SEARCH_CSCOPE | SEARCH_FILE)) { - tag_msg(sp, TAG_SEARCH, tqp->tag); - return (1); - } - - /* - * !!! - * Historically, tags set the search direction if it wasn't - * already set. - */ - if (sp->searchdir == NOTSET) - sp->searchdir = FORWARD; - } - - /* - * !!! - * Tags move to the first non-blank, NOT the search pattern start. - */ - sp->lno = m.lno; - sp->cno = 0; - (void)nonblank(sp, sp->lno, &sp->cno); - return (0); -} - - -/* - * lookup_ccmd -- - * Return a pointer to the command structure. - */ -static CC const * -lookup_ccmd(char *name) -{ - CC const *ccp; - size_t len; - - len = strlen(name); - for (ccp = cscope_cmds; ccp->name != NULL; ++ccp) - if (strncmp(name, ccp->name, len) == 0) - return (ccp); - return (NULL); -} - -/* - * read_prompt -- - * Read a prompt from cscope. - */ -static int -read_prompt(SCR *sp, CSC *csc) -{ - int ch; - -#define CSCOPE_PROMPT ">> " - for (;;) { - while ((ch = - getc(csc->from_fp)) != EOF && ch != CSCOPE_PROMPT[0]); - if (ch == EOF) { - terminate(sp, csc, 0); - return (1); - } - if (getc(csc->from_fp) != CSCOPE_PROMPT[1]) - continue; - if (getc(csc->from_fp) != CSCOPE_PROMPT[2]) - continue; - break; - } - return (0); -} diff --git a/usr.bin/vi/ex/ex_display.c b/usr.bin/vi/ex/ex_display.c index 8134c92466a..5782f9d8cbf 100644 --- a/usr.bin/vi/ex/ex_display.c +++ b/usr.bin/vi/ex/ex_display.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ex_display.c,v 1.9 2014/11/12 04:28:41 bentley Exp $ */ +/* $OpenBSD: ex_display.c,v 1.10 2015/11/19 07:53:31 bentley Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 @@ -27,9 +27,9 @@ static int bdisplay(SCR *); static void db(SCR *, CB *, CHAR_T *); /* - * ex_display -- :display b[uffers] | c[onnections] | s[creens] | t[ags] + * ex_display -- :display b[uffers] | s[creens] | t[ags] * - * Display cscope connections, buffers, tags or screens. + * Display buffers, tags or screens. * * PUBLIC: int ex_display(SCR *, EXCMD *); */ @@ -44,13 +44,6 @@ ex_display(SCR *sp, EXCMD *cmdp) memcmp(cmdp->argv[0]->bp, ARG, cmdp->argv[0]->len)) break; return (bdisplay(sp)); - case 'c': -#undef ARG -#define ARG "connections" - if (cmdp->argv[0]->len >= sizeof(ARG) || - memcmp(cmdp->argv[0]->bp, ARG, cmdp->argv[0]->len)) - break; - return (cscope_display(sp)); case 's': #undef ARG #define ARG "screens" diff --git a/usr.bin/vi/ex/ex_init.c b/usr.bin/vi/ex/ex_init.c index 86effa05ac7..2ea64dae335 100644 --- a/usr.bin/vi/ex/ex_init.c +++ b/usr.bin/vi/ex/ex_init.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ex_init.c,v 1.14 2015/01/16 06:40:14 deraadt Exp $ */ +/* $OpenBSD: ex_init.c,v 1.15 2015/11/19 07:53:31 bentley Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 @@ -50,7 +50,6 @@ ex_screen_copy(SCR *orig, SCR *sp) /* Initialize queues. */ TAILQ_INIT(&nexp->tq); TAILQ_INIT(&nexp->tagfq); - LIST_INIT(&nexp->cscq); if (orig == NULL) { } else { diff --git a/usr.bin/vi/ex/ex_subst.c b/usr.bin/vi/ex/ex_subst.c index cdbf5fd7141..cc538050990 100644 --- a/usr.bin/vi/ex/ex_subst.c +++ b/usr.bin/vi/ex/ex_subst.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ex_subst.c,v 1.22 2015/01/16 06:40:14 deraadt Exp $ */ +/* $OpenBSD: ex_subst.c,v 1.23 2015/11/19 07:53:31 bentley Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 @@ -32,7 +32,6 @@ #define SUB_MUSTSETR 0x02 /* The 'r' flag is required. */ static int re_conv(SCR *, char **, size_t *, int *); -static int re_cscope_conv(SCR *, char **, size_t *, int *); static int re_sub(SCR *, char *, char **, size_t *, size_t *, regmatch_t [10]); static int re_tag_conv(SCR *, char **, size_t *, int *); static int s(SCR *, EXCMD *, char *, regex_t *, u_int); @@ -888,7 +887,7 @@ re_compile(SCR *sp, char *ptrn, size_t plen, char **ptrnp, size_t *lenp, /* Set RE flags. */ reflags = 0; - if (!LF_ISSET(RE_C_CSCOPE | RE_C_TAG)) { + if (!LF_ISSET(RE_C_TAG)) { if (O_ISSET(sp, O_EXTENDED)) reflags |= REG_EXTENDED; if (O_ISSET(sp, O_IGNORECASE)) @@ -918,17 +917,7 @@ re_compile(SCR *sp, char *ptrn, size_t plen, char **ptrnp, size_t *lenp, * later recompilation. Free any previously saved value. */ if (ptrnp != NULL) { - if (LF_ISSET(RE_C_CSCOPE)) { - if (re_cscope_conv(sp, &ptrn, &plen, &replaced)) - return (1); - /* - * XXX - * Currently, the match-any-<blank> expression used in - * re_cscope_conv() requires extended RE's. This may - * not be right or safe. - */ - reflags |= REG_EXTENDED; - } else if (LF_ISSET(RE_C_TAG)) { + if (LF_ISSET(RE_C_TAG)) { if (re_tag_conv(sp, &ptrn, &plen, &replaced)) return (1); } else @@ -1196,62 +1185,6 @@ re_tag_conv(SCR *sp, char **ptrnp, size_t *plenp, int *replacedp) } /* - * re_cscope_conv -- - * Convert a cscope search path into something that the POSIX - * 1003.2 RE functions can handle. - */ -static int -re_cscope_conv(SCR *sp, char **ptrnp, size_t *plenp, int *replacedp) -{ - size_t blen, len, nspaces; - char *bp, *p, *t; - - /* - * Each space in the source line printed by cscope represents an - * arbitrary sequence of spaces, tabs, and comments. - */ -#define CSCOPE_RE_SPACE "([ \t]|/\\*([^*]|\\*/)*\\*/)*" - for (nspaces = 0, p = *ptrnp, len = *plenp; len > 0; ++p, --len) - if (*p == ' ') - ++nspaces; - - /* - * Allocate plenty of space: - * the string, plus potential escaping characters; - * nspaces + 2 copies of CSCOPE_RE_SPACE; - * ^, $, nul terminator characters. - */ - *replacedp = 1; - len = (p - *ptrnp) * 2 + (nspaces + 2) * sizeof(CSCOPE_RE_SPACE) + 3; - GET_SPACE_RET(sp, bp, blen, len); - - p = *ptrnp; - t = bp; - - *t++ = '^'; - memcpy(t, CSCOPE_RE_SPACE, sizeof(CSCOPE_RE_SPACE) - 1); - t += sizeof(CSCOPE_RE_SPACE) - 1; - - for (len = *plenp; len > 0; ++p, --len) - if (*p == ' ') { - memcpy(t, CSCOPE_RE_SPACE, sizeof(CSCOPE_RE_SPACE) - 1); - t += sizeof(CSCOPE_RE_SPACE) - 1; - } else { - if (strchr("\\^.[]$*+?()|{}", *p)) - *t++ = '\\'; - *t++ = *p; - } - - memcpy(t, CSCOPE_RE_SPACE, sizeof(CSCOPE_RE_SPACE) - 1); - t += sizeof(CSCOPE_RE_SPACE) - 1; - *t++ = '$'; - - *ptrnp = bp; - *plenp = t - bp; - return (0); -} - -/* * re_error -- * Report a regular expression error. * diff --git a/usr.bin/vi/ex/ex_tag.c b/usr.bin/vi/ex/ex_tag.c index 9dda01b4900..69a62e18f23 100644 --- a/usr.bin/vi/ex/ex_tag.c +++ b/usr.bin/vi/ex/ex_tag.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ex_tag.c,v 1.21 2015/01/16 06:40:14 deraadt Exp $ */ +/* $OpenBSD: ex_tag.c,v 1.22 2015/11/19 07:53:31 bentley Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 @@ -242,10 +242,8 @@ ex_tag_next(SCR *sp, EXCMD *cmdp) return (1); tqp->current = tp; - if (F_ISSET(tqp, TAG_CSCOPE)) - (void)cscope_search(sp, tqp, tp); - else - (void)ctag_search(sp, tp->search, tp->slen, tqp->tag); + (void)ctag_search(sp, tp->search, tp->slen, tqp->tag); + return (0); } @@ -275,10 +273,8 @@ ex_tag_prev(SCR *sp, EXCMD *cmdp) return (1); tqp->current = tp; - if (F_ISSET(tqp, TAG_CSCOPE)) - (void)cscope_search(sp, tqp, tp); - else - (void)ctag_search(sp, tp->search, tp->slen, tqp->tag); + (void)ctag_search(sp, tp->search, tp->slen, tqp->tag); + return (0); } diff --git a/usr.bin/vi/ex/tag.h b/usr.bin/vi/ex/tag.h index 6af6ebb8843..32f87a7201f 100644 --- a/usr.bin/vi/ex/tag.h +++ b/usr.bin/vi/ex/tag.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tag.h,v 1.6 2015/04/24 21:48:31 brynet Exp $ */ +/* $OpenBSD: tag.h,v 1.7 2015/11/19 07:53:31 bentley Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 @@ -14,30 +14,6 @@ */ /* - * Cscope connection information. One of these is maintained per cscope - * connection, linked from the EX_PRIVATE structure. - */ -struct _csc { - LIST_ENTRY(_csc) q; /* Linked list of cscope connections. */ - - char *dname; /* Base directory of this cscope connection. */ - size_t dlen; /* Length of base directory. */ - pid_t pid; /* PID of the connected cscope process. */ - struct timespec mtim; /* Last modification time of cscope database. */ - - FILE *from_fp; /* from cscope: FILE. */ - int from_fd; /* from cscope: file descriptor. */ - FILE *to_fp; /* to cscope: FILE. */ - int to_fd; /* to cscope: file descriptor. */ - - char **paths; /* Array of search paths for this cscope. */ - char *pbuf; /* Search path buffer. */ - size_t pblen; /* Search path buffer length. */ - - char buf[1]; /* Variable length buffer. */ -}; - -/* * Tag file information. One of these is maintained per tag file, linked * from the EXPRIVATE structure. */ @@ -66,8 +42,8 @@ struct _tagf { /* Tag files. */ * | Q3 | <-- | T1 | * +----+ --> +----+ * - * Each Q is a TAGQ, or tag "query", which is the result of one tag or cscope - * command. Each Q references one or more TAG's, or tagged file locations. + * Each Q is a TAGQ, or tag "query", which is the result of one tag. + * Each Q references one or more TAG's, or tagged file locations. * * tag: put a new Q at the head (^]) * tagnext: T1 -> T2 inside Q (^N) @@ -102,7 +78,6 @@ struct _tagq { /* Tag queue. */ char *tag; /* Tag string. */ size_t tlen; /* Tag string length. */ -#define TAG_CSCOPE 0x01 /* Cscope tag. */ u_int8_t flags; char buf[1]; /* Variable length buffer. */ diff --git a/usr.bin/vi/include/ex_def.h b/usr.bin/vi/include/ex_def.h index 3b7747e0788..16ab6709620 100644 --- a/usr.bin/vi/include/ex_def.h +++ b/usr.bin/vi/include/ex_def.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ex_def.h,v 1.4 2014/11/20 08:50:53 bentley Exp $ */ +/* $OpenBSD: ex_def.h,v 1.5 2015/11/19 07:53:31 bentley Exp $ */ #define C_SCROLL 0 #define C_BANG 1 @@ -17,61 +17,60 @@ #define C_CD 14 #define C_CHDIR 15 #define C_COPY 16 -#define C_CSCOPE 17 -#define C_DELETE 18 -#define C_DISPLAY 19 -#define C_EDIT 20 -#define C_EX 21 -#define C_EXUSAGE 22 -#define C_FILE 23 -#define C_FG 24 -#define C_GLOBAL 25 -#define C_HELP 26 -#define C_INSERT 27 -#define C_JOIN 28 -#define C_K 29 -#define C_LIST 30 -#define C_MOVE 31 -#define C_MARK 32 -#define C_MAP 33 -#define C_MKEXRC 34 -#define C_NEXT 35 -#define C_NUMBER 36 -#define C_OPEN 37 -#define C_PRINT 38 -#define C_PRESERVE 39 -#define C_PREVIOUS 40 -#define C_PUT 41 -#define C_QUIT 42 -#define C_READ 43 -#define C_RECOVER 44 -#define C_RESIZE 45 -#define C_REWIND 46 -#define C_SUBSTITUTE 47 -#define C_SCRIPT 48 -#define C_SET 49 -#define C_SHELL 50 -#define C_SOURCE 51 -#define C_STOP 52 -#define C_SUSPEND 53 -#define C_T 54 -#define C_TAG 55 -#define C_TAGNEXT 56 -#define C_TAGPOP 57 -#define C_TAGPREV 58 -#define C_TAGTOP 59 -#define C_UNDO 60 -#define C_UNABBREVIATE 61 -#define C_UNMAP 62 -#define C_V 63 -#define C_VERSION 64 -#define C_VISUAL_EX 65 -#define C_VISUAL_VI 66 -#define C_VIUSAGE 67 -#define C_WRITE 68 -#define C_WN 69 -#define C_WQ 70 -#define C_XIT 71 -#define C_YANK 72 -#define C_Z 73 -#define C_SUBTILDE 74 +#define C_DELETE 17 +#define C_DISPLAY 18 +#define C_EDIT 19 +#define C_EX 20 +#define C_EXUSAGE 21 +#define C_FILE 22 +#define C_FG 23 +#define C_GLOBAL 24 +#define C_HELP 25 +#define C_INSERT 26 +#define C_JOIN 27 +#define C_K 28 +#define C_LIST 29 +#define C_MOVE 30 +#define C_MARK 31 +#define C_MAP 32 +#define C_MKEXRC 33 +#define C_NEXT 34 +#define C_NUMBER 35 +#define C_OPEN 36 +#define C_PRINT 37 +#define C_PRESERVE 38 +#define C_PREVIOUS 39 +#define C_PUT 40 +#define C_QUIT 41 +#define C_READ 42 +#define C_RECOVER 43 +#define C_RESIZE 44 +#define C_REWIND 45 +#define C_SUBSTITUTE 46 +#define C_SCRIPT 47 +#define C_SET 48 +#define C_SHELL 49 +#define C_SOURCE 50 +#define C_STOP 51 +#define C_SUSPEND 52 +#define C_T 53 +#define C_TAG 54 +#define C_TAGNEXT 55 +#define C_TAGPOP 56 +#define C_TAGPREV 57 +#define C_TAGTOP 58 +#define C_UNDO 59 +#define C_UNABBREVIATE 60 +#define C_UNMAP 61 +#define C_V 62 +#define C_VERSION 63 +#define C_VISUAL_EX 64 +#define C_VISUAL_VI 65 +#define C_VIUSAGE 66 +#define C_WRITE 67 +#define C_WN 68 +#define C_WQ 69 +#define C_XIT 70 +#define C_YANK 71 +#define C_Z 72 +#define C_SUBTILDE 73 diff --git a/usr.bin/vi/include/ex_extern.h b/usr.bin/vi/include/ex_extern.h index e056a9305f1..1d6d0ce374e 100644 --- a/usr.bin/vi/include/ex_extern.h +++ b/usr.bin/vi/include/ex_extern.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ex_extern.h,v 1.12 2014/11/20 08:50:53 bentley Exp $ */ +/* $OpenBSD: ex_extern.h,v 1.13 2015/11/19 07:53:31 bentley Exp $ */ int ex(SCR **); int ex_cmd(SCR *); @@ -26,9 +26,6 @@ int argv_free(SCR *); int ex_at(SCR *, EXCMD *); int ex_bang(SCR *, EXCMD *); int ex_cd(SCR *, EXCMD *); -int ex_cscope(SCR *, EXCMD *); -int cscope_display(SCR *); -int cscope_search(SCR *, TAGQ *, TAG *); int ex_delete(SCR *, EXCMD *); int ex_display(SCR *, EXCMD *); int ex_edit(SCR *, EXCMD *); |