diff --git a/.gitignore b/.gitignore
index 87915eb..f1ae378 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1 @@
-cscope-15.5.tar.gz
-cscope-15.5-inverted.patch
-cscope-15.6.tar.gz
-cscope-15.7a.tar.bz2
-/cscope-15.8.tar.bz2
-/cscope-15.8b.tar.gz
 /cscope-15.9.tar.gz
diff --git a/cscope-1-modified-from-patch-81-Fix-reading-include-files-in-.patch b/cscope-1-modified-from-patch-81-Fix-reading-include-files-in-.patch
new file mode 100644
index 0000000..8acf8fa
--- /dev/null
+++ b/cscope-1-modified-from-patch-81-Fix-reading-include-files-in-.patch
@@ -0,0 +1,45 @@
+From 39fb385d69dc06343e8f8a7e28d516d5aef97ec8 Mon Sep 17 00:00:00 2001
+From: Hans-Bernhard Broeker <HBBroeker@T-Online.de>
+Date: Sat, 28 Jul 2018 17:50:03 +0200
+Subject: [PATCH 1/9] [modified from patch #81] Fix reading include files in -c
+ mode
+
+Signed-off-by: Vladis Dronov <vdronov@redhat.com>
+---
+ src/build.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/build.c b/src/build.c
+index a32b5cb..557e660 100644
+--- a/src/build.c
++++ b/src/build.c
+@@ -124,7 +124,7 @@ samelist(FILE *oldrefs, char **names, int count)
+     }
+     /* see if the name list is the same */
+     for (i = 0; i < count; ++i) {
+-	if ((1 != fscanf(oldrefs," %[^\n]",oldname)) ||
++	if ((1 != fscanf(oldrefs," %" PATHLEN_STR "[^\n]",oldname)) ||
+ 	    strnotequal(oldname, names[i])) {
+ 	    return(NO);
+ 	}
+@@ -305,7 +305,7 @@ cscope: -q option mismatch between command line and old symbol database\n");
+ 	/* see if the list of source files is the same and
+ 	   none have been changed up to the included files */
+ 	for (i = 0; i < nsrcfiles; ++i) {
+-	    if ((1 != fscanf(oldrefs," %[^\n]",oldname))
++	    if ((1 != fscanf(oldrefs, " %" PATHLEN_STR "[^\n]", oldname))
+ 		|| strnotequal(oldname, srcfiles[i])
+ 		|| (lstat(srcfiles[i], &statstruct) != 0)
+ 		|| (statstruct.st_mtime > reftime)
+@@ -315,7 +315,7 @@ cscope: -q option mismatch between command line and old symbol database\n");
+ 	}
+ 	/* the old cross-reference is up-to-date */
+ 	/* so get the list of included files */
+-	while (i++ < oldnum && fgets(oldname, sizeof(oldname), oldrefs)) {
++	while (i++ < oldnum && fscanf(oldrefs, "%" PATHLEN_STR "s", oldname)) {
+ 	    addsrcfile(oldname);
+ 	}
+ 	fclose(oldrefs);
+-- 
+2.26.2
+
diff --git a/cscope-15.8-configure-in.patch b/cscope-15.8-configure-in.patch
deleted file mode 100644
index 47ae696..0000000
--- a/cscope-15.8-configure-in.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up ./configure.in.orig ./configure.in
---- ./configure.in.orig	2013-03-25 11:56:12.588450042 -0400
-+++ ./configure.in	2013-03-25 11:56:19.723645454 -0400
-@@ -14,6 +14,7 @@ dnl AC_CHECK_YACC
- dnl Checks for programs.
- AC_PROG_INSTALL
- AC_PROG_CC
-+AM_PROG_CC_C_O
- AC_EXEEXT
- AM_PROG_LEX
- AM_CONDITIONAL(USING_LEX, test "x$LEX" = "xlex")
diff --git a/cscope-15.8-empty-function-array.patch b/cscope-15.8-empty-function-array.patch
deleted file mode 100644
index 3a1ca62..0000000
--- a/cscope-15.8-empty-function-array.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -up ./src/find.c.orig ./src/find.c
---- ./src/find.c.orig	2014-04-15 12:17:44.412383314 -0400
-+++ ./src/find.c	2014-04-15 12:19:17.122065215 -0400
-@@ -1201,7 +1201,9 @@ getposting(void)
- static void
- putpostingref(POSTING *p, char *pat)
- {
--	static char	function[PATLEN + 1];	/* function name */
-+	// initialize function to "unknown" so that the first line of temp1
-+	// is properly formed if symbol matches a header file entry first time
-+	static char function[PATLEN + 1] = "unknown";/* function name */
- 
- 	if (p->fcnoffset == 0) {
- 		if (p->type == FCNDEF) { /* need to find the function name */
diff --git a/cscope-2-Cull-extraneous-declaration.patch b/cscope-2-Cull-extraneous-declaration.patch
new file mode 100644
index 0000000..ccbeba2
--- /dev/null
+++ b/cscope-2-Cull-extraneous-declaration.patch
@@ -0,0 +1,26 @@
+From 6a6998ecd0392ea643c4c4b317af9af8270761aa Mon Sep 17 00:00:00 2001
+From: Hans-Bernhard Broeker <HBBroeker@T-Online.de>
+Date: Thu, 9 Aug 2018 16:25:31 +0200
+Subject: [PATCH 3/9] Cull extraneous declaration
+
+Signed-off-by: Vladis Dronov <vdronov@redhat.com>
+---
+ src/global.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/global.h b/src/global.h
+index dbc8a43..a6f1486 100644
+--- a/src/global.h
++++ b/src/global.h
+@@ -224,7 +224,7 @@ extern	char	dicode2[];	/* digraph second character code */
+    + dicode2[(unsigned char)(inchar2)])
+ 
+ /* main.c global data */
+-extern	char	*editor, *home, *shell, *lineflag;	/* environment variables */
++extern	char	*editor, *shell, *lineflag;	/* environment variables */
+ extern	char	*home;		/* Home directory */
+ extern 	BOOL	lineflagafterfile;
+ extern	char	*argv0;		/* command name */
+-- 
+2.26.2
+
diff --git a/cscope-3-Avoid-putting-directories-found-during-header-search.patch b/cscope-3-Avoid-putting-directories-found-during-header-search.patch
new file mode 100644
index 0000000..500ce15
--- /dev/null
+++ b/cscope-3-Avoid-putting-directories-found-during-header-search.patch
@@ -0,0 +1,32 @@
+From f693474b85f8dc1d31570833c62d9210ed1ffcf2 Mon Sep 17 00:00:00 2001
+From: mikhail nefedov <mnefedov@users.sourceforge.net>
+Date: Thu, 23 Aug 2018 00:36:52 +0200
+Subject: [PATCH 4/9] Avoid putting directories found during header search into
+ srcfiles.
+
+Signed-off-by: Vladis Dronov <vdronov@redhat.com>
+---
+ src/dir.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/dir.c b/src/dir.c
+index 01c599e..7f7287e 100644
+--- a/src/dir.c
++++ b/src/dir.c
+@@ -616,8 +616,11 @@ incfile(char *file, char *type)
+ 	    snprintf(path, sizeof(path), "%.*s/%s",
+ 		    (int)(PATHLEN - 2 - file_len), incdirs[i],
+ 		    file);
+-	    if (access(compath(path), READ) == 0) {
+-		addsrcfile(path);
++            if (access(compath(path), READ) == 0) {
++                struct stat st;
++                if( 0 == stat(path,&st) && S_ISREG(st.st_mode) ) {
++                     addsrcfile(path);
++                }
+ 		break;
+ 	    }
+ 	}
+-- 
+2.26.2
+
diff --git a/cscope-4-Avoid-double-free-via-double-fclose-in-changestring.patch b/cscope-4-Avoid-double-free-via-double-fclose-in-changestring.patch
new file mode 100644
index 0000000..8e862bf
--- /dev/null
+++ b/cscope-4-Avoid-double-free-via-double-fclose-in-changestring.patch
@@ -0,0 +1,38 @@
+From f632c3fd86fce2c495a290dd70f5f09e3e7e7a28 Mon Sep 17 00:00:00 2001
+From: Hans-Bernhard Broeker <HBBroeker@T-Online.de>
+Date: Sat, 13 Apr 2019 14:52:35 +0200
+Subject: [PATCH 5/9] Avoid double-free via double fclose in changestring.
+
+Mark closed FILE* by setting it to NULL, and check for that.
+
+Signed-off-by: Vladis Dronov <vdronov@redhat.com>
+---
+ src/command.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/command.c b/src/command.c
+index 8740b11..dcb5278 100644
+--- a/src/command.c
++++ b/src/command.c
+@@ -786,6 +786,7 @@ changestring(void)
+     }
+     fprintf(script, "w\nq\n!\n");	/* write and quit */
+     fclose(script);
++    script = NULL;
+ 
+     /* if any line was marked */
+     if (anymarked == YES) {
+@@ -803,7 +804,9 @@ changestring(void)
+     }
+     changing = NO;
+     mousemenu();
+-    fclose(script);
++    if (script != NULL) {
++	fclose(script);
++    }
+     free(change);
+     return(anymarked);
+ }
+-- 
+2.26.2
+
diff --git a/cscope-5-contrib-ocs-Fix-bashims-Closes-480591.patch b/cscope-5-contrib-ocs-Fix-bashims-Closes-480591.patch
new file mode 100644
index 0000000..1807974
--- /dev/null
+++ b/cscope-5-contrib-ocs-Fix-bashims-Closes-480591.patch
@@ -0,0 +1,77 @@
+From bb7f25fad3cade493486a6287f5212cdfb6cce24 Mon Sep 17 00:00:00 2001
+From: Jari Aalto <jari.aalto@cante.net>
+Date: Sat, 8 May 2010 20:15:35 +0300
+Subject: [PATCH 6/9] contrib/ocs: Fix bashims (Closes: #480591)
+
+Signed-off-by: Jari Aalto <jari.aalto@cante.net>
+Signed-off-by: Vladis Dronov <vdronov@redhat.com>
+---
+ contrib/ocs | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/contrib/ocs b/contrib/ocs
+index e924f4f..bd556b4 100755
+--- a/contrib/ocs
++++ b/contrib/ocs
+@@ -86,7 +86,7 @@ if [ ! -d ${SYSDIR} ]; then
+ fi
+ 
+ # Check that cscope is in PATH
+-type cscope 1>/dev/null 2>&1
++which cscope 1>/dev/null 2>&1
+ 
+ if [ $? -ne 0 ]
+ then
+@@ -167,8 +167,8 @@ create_list()
+ 
+ 	if [ "${FORCE}" != "Y" ]
+ 	then
+-	    echo "\n${LIST}"
+-	    echo "Update the library? <(Y)es, (N)o, (Q)uit> [n] \c"
++	    printf "\n${LIST}\n"
++	    printf "Update the library? <(Y)es, (N)o, (Q)uit> [n] "
+ 	    read x y
+ 	    case $x in
+ 		[Yy]* )	;;
+@@ -176,9 +176,9 @@ create_list()
+ 		*)	return	;;
+ 	    esac
+ 	fi
+-	echo "Updating library:\n  ${LIST} \c"
++	printf "Updating library:\n  ${LIST} "
+     else
+-	echo "Creating library:\n  ${LIST} \c"
++	printf "Creating library:\n  ${LIST} "
+     fi
+ 
+     (
+@@ -196,7 +196,7 @@ create_list()
+ 				  -print
+    ) | grep -v SCCS | sort -u > ${LIST}
+ 
+-    echo "\n`cat ${LIST} | wc -l` files listed"
++    printf "\n`cat ${LIST} | wc -l` files listed\n"
+ }
+ 
+ #
+@@ -210,7 +210,7 @@ exp_inc()
+     then
+ 	for i in `cat ${theInc}`
+ 	do
+-	    echo "-I $i \c"
++	    printf "-I $i "
+ 	done
+     fi
+ }
+@@ -285,7 +285,7 @@ std_libs ${SYSDIR}$PWD
+ 
+ DIR=$PWD
+ if [ ! -n "${NOUPDATE}" -o -n "${SPECDEST}" ] ; then
+-echo "Create new library? <(L)ocal, (H)ome, (S)ystem, (Q)uit> [q] \c"
++    printf "Create new library? <(L)ocal, (H)ome, (S)ystem, (Q)uit> [q] "
+ 
+ # shellcheck disable=SC2034
+ read x y
+-- 
+2.26.2
+
diff --git a/cscope-6-doc-cscope.1-Fix-hyphens.patch b/cscope-6-doc-cscope.1-Fix-hyphens.patch
new file mode 100644
index 0000000..290534d
--- /dev/null
+++ b/cscope-6-doc-cscope.1-Fix-hyphens.patch
@@ -0,0 +1,130 @@
+From 3f9e3da40a77274705c9cb9103a6046daa950f5d Mon Sep 17 00:00:00 2001
+From: Jari Aalto <jari.aalto@cante.net>
+Date: Sat, 8 May 2010 20:16:14 +0300
+Subject: [PATCH 7/9] doc/cscope.1: Fix hyphens
+
+Signed-off-by: Jari Aalto <jari.aalto@cante.net>
+Signed-off-by: Vladis Dronov <vdronov@redhat.com>
+---
+ doc/cscope.1 | 33 ++++++++++++++++-----------------
+ 1 file changed, 16 insertions(+), 17 deletions(-)
+
+diff --git a/doc/cscope.1 b/doc/cscope.1
+index ca94e8b..0318347 100644
+--- a/doc/cscope.1
++++ b/doc/cscope.1
+@@ -1,4 +1,3 @@
+-.PU
+ .TH CSCOPE "1" "January 2007" "The Santa Cruz Operation"
+ .SH NAME
+ cscope - interactively examine a C program 
+@@ -106,7 +105,7 @@ below. (The #include files
+ may be specified with either double quotes or angle brackets.)
+ The incdir directory is searched in addition to the current
+ directory (which is searched first) and the standard list
+-(which is searched last). If more than one occurrence of -I
++(which is searched last). If more than one occurrence of \-I
+ appears, the directories are searched in the order they appear
+ on the command line.
+ .TP
+@@ -129,7 +128,7 @@ source trees generally do not use it.
+ .TP
+ .B -L
+ Do a single search with line-oriented output when used with the
+--num pattern option.
++\-num pattern option.
+ .TP
+ .B -l
+ Line-oriented interface (see ``Line-Oriented Interface''
+@@ -146,7 +145,7 @@ Prepend
+ .I path 
+ to relative file names in a pre-built cross-reference file so you do
+ not have to change to the directory where the cross-reference file was
+-built. This option is only valid with the -d option.
++built. This option is only valid with the \-d option.
+ .TP
+ .BI -p n
+ Display the last
+@@ -195,7 +194,7 @@ Remove the cscope reference file and inverted indexes when exiting
+ .I files
+ A list of file names to operate on.
+ .PP
+-The -I, -c, -k, -p, -q, and -T options can also be in the cscope.files file.
++The \-I, \-c, \-k, \-p, \-q, and \-T options can also be in the cscope.files file.
+ .PP
+ .SS Requesting the initial search
+ .PP
+@@ -266,7 +265,7 @@ Append the displayed list of lines to a file.
+ .TP
+ .B <
+ Read lines from a file that is in symbol reference format
+-(created by > or >>), just like the -F option.
++(created by > or >>), just like the \-F option.
+ .TP
+ .B ^
+ Filter all lines through a shell command and display the
+@@ -371,7 +370,7 @@ commands, respectively.
+ .PP   
+ .SS Line-Oriented interface
+ .PP  
+-The -l option lets you use cscope where a screen-oriented interface
++The \-l option lets you use cscope where a screen-oriented interface
+ would not be useful, for example, from another screen-oriented
+ program.
+ .PP  
+@@ -380,10 +379,10 @@ with the field number (counting from 0) immediately followed by the
+ search pattern, for example, ``lmain'' finds the definition of the
+ main function.
+ .PP   
+-If you just want a single search, instead of the -l option use the -L
+-and -num pattern options, and you won't get the >> prompt.
++If you just want a single search, instead of the \-l option use the \-L
++and \-num pattern options, and you won't get the >> prompt.
+ .PP 
+-For -l, cscope outputs the number of reference lines
++For \-l, cscope outputs the number of reference lines
+ cscope: 2 lines
+ .PP  
+ For each reference found, cscope outputs a line consisting of the file
+@@ -468,11 +467,11 @@ is not set, cscope searches only in the current directory.
+ .SH FILES
+ .TP
+ .B cscope.files
+-Default files containing -I, -p, -q, and -T options and the
+-list of source files (overridden by the -i option).
++Default files containing \-I, \-p, \-q, and \-T options and the
++list of source files (overridden by the \-i option).
+ .TP
+ .B cscope.out
+-Symbol cross-reference file (overridden by the -f option),
++Symbol cross-reference file (overridden by the \-f option),
+ which is put in the home directory if it cannot be created in
+ the current directory.
+ .TP
+@@ -482,11 +481,11 @@ the current directory.
+ .B cscope.po.out
+ .PD 1
+ Default files containing the inverted index used for quick
+-symbol searching (-q option). If you use the -f option to
++symbol searching (\-q option). If you use the \-f option to
+ rename the cross-reference file (so it's not cscope.out), the
+ names for these inverted index files will be created by adding
+- .in and .po to the name you supply with -f. For example, if you
+-indicated -f xyz, then these files would be named xyz.in and
++ .in and .po to the name you supply with \-f. For example, if you
++indicated \-f xyz, then these files would be named xyz.in and
+ xyz.po.
+ .TP
+ .B INCDIR
+@@ -554,7 +553,7 @@ definition, for example,
+ .PP
+  char flag
+  #ifdef ALLOCATE_STORAGE
+-      = -1
++      = \-1
+  #endif
+  ;
+ .PP
+-- 
+2.26.2
+
diff --git a/cscope-7-fscanner-swallow-function-as-parameters.patch b/cscope-7-fscanner-swallow-function-as-parameters.patch
new file mode 100644
index 0000000..a089a61
--- /dev/null
+++ b/cscope-7-fscanner-swallow-function-as-parameters.patch
@@ -0,0 +1,43 @@
+From e1b4cbc93529b07b3217928e8f9b1f43b80f9b06 Mon Sep 17 00:00:00 2001
+From: Jiri Slaby <jslaby@suse.cz>
+Date: Fri, 5 Dec 2014 19:15:53 +0100
+Subject: [PATCH 8/9] fscanner: swallow function as parameters
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Some functions take as a parameter a pointer to another function. This
+causes troubles in the cscope scanner and such function definition is
+dropped on the floor.
+
+Instead of choking and skipping the definition/declaration, teach the
+scanner about this case. So now cscope will not skip those and put
+them properly in the index.
+
+I carry this patch for a couple of months and using cscope daily on
+the Linux kernel and see no problems.
+
+Signed-off-by: Jiri Slaby <jslaby@suse.cz>
+Cc: Hans-Bernhard Bröker <broeker@users.sourceforge.net>
+Cc: Neil Horman <nhorman@users.sourceforge.net>
+Signed-off-by: Vladis Dronov <vdronov@redhat.com>
+---
+ src/fscanner.l | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/fscanner.l b/src/fscanner.l
+index 8a93192..43880bf 100644
+--- a/src/fscanner.l
++++ b/src/fscanner.l
+@@ -505,7 +505,7 @@ if{wsnl}*\(	{ 	/* ignore 'if' */
+ 		}
+ 
+ <WAS_IDENTIFIER>{       
+-{ws}*\(({wsnl}|{identifier}|{number}|[*&[\]=,.:])*\)([()]|{wsnl})*[:a-zA-Z_#{]	{
++{ws}*\(({wsnl}|{identifier}|\({ws}*\*{ws}*{identifier}{ws}*\){ws}*\([^()]*\)|{number}|[*&[\]=,.:])*\)([()]|{wsnl})*[:a-zA-Z_#{]	{
+ 			/* a function definition */
+ 			/* note: "#define a (b) {" and "#if defined(a)\n#" 
+ 			 * are not fcn definitions! */
+-- 
+2.26.2
+
diff --git a/cscope-8-emacs-plugin-fixup-GNU-Emacs-27.1-removes-function-p.patch b/cscope-8-emacs-plugin-fixup-GNU-Emacs-27.1-removes-function-p.patch
new file mode 100644
index 0000000..2f32cef
--- /dev/null
+++ b/cscope-8-emacs-plugin-fixup-GNU-Emacs-27.1-removes-function-p.patch
@@ -0,0 +1,81 @@
+From eaea31cb93ecddda69a373f83f632e1a450c3c90 Mon Sep 17 00:00:00 2001
+From: Brock Zheng Techyauld Ltd <yzheng@techyauld.com>
+Date: Tue, 25 Aug 2020 20:28:11 +0800
+Subject: [PATCH 9/9] emacs plugin fixup: GNU/Emacs 27.1 removes function
+ process-kill-without-query
+
+Signed-off-by: Vladis Dronov <vdronov@redhat.com>
+---
+ contrib/xcscope/xcscope.el | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/contrib/xcscope/xcscope.el b/contrib/xcscope/xcscope.el
+index 0e814ea..859dff5 100644
+--- a/contrib/xcscope/xcscope.el
++++ b/contrib/xcscope/xcscope.el
+@@ -180,7 +180,7 @@
+ ;; variable is used to determine the mapping.  One use for this
+ ;; variable is when you want to share the database file with other
+ ;; users; in this case, the database may be located in a directory
+-;; separate from the source files.  
++;; separate from the source files.
+ ;;
+ ;; Setting the variable, `cscope-initial-directory', is useful when a
+ ;; search is to be expanded by specifying a cscope database directory
+@@ -366,7 +366,7 @@
+ ;;      disable automatic database creation, updating, and
+ ;;      maintenance.
+ ;;
+-;; "cscope-display-cscope-buffer" 
++;; "cscope-display-cscope-buffer"
+ ;;      If non-nil, display the *cscope* buffer after each search
+ ;;      (default).  This variable can be set in order to reduce the
+ ;;      number of keystrokes required to navigate through the matches.
+@@ -1233,7 +1233,7 @@ directory should begin.")
+ 			:style toggle :selected cscope-use-relative-paths ]
+ 		      [ "No mouse prompts" (setq cscope-no-mouse-prompts
+ 						 (not cscope-no-mouse-prompts))
+-			:style toggle :selected cscope-no-mouse-prompts ] 
++			:style toggle :selected cscope-no-mouse-prompts ]
+ 		      )
+ 		    ))
+ 
+@@ -1291,7 +1291,7 @@ The text properties to be added:
+   )
+ 
+ 
+-(defun cscope-show-entry-internal (file line-number 
++(defun cscope-show-entry-internal (file line-number
+ 					&optional save-mark-p window arrow-p)
+   "Display the buffer corresponding to FILE and LINE-NUMBER
+ in some window.  If optional argument WINDOW is given,
+@@ -1943,7 +1943,7 @@ using the mouse."
+ 			    cscope-directory
+ 			    (file-name-directory cscope-directory))
+ 		      ))
+-		(setq cscope-directory 
++		(setq cscope-directory
+ 		      (file-name-as-directory cscope-directory))
+ 		(if (not (member cscope-directory cscope-searched-dirs))
+ 		    (progn
+@@ -2006,7 +2006,7 @@ using the mouse."
+ 	      (set-process-filter cscope-process cscope-filter-func)
+ 	      (set-process-sentinel cscope-process cscope-sentinel-func)
+ 	      (set-marker (process-mark cscope-process) (point))
+-	      (process-kill-without-query cscope-process)
++              (set-process-query-on-exit-flag cscope-process nil)
+ 	      (if cscope-running-in-xemacs
+ 		  (setq modeline-process ": Searching ..."))
+ 	      (setq buffer-read-only t)
+@@ -2139,7 +2139,7 @@ SENTINEL-FUNC are optional process filter and sentinel, respectively."
+ 		   cscope-indexing-script args))
+       (set-process-sentinel cscope-unix-index-process
+ 			    'cscope-unix-index-files-sentinel)
+-      (process-kill-without-query cscope-unix-index-process)
++      (set-process-query-on-exit-flag cscope-unix-index-process nil)
+       )
+     ))
+ 
+-- 
+2.26.2
+
diff --git a/cscope-dblfree.patch b/cscope-dblfree.patch
deleted file mode 100644
index d300d04..0000000
--- a/cscope-dblfree.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up ./src/command.c.dblfree ./src/command.c
---- ./src/command.c.dblfree	2019-04-11 07:08:24.358253603 -0400
-+++ ./src/command.c	2019-04-11 07:08:43.955193615 -0400
-@@ -803,7 +803,6 @@ changestring(void)
-     }
-     changing = NO;
-     mousemenu();
--    fclose(script);
-     free(change);
-     return(anymarked);
- }
diff --git a/cscope-invindex-sizing.patch b/cscope-invindex-sizing.patch
deleted file mode 100644
index b84aed2..0000000
--- a/cscope-invindex-sizing.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-diff -u -r1.20 invlib.c
---- src/invlib.c	12 Mar 2012 17:57:55 -0000	1.20
-+++ src/invlib.c	10 Jul 2012 19:57:51 -0000
-@@ -169,8 +169,8 @@
- 	numpost = 1;
- 
- 	/* set up as though a block had come and gone, i.e., set up for new block  */
--	/* FIXME HBB: magic number alert (16) */
--	amtused = 16; /* leave no space - init 3 words + one for luck */
-+	/* 3 longs needed for: numinvitems, next block, and previous block */
-+	amtused = 3 * sizeof(long);
- 	numinvitems = 0;
- 	numlogblk = 0;
- 	lastinblk = sizeof(t_logicalblk);
-@@ -371,8 +371,10 @@
- 	zipf[0]++;
- #endif
-     len = strlen(thisterm);
-+    /* length of term rounded up to long boundary */
-     wdlen = (len + (sizeof(long) - 1)) / sizeof(long);
--    /* HBB FIXME 20060419: magic number: 3 */
-+    /* each term needs 2 longs for its iteminfo and
-+     * 1 long for its offset */
-     numwilluse = (wdlen + 3) * sizeof(long);
-     /* new block if at least 1 item in block */
-     if (numinvitems && numwilluse + amtused > sizeof(t_logicalblk)) {
-@@ -435,7 +437,8 @@
- 	    invcannotwrite(indexfile);
- 	    return(0);
- 	}
--	amtused = 16;
-+	/* 3 longs needed for: numinvitems, next block, and previous block */
-+	amtused = 3 * sizeof(long);
- 	numlogblk++;
- 	/* check if had to back up, if so do it */
- 	if (backupflag) {
-@@ -468,7 +471,7 @@
- 	    while (tptr3 > tptr)
- 		*--tptr2 = *--tptr3;
- 	    lastinblk -= j;
--	    amtused += (8 * backupflag + j);
-+	    amtused += ((2 * sizeof(long)) * backupflag + j);
- 	    for (i = 3; i < (backupflag * 2 + 2); i += 2) {
- 		iteminfo.packword[0] = logicalblk.invblk[i];
- 		iteminfo.e.offset += (tptr2 - tptr3);
diff --git a/cscope.spec b/cscope.spec
index 8723c3a..3a8502c 100644
--- a/cscope.spec
+++ b/cscope.spec
@@ -1,11 +1,11 @@
 Summary: C source code tree search and browse tool 
 Name: cscope
 Version: 15.9
-Release: 9%{?dist}
-Source0: https://downloads.sourceforge.net/project/%{name}/%{name}/%{version}/%{name}-%{version}.tar.gz
+Release: 10%{?dist}
+Source0: https://downloads.sourceforge.net/project/%{name}/%{name}/v%{version}/%{name}-%{version}.tar.gz
 URL: http://cscope.sourceforge.net
 License: BSD and GPLv2+
-BuildRequires:  gcc
+BuildRequires: gcc
 BuildRequires: pkgconfig ncurses-devel flex bison m4
 BuildRequires: autoconf automake
 BuildRequires: make
@@ -15,7 +15,14 @@ Requires: ed
 Requires: xemacs-filesystem
 %endif
 
-Patch1: cscope-dblfree.patch
+Patch1: cscope-1-modified-from-patch-81-Fix-reading-include-files-in-.patch
+Patch2: cscope-2-Cull-extraneous-declaration.patch
+Patch3: cscope-3-Avoid-putting-directories-found-during-header-search.patch
+Patch4: cscope-4-Avoid-double-free-via-double-fclose-in-changestring.patch
+Patch5: cscope-5-contrib-ocs-Fix-bashims-Closes-480591.patch
+Patch6: cscope-6-doc-cscope.1-Fix-hyphens.patch
+Patch7: cscope-7-fscanner-swallow-function-as-parameters.patch
+Patch8: cscope-8-emacs-plugin-fixup-GNU-Emacs-27.1-removes-function-p.patch
 
 %define cscope_share_path %{_datadir}/cscope
 %define xemacs_lisp_path %{_datadir}/xemacs/site-packages/lisp
@@ -33,6 +40,13 @@ matches for use in file editing.
 %prep
 %setup -q
 %patch1 -p1 
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
 
 autoreconf
 
@@ -91,6 +105,11 @@ rm -f %{emacs_lisp_path}/xcscope.el
 rm -f %{vim_plugin_path}/cctree.vim
 
 %changelog
+* Tue Mar 16 2021 Vladis Dronov <vdronov@redhat.com> - 15.9-10
+- Bring in important patches from the upstream (39fb38..eaea31 in a git repo)
+- Fix the upstream tarball URL
+- Remove outdated patch files
+
 * Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 15.9-9
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
 
diff --git a/sources b/sources
index 007e52a..bd5c1f2 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (cscope-15.9.tar.gz) = 2cb84a85b03973cda8e9462b4b209495eb6c41e3f5fcfe7cf8605d8ac8875c5062e02d0da27ef7035388c5ebc3082e6ebd78590d305ff752cbe4276059dad81a
+SHA512 (cscope-15.9.tar.gz) = f3b95da5eb5c036cd39215785990c7cce7ce7b8eda4b18e60792e70d01ffb63809ce32ace310a9aefd88e6761c1609039ccfab0e8e49f81730bc1630babbcb80