diff options
Diffstat (limited to 'source/a')
162 files changed, 5034 insertions, 13137 deletions
diff --git a/source/a/aaa_base/aaa_base.SlackBuild b/source/a/aaa_base/aaa_base.SlackBuild index b41e95454..eb67560f2 100755 --- a/source/a/aaa_base/aaa_base.SlackBuild +++ b/source/a/aaa_base/aaa_base.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011, 2012 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -20,8 +20,8 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=14.0 -BUILD=${BUILD:-5} +VERSION=14.1 +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then diff --git a/source/a/aaa_base/os-release b/source/a/aaa_base/os-release index 717dbbf8c..2f64cbf7c 100644 --- a/source/a/aaa_base/os-release +++ b/source/a/aaa_base/os-release @@ -1,10 +1,10 @@ NAME=Slackware -VERSION="14.0" +VERSION="14.1" ID=slackware -VERSION_ID=14.0 -PRETTY_NAME="Slackware 14.0" +VERSION_ID=14.1 +PRETTY_NAME="Slackware 14.1" ANSI_COLOR="0;34" -CPE_NAME="cpe:/o:slackware:slackware_linux:14.0" +CPE_NAME="cpe:/o:slackware:slackware_linux:14.1" HOME_URL="http://slackware.com/" SUPPORT_URL="http://www.linuxquestions.org/questions/slackware-14/" BUG_REPORT_URL="http://www.linuxquestions.org/questions/slackware-14/" diff --git a/source/a/aaa_base/slackware-version b/source/a/aaa_base/slackware-version index bd93610e1..1147d2973 100644 --- a/source/a/aaa_base/slackware-version +++ b/source/a/aaa_base/slackware-version @@ -1 +1 @@ -Slackware 14.0 +Slackware 14.1 diff --git a/source/a/aaa_elflibs/aaa_elflibs.SlackBuild b/source/a/aaa_elflibs/aaa_elflibs.SlackBuild index 20a343d2d..8fd9f3fe8 100755 --- a/source/a/aaa_elflibs/aaa_elflibs.SlackBuild +++ b/source/a/aaa_elflibs/aaa_elflibs.SlackBuild @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,8 +21,8 @@ PKGNAM=aaa_elflibs -VERSION=${VERSION:-14.0} -BUILD=${BUILD:-4} +VERSION=${VERSION:-14.1} +BUILD=${BUILD:-3} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then diff --git a/source/a/aaa_elflibs/symlinks-to-tracked-libs b/source/a/aaa_elflibs/symlinks-to-tracked-libs index 38a44e9e9..f19a6b9e8 100644 --- a/source/a/aaa_elflibs/symlinks-to-tracked-libs +++ b/source/a/aaa_elflibs/symlinks-to-tracked-libs @@ -6,6 +6,7 @@ /lib/libdm.so.0 /lib/libfuse.so.2 /lib/libgpm.so.1 +/lib/libgpm.so.2 /lib/liblzma.so.5 /lib/libncurses.so.5 /lib/libncursesw.so.5 @@ -44,11 +45,11 @@ /usr/lib/libmenu.so.5 /usr/lib/libmenuw.so.5 /usr/lib/libmm.so.14 -/usr/lib/libmp.so.3 /usr/lib/libmpfr.so.1 /usr/lib/libpanel.so.5 /usr/lib/libpanelw.so.5 /usr/lib/libpcre.so.0 +/usr/lib/libpcre.so.1 /usr/lib/libpcreposix.so.0 /usr/lib/libpng.so.3 /usr/lib/libpng.so.14 diff --git a/source/a/aaa_elflibs/tracked-files b/source/a/aaa_elflibs/tracked-files index 040ecbbcd..16b731ba0 100644 --- a/source/a/aaa_elflibs/tracked-files +++ b/source/a/aaa_elflibs/tracked-files @@ -6,4 +6,3 @@ /usr/lib/libcups.so.2 /usr/lib/libcupsimage.so.2 /usr/lib/libgcc_s.so.1 -/usr/lib/libtalloc.so.2 diff --git a/source/a/acpid/slack-desc b/source/a/acpid/slack-desc index 1b065fcee..a458e9f31 100644 --- a/source/a/acpid/slack-desc +++ b/source/a/acpid/slack-desc @@ -15,5 +15,5 @@ acpid: order to make the Linux ACPI support completely functional. acpid: acpid: ACPI must be compiled into the kernel to run acpid. acpid: -acpid: Homepage: http://www.tedfelix.com/linux/acpid-netlink.html +acpid: Homepage: http://sourceforge.net/projects/acpid2/ acpid: diff --git a/source/a/bash/bash-4.2-patches/bash42-038 b/source/a/bash/bash-4.2-patches/bash42-038 new file mode 100644 index 000000000..411e4dd54 --- /dev/null +++ b/source/a/bash/bash-4.2-patches/bash42-038 @@ -0,0 +1,47 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.2 +Patch-ID: bash42-038 + +Bug-Reported-by: armandsl@gmail.com +Bug-Reference-ID: <20120822112810.8D14920040@windmill.latviatours.lv> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2012-08/msg00049.html + +Bug-Description: + +If a backslash-newline (which is removed) with no other input is given as +input to `read', the shell tries to dereference a null pointer and seg faults. + +Patch (apply with `patch -p0'): + +*** ../bash-4.2-patched/builtins/read.def 2012-03-11 17:52:44.000000000 -0400 +--- builtins/read.def 2012-08-22 11:53:09.000000000 -0400 +*************** +*** 792,796 **** + #endif + +! if (saw_escape) + { + t = dequote_string (input_string); +--- 847,851 ---- + #endif + +! if (saw_escape && input_string && *input_string) + { + t = dequote_string (input_string); +*** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010 +--- patchlevel.h Thu Feb 24 21:41:34 2011 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 37 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 38 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/source/a/bash/bash-4.2-patches/bash42-039 b/source/a/bash/bash-4.2-patches/bash42-039 new file mode 100644 index 000000000..21457af12 --- /dev/null +++ b/source/a/bash/bash-4.2-patches/bash42-039 @@ -0,0 +1,58 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.2 +Patch-ID: bash42-039 + +Bug-Reported-by: Dan Douglas <ormaaj@gmail.com> +Bug-Reference-ID: <1498458.MpVlmOXDB7@smorgbox> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2012-09/msg00008.html + +Bug-Description: + +Under certain circumstances, bash attempts to expand variables in arithmetic +expressions even when evaluation is being suppressed. + +Patch (apply with `patch -p0'): + +*** ../bash-4.2-patched/expr.c 2011-11-21 18:03:35.000000000 -0500 +--- expr.c 2012-09-09 16:31:18.000000000 -0400 +*************** +*** 1010,1013 **** +--- 1073,1082 ---- + #endif + ++ /*itrace("expr_streval: %s: noeval = %d", tok, noeval);*/ ++ /* If we are suppressing evaluation, just short-circuit here instead of ++ going through the rest of the evaluator. */ ++ if (noeval) ++ return (0); ++ + /* [[[[[ */ + #if defined (ARRAY_VARS) +*************** +*** 1183,1186 **** +--- 1256,1263 ---- + + *cp = '\0'; ++ /* XXX - watch out for pointer aliasing issues here */ ++ if (curlval.tokstr && curlval.tokstr == tokstr) ++ init_lvalue (&curlval); ++ + FREE (tokstr); + tokstr = savestring (tp); +*** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010 +--- patchlevel.h Thu Feb 24 21:41:34 2011 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 38 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 39 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/source/a/bash/bash-4.2-patches/bash42-040 b/source/a/bash/bash-4.2-patches/bash42-040 new file mode 100644 index 000000000..1de0fe370 --- /dev/null +++ b/source/a/bash/bash-4.2-patches/bash42-040 @@ -0,0 +1,56 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.2 +Patch-ID: bash42-040 + +Bug-Reported-by: Andrey Zaitsev <jstcdr@gmail.com> +Bug-Reference-ID: <CAEZVQT5PJ1Mb_Zh8LT5qz8sv+-9Q6hGfQ5DU9ZxdJ+gV7xBUaQ@mail.gmail.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2012-04/msg00144.html + +Bug-Description: + +Output redirection applied to builtin commands missed I/O errors if +they happened when the file descriptor was closed, rather than on write +(e.g., like with an out-of-space error on a remote NFS file system). + +Patch (apply with `patch -p0'): + +*** ../bash-4.2-patched/redir.c 2011-01-02 16:00:31.000000000 -0500 +--- redir.c 2012-04-24 20:42:12.000000000 -0400 +*************** +*** 1092,1099 **** + #if defined (BUFFERED_INPUT) + check_bash_input (redirector); +! close_buffered_fd (redirector); + #else /* !BUFFERED_INPUT */ +! close (redirector); + #endif /* !BUFFERED_INPUT */ + } + break; +--- 1092,1101 ---- + #if defined (BUFFERED_INPUT) + check_bash_input (redirector); +! r = close_buffered_fd (redirector); + #else /* !BUFFERED_INPUT */ +! r = close (redirector); + #endif /* !BUFFERED_INPUT */ ++ if (r < 0 && (flags & RX_INTERNAL) && (errno == EIO || errno == ENOSPC)) ++ REDIRECTION_ERROR (r, errno, -1); + } + break; +*** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010 +--- patchlevel.h Thu Feb 24 21:41:34 2011 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 39 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 40 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/source/a/bash/bash-4.2-patches/bash42-041 b/source/a/bash/bash-4.2-patches/bash42-041 new file mode 100644 index 000000000..37d4ac704 --- /dev/null +++ b/source/a/bash/bash-4.2-patches/bash42-041 @@ -0,0 +1,47 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.2 +Patch-ID: bash42-041 + +Bug-Reported-by: Andrey Borzenkov <arvidjaar@gmail.com> +Bug-Reference-ID: <20121202205200.2134478e@opensuse.site> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2012-12/msg00008.html + +Bug-Description: + +Process substitution incorrectly inherited a flag that inhibited using the +(local) temporary environment for variable lookups if it was providing +the filename to a redirection. The intent the flag is to enforce the +Posix command expansion ordering rules. + +Patch (apply with `patch -p0'): + +*** ../bash-4.2-patched/subst.c 2012-07-14 15:53:20.000000000 -0400 +--- subst.c 2012-12-02 22:26:54.000000000 -0500 +*************** +*** 5125,5128 **** +--- 5129,5136 ---- + #endif /* HAVE_DEV_FD */ + ++ /* subshells shouldn't have this flag, which controls using the temporary ++ environment for variable lookups. */ ++ expanding_redir = 0; ++ + result = parse_and_execute (string, "process substitution", (SEVAL_NONINT|SEVAL_NOHIST)); + +*** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010 +--- patchlevel.h Thu Feb 24 21:41:34 2011 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 40 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 41 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/source/a/bash/bash-4.2-patches/bash42-042 b/source/a/bash/bash-4.2-patches/bash42-042 new file mode 100644 index 000000000..1ce0cae30 --- /dev/null +++ b/source/a/bash/bash-4.2-patches/bash42-042 @@ -0,0 +1,57 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.2 +Patch-ID: bash42-042 + +Bug-Reported-by: Adam Pippin <adam@gp-inc.ca> +Bug-Reference-ID: <CAPYbNHr6ucZFOoWsRdUJj6KP3Ju0j1bkESa_cmb7iU+kZwdVpg@mail.gmail.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2012-11/msg00087.html + +Bug-Description: + +Compilation failed after specifying the `--enable-minimal-config' option to +configure (more specifically, specifying `--disable-alias'). + +Patch (apply with `patch -p0'): + +*** ../bash-4.2-patched/parse.y 2012-07-08 21:53:33.000000000 -0400 +--- parse.y 2012-10-14 20:20:34.000000000 -0400 +*************** +*** 2394,2397 **** +--- 2392,2396 ---- + to consume the quoted newline and move to the next character in + the expansion. */ ++ #if defined (ALIAS) + if (expanding_alias () && shell_input_line[shell_input_line_index+1] == '\0') + { +*************** +*** 2404,2408 **** + goto next_alias_char; /* and get next character */ + } +! else + goto restart_read; + } +--- 2403,2408 ---- + goto next_alias_char; /* and get next character */ + } +! else +! #endif + goto restart_read; + } + +*** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010 +--- patchlevel.h Thu Feb 24 21:41:34 2011 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 41 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 42 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/source/a/bash/bash-4.2-patches/bash42-043 b/source/a/bash/bash-4.2-patches/bash42-043 new file mode 100644 index 000000000..b25a5ee38 --- /dev/null +++ b/source/a/bash/bash-4.2-patches/bash42-043 @@ -0,0 +1,65 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.2 +Patch-ID: bash42-043 + +Bug-Reported-by: konsolebox <konsolebox@gmail.com> +Bug-Reference-ID: <CAJnmqwZuGKLgMsMwxRK4LL+2NN+HgvmKzrnode99QBGrcgX1Lw@mail.gmail.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2013-01/msg00138.html + +Bug-Description: + +When SIGCHLD is trapped, and a SIGCHLD trap handler runs when a pending +`read -t' invocation times out and generates SIGALRM, bash can crash with +a segmentation fault. + +Patch (apply with `patch -p0'): + +*** ../bash-4.2-patched/builtins/read.def 2012-10-31 21:22:51.000517000 -0400 +--- builtins/read.def 2013-01-25 10:28:16.000038000 -0500 +*************** +*** 386,393 **** + /* Tricky. The top of the unwind-protect stack is the free of + input_string. We want to run all the rest and use input_string, +! so we have to remove it from the stack. */ +! remove_unwind_protect (); +! run_unwind_frame ("read_builtin"); + input_string[i] = '\0'; /* make sure it's terminated */ + retval = 128+SIGALRM; + goto assign_vars; +--- 386,403 ---- + /* Tricky. The top of the unwind-protect stack is the free of + input_string. We want to run all the rest and use input_string, +! so we have to save input_string temporarily, run the unwind- +! protects, then restore input_string so we can use it later. */ +! + input_string[i] = '\0'; /* make sure it's terminated */ ++ if (i == 0) ++ { ++ t = (char *)xmalloc (1); ++ t[0] = 0; ++ } ++ else ++ t = savestring (input_string); ++ ++ run_unwind_frame ("read_builtin"); ++ input_string = t; + retval = 128+SIGALRM; + goto assign_vars; + +*** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010 +--- patchlevel.h Thu Feb 24 21:41:34 2011 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 42 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 43 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/source/a/bash/bash-4.2-patches/bash42-044 b/source/a/bash/bash-4.2-patches/bash42-044 new file mode 100644 index 000000000..e5bf28323 --- /dev/null +++ b/source/a/bash/bash-4.2-patches/bash42-044 @@ -0,0 +1,70 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.2 +Patch-ID: bash42-044 + +Bug-Reported-by: "Dashing" <dashing@hushmail.com> +Bug-Reference-ID: <20130211175049.D90786F446@smtp.hushmail.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2013-02/msg00030.html + +Bug-Description: + +When converting a multibyte string to a wide character string as part of +pattern matching, bash does not handle the end of the string correctly, +causing the search for the NUL to go beyond the end of the string and +reference random memory. Depending on the contents of that memory, bash +can produce errors or crash. + +Patch (apply with `patch -p0'): + +*** ../bash-4.2-patched/lib/glob/xmbsrtowcs.c 2012-07-08 21:53:19.000000000 -0400 +--- lib/glob/xmbsrtowcs.c 2013-02-12 12:00:39.000000000 -0500 +*************** +*** 217,220 **** +--- 217,226 ---- + n = mbsnrtowcs(wsbuf+wcnum, &p, nms, wsbuf_size-wcnum, &state); + ++ if (n == 0 && p == 0) ++ { ++ wsbuf[wcnum] = L'\0'; ++ break; ++ } ++ + /* Compensate for taking single byte on wcs conversion failure above. */ + if (wcslength == 1 && (n == 0 || n == (size_t)-1)) +*************** +*** 222,226 **** + state = tmp_state; + p = tmp_p; +! wsbuf[wcnum++] = *p++; + } + else +--- 228,238 ---- + state = tmp_state; + p = tmp_p; +! wsbuf[wcnum] = *p; +! if (*p == 0) +! break; +! else +! { +! wcnum++; p++; +! } + } + else + +*** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010 +--- patchlevel.h Thu Feb 24 21:41:34 2011 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 43 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 44 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/source/a/bash/bash-4.2-patches/bash42-045 b/source/a/bash/bash-4.2-patches/bash42-045 new file mode 100644 index 000000000..e0f8559ec --- /dev/null +++ b/source/a/bash/bash-4.2-patches/bash42-045 @@ -0,0 +1,53 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.2 +Patch-ID: bash42-045 + +Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com> +Bug-Reference-ID: <20130218195539.GA9620@chaz.gmail.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2013-02/msg00080.html + +Bug-Description: + +The <&n- and >&n- redirections, which move one file descriptor to another, +leave the file descriptor closed when applied to builtins or compound +commands. + +Patch (apply with `patch -p0'): + +*** ../bash-4.2-patched/redir.c 2013-01-30 11:56:09.000000000 -0500 +--- redir.c 2013-02-19 09:38:36.000000000 -0500 +*************** +*** 1008,1011 **** +--- 1008,1021 ---- + REDIRECTION_ERROR (r, errno, -1); + } ++ if ((flags & RX_UNDOABLE) && (ri == r_move_input || ri == r_move_output)) ++ { ++ /* r_move_input and r_move_output add an additional close() ++ that needs to be undone */ ++ if (fcntl (redirector, F_GETFD, 0) != -1) ++ { ++ r = add_undo_redirect (redir_fd, r_close_this, -1); ++ REDIRECTION_ERROR (r, errno, -1); ++ } ++ } + #if defined (BUFFERED_INPUT) + check_bash_input (redirector); + +*** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010 +--- patchlevel.h Thu Feb 24 21:41:34 2011 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 44 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 45 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/source/a/btrfs-progs/btrfs-progs.SlackBuild b/source/a/btrfs-progs/btrfs-progs.SlackBuild index 99dd753d8..710c7eba2 100755 --- a/source/a/btrfs-progs/btrfs-progs.SlackBuild +++ b/source/a/btrfs-progs/btrfs-progs.SlackBuild @@ -89,12 +89,14 @@ make install DESTDIR=$PKG || exit 1 # Move stuff out of /usr/local: mv $PKG/usr/local/bin $PKG/sbin mv $PKG/usr/local/man $PKG/usr/man -rmdir $PKG/usr/local -# Add an fsck.btrfs script. For now this serves to eat options such as -a -# that would otherwise cause issues for btrfs at boot time. -cat $CWD/fsck.btrfs > $PKG/sbin/fsck.btrfs -chmod 755 $PKG/sbin/fsck.btrfs +# Do not ship libraries/include files. +# If there becomes a use for these outside of btrfs-progs, let me know. +rm -rf $PKG/usr/local + +# According to https://btrfs.wiki.kernel.org/index.php/FAQ#When_will_Btrfs_have_a_fsck_like_tool.3F +# it is not recommended to make fsck.btrfs a no-op by linking it to /bin/true: +ln -sf /bin/true $PKG/sbin/fsck.btrfs # Compress and link manpages, if any: if [ -d $PKG/usr/man ]; then diff --git a/source/a/btrfs-progs/fsck.btrfs b/source/a/btrfs-progs/fsck.btrfs deleted file mode 100644 index 779e0b794..000000000 --- a/source/a/btrfs-progs/fsck.btrfs +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh - -# Copyright 2011 Patrick J. Volkerding, Sebeka, Minnesota, USA -# All rights reserved. -# -# Redistribution and use of this script, with or without modification, is -# permitted provided that the following conditions are met: -# -# 1. Redistributions of this script must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# Currently, btrfsck does not recognize any options, so eat any initial options -# beginning with '-'. Then, check the remaining args with btrfsck only if they -# exist and are readable. - -# Strip initial args: -while [ ! -z "$1" ]; do - if [ "$(echo $1 | cut -b1)" = "-" ]; then - shift # strip option from command line - else - break - fi -done - -# Main filesystem check loop: -RETVAL=0 -while [ ! -z "$1" ]; do - if [ -r "$1" ]; then - echo "fsck.btrfs: Checking filesystem on $1" - # Checking the root filesystem (even read-only) will fail, check for that: - if ! grep -w "$1" /etc/fstab | grep -wq / ; then - btrfsck "$1" - ERRCODE=$? - if [ ! $ERRCODE = 0 ]; then - RETVAL=$ERRCODE - fi - else - echo " $1 mounted on /, skipped." - fi - fi - shift -done - -# If there was an error, return the most recent error code: -exit $RETVAL - diff --git a/source/a/cups/cups-1.5.4-usb-quirks.diff b/source/a/cups/cups-1.5.4-usb-quirks.diff new file mode 100644 index 000000000..dfe1dab8f --- /dev/null +++ b/source/a/cups/cups-1.5.4-usb-quirks.diff @@ -0,0 +1,319 @@ +From efe932a075744c1cfdf755ce8fea0870fc38a1c8 Mon Sep 17 00:00:00 2001 +From: mancha <mancha1@hush.com> +Date: Wed, 9 Oct 2013 +Subject: Backport usb fixes to CUPS 1.5.4 + + usb-libusb.c | 152 +++++++++++++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 127 insertions(+), 25 deletions(-) + +--- a/backend/usb-libusb.c 2012-07-16 ++++ b/backend/usb-libusb.c 2013-10-09 +@@ -13,7 +13,7 @@ + * + * Contents: + * +- * list_devices() - List the available printers. ++ * list_devices() - List the available printers. + * print_device() - Print a file to a USB device. + * close_device() - Close the connection to the USB printer. + * find_device() - Find or enumerate USB printers. +@@ -70,7 +70,7 @@ typedef struct usb_printer_s /**** USB + read_endp, /* Read endpoint */ + protocol, /* Protocol: 1 = Uni-di, 2 = Bi-di. */ + usblp_attached, /* "usblp" kernel module attached? */ +- opened_for_job; /* Set to 1 by print_device() */ ++ reset_after_job; /* Set to 1 by print_device() */ + unsigned int quirks; /* Quirks flags */ + struct libusb_device_handle *handle; /* Open handle to device */ + } usb_printer_t; +@@ -122,6 +122,9 @@ struct quirk_printer_struct { + #define USBLP_QUIRK_USB_INIT 0x2 /* needs vendor USB init string */ + #define USBLP_QUIRK_BAD_CLASS 0x4 /* descriptor uses vendor-specific + Class or SubClass */ ++#define USBLP_QUIRK_BLACKLIST 0x8 /* these printers do not conform to the USB print spec */ ++#define USBLP_QUIRK_RESET 0x4000 /* After printing do a reset ++ for clean-up */ + #define USBLP_QUIRK_NO_REATTACH 0x8000 /* After printing we cannot re-attach + the usblp kernel module */ + +@@ -139,17 +142,97 @@ static const struct quirk_printer_struct + { 0x0409, 0xbef4, USBLP_QUIRK_BIDIR }, /* NEC Picty760 (HP OEM) */ + { 0x0409, 0xf0be, USBLP_QUIRK_BIDIR }, /* NEC Picty920 (HP OEM) */ + { 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */ ++ { 0x043d, 0x00f3, USBLP_QUIRK_NO_REATTACH }, /* Lexmark International, ++ Inc. (e250d), https://bugs.launchpad.net/bugs/1084164 */ ++ { 0x043d, 0x00d7, USBLP_QUIRK_NO_REATTACH }, /* Lexmark E328 */ + { 0x0482, 0x0010, USBLP_QUIRK_BIDIR }, /* Kyocera Mita FS 820, + by zut <kernel@zut.de> */ ++ { 0x04a9, 0x1095, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP6000D ++ Printer, https://bugs.launchpad.net/bugs/1160638 */ ++ { 0x04a9, 0x10a2, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP4200 ++ Printer, http://www.cups.org/str.php?L4155 */ ++ { 0x04a9, 0x10b6, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP4300 ++ Printer, https://bugs.launchpad.net/bugs/1032385 */ ++ { 0x04a9, 0x1721, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP210 ++ https://bugzilla.redhat.com/show_bug.cgi?id=847923#c53 */ ++ { 0x04a9, 0x170c, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP500 ++ Printer, https://bugs.launchpad.net/bugs/1032456 */ ++ { 0x04a9, 0x1717, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP510 ++ Printer, https://bugs.launchpad.net/bugs/1050009 */ ++ { 0x04a9, 0x173d, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP550 ++ Printer, http://www.cups.org/str.php?L4155 */ ++ { 0x04a9, 0x173e, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP560 ++ Printer, http://www.cups.org/str.php?L4155 */ ++ { 0x04a9, 0x26a3, USBLP_QUIRK_NO_REATTACH }, /* Canon, Inc. MF4150 ++ Printer, https://bugs.launchpad.net/bugs/1160638 */ ++ { 0x04f9, 0x001a, USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd ++ HL-1430 Laser Printer, ++ https://bugs.launchpad.net/bugs/1038695 */ + { 0x04f9, 0x000d, USBLP_QUIRK_BIDIR | + USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd +- HL-1440 Laser Printer */ ++ HL-1440 Laser Printer, ++ https://bugs.launchpad.net/bugs/1000253 */ ++ { 0x04f9, 0x000e, USBLP_QUIRK_BIDIR | ++ USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd ++ HL-1450 Laser Printer, ++ https://bugs.launchpad.net/bugs/1000253 */ ++ { 0x06bc, 0x000b, USBLP_QUIRK_NO_REATTACH }, /* Oki Data Corp. ++ Okipage 14ex Printer, ++ https://bugs.launchpad.net/bugs/872483 */ ++ { 0x06bc, 0x01c7, USBLP_QUIRK_NO_REATTACH }, /* Oki Data Corp. B410d, ++ https://bugs.launchpad.net/bugs/872483 */ ++ { 0x04b8, 0x0001, USBLP_QUIRK_BIDIR | ++ USBLP_QUIRK_NO_REATTACH }, /* Seiko Epson Corp. Stylus Color 740 / Photo 750, ++ http://bugs.debian.org/697970 */ ++ { 0x04b8, 0x0005, USBLP_QUIRK_NO_REATTACH }, /* Seiko Epson Corp. Stylus Color 670, ++ https://bugs.launchpad.net/bugs/872483 */ + { 0x04b8, 0x0202, USBLP_QUIRK_BAD_CLASS }, /* Seiko Epson Receipt + Printer M129C */ + { 0x067b, 0x2305, USBLP_QUIRK_BIDIR | +- USBLP_QUIRK_NO_REATTACH }, ++ USBLP_QUIRK_NO_REATTACH | ++ USBLP_QUIRK_RESET }, + /* Prolific Technology, Inc. PL2305 Parallel Port +- (USB -> Parallel adapter) */ ++ (USB -> Parallel adapter), https://bugs.launchpad.net/bugs/987485 */ ++ { 0x0924, 0x3ce9, USBLP_QUIRK_NO_REATTACH }, /* Xerox Phaser 3124 ++ https://bugzilla.redhat.com/show_bug.cgi?id=867392 */ ++ { 0x0924, 0x4293, USBLP_QUIRK_NO_REATTACH }, /* Xerox WorkCentre 3210 ++ https://bugs.launchpad.net/bugs/1102470 */ ++ { 0x1a86, 0x7584, USBLP_QUIRK_NO_REATTACH }, /* QinHeng Electronics ++ CH340S (USB -> Parallel adapter), https://bugs.launchpad.net/bugs/1000253 */ ++ { 0x04e8, 0x0000, USBLP_QUIRK_RESET }, /* All Samsung devices, ++ https://bugs.launchpad.net/bugs/1032456 */ ++ { 0x0a5f, 0x0000, USBLP_QUIRK_BIDIR }, /* All Zebra devices, ++ https://bugs.launchpad.net/bugs/1001028 */ ++ /* Canon */ ++ { 0x04a9, 0x304a, USBLP_QUIRK_BLACKLIST }, /* Canon CP-10 */ ++ { 0x04a9, 0x3063, USBLP_QUIRK_BLACKLIST }, /* Canon CP-100 */ ++ { 0x04a9, 0x307c, USBLP_QUIRK_BLACKLIST }, /* Canon CP-200 */ ++ { 0x04a9, 0x307d, USBLP_QUIRK_BLACKLIST }, /* Canon CP-300 */ ++ { 0x04a9, 0x30bd, USBLP_QUIRK_BLACKLIST }, /* Canon CP-220 */ ++ { 0x04a9, 0x30be, USBLP_QUIRK_BLACKLIST }, /* Canon CP-330 */ ++ { 0x04a9, 0x30f6, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP400 */ ++ { 0x04a9, 0x310b, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP600 */ ++ { 0x04a9, 0x3127, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP710 */ ++ { 0x04a9, 0x3128, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP510 */ ++ { 0x04a9, 0x3141, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES1 */ ++ { 0x04a9, 0x3142, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP730 */ ++ { 0x04a9, 0x3143, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP720 */ ++ { 0x04a9, 0x3170, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP750 */ ++ { 0x04a9, 0x3171, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP740 */ ++ { 0x04a9, 0x3185, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES2 */ ++ { 0x04a9, 0x3186, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES20 */ ++ { 0x04a9, 0x31aa, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP770 */ ++ { 0x04a9, 0x31ab, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP760 */ ++ { 0x04a9, 0x31b0, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES30 */ ++ { 0x04a9, 0x31dd, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP780 */ ++ { 0x04a9, 0x31ee, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES40 */ ++ { 0x04a9, 0x3214, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP800 */ ++ { 0x04a9, 0x3255, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP900 */ ++ { 0x04a9, 0x3256, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP810 */ ++ { 0x04a9, 0x30F5, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP500 */ ++ { 0x04a9, 0x31AF, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES3 */ ++ { 0x04a9, 0x31DD, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP780 */ ++ /* MISSING PIDs: CP520, CP530, CP790 */ + { 0, 0 } + }; + +@@ -256,7 +339,12 @@ print_device(const char *uri, /* I - De + } + + g.print_fd = print_fd; +- g.printer->opened_for_job = 1; ++ ++ /* ++ * Some devices need a reset after finishing a job, these devices are ++ * marked with the USBLP_QUIRK_RESET quirk. ++ */ ++ g.printer->reset_after_job = (g.printer->quirks & USBLP_QUIRK_RESET ? 1 : 0); + + /* + * If we are printing data from a print driver on stdin, ignore SIGTERM +@@ -639,10 +727,10 @@ print_device(const char *uri, /* I - De + * If it didn't exit abort the pending read and wait an additional + * second... + */ +- ++ + if (!g.read_thread_done) + { +- fputs("DEBUG: Read thread still active, aborting the pending read...\n", ++ fputs("DEBUG: Read thread still active, aborting the pending read...\n", + stderr); + + g.wait_eof = 0; +@@ -650,7 +738,7 @@ print_device(const char *uri, /* I - De + gettimeofday(&tv, NULL); + cond_timeout.tv_sec = tv.tv_sec + 1; + cond_timeout.tv_nsec = tv.tv_usec * 1000; +- ++ + while (!g.read_thread_done) + { + if (pthread_cond_timedwait(&g.read_thread_cond, &g.read_thread_mutex, +@@ -663,9 +751,6 @@ print_device(const char *uri, /* I - De + pthread_mutex_unlock(&g.read_thread_mutex); + } + +- if (print_fd) +- close(print_fd); +- + /* + * Close the connection and input file and general clean up... + */ +@@ -725,7 +810,7 @@ close_device(usb_printer_t *printer) /* + */ + if (printer->origconf > 0 && printer->origconf != number2) + { +- fprintf(stderr, "DEBUG: Restoring USB device configuration: %d -> %d\n", ++ fprintf(stderr, "DEBUG: Restoring USB device configuration: %d -> %d\n", + number2, printer->origconf); + if ((errcode = libusb_set_configuration(printer->handle, + printer->origconf)) < 0) +@@ -772,7 +857,7 @@ close_device(usb_printer_t *printer) /* + * Reset the device to clean up after the job + */ + +- if (printer->opened_for_job == 1) ++ if (printer->reset_after_job == 1) + { + if ((errcode = libusb_reset_device(printer->handle)) < 0) + fprintf(stderr, +@@ -815,7 +900,8 @@ find_device(usb_cb_t cb, /* I - Callb + /* Pointer to current alternate setting */ + const struct libusb_endpoint_descriptor *endpptr = NULL; + /* Pointer to current endpoint */ +- ssize_t numdevs, /* number of connected devices */ ++ ssize_t err = 0, /* Error code */ ++ numdevs, /* number of connected devices */ + i = 0; + uint8_t conf, /* Current configuration */ + iface, /* Current interface */ +@@ -834,7 +920,14 @@ find_device(usb_cb_t cb, /* I - Callb + * Initialize libusb... + */ + +- libusb_init(NULL); ++ err = libusb_init(NULL); ++ if (err) ++ { ++ fprintf(stderr, "DEBUG: Unable to initialize USB access via libusb, " ++ "libusb error %i\n", err); ++ return (NULL); ++ } ++ + numdevs = libusb_get_device_list(NULL, &list); + fprintf(stderr, "DEBUG: libusb_get_device_list=%d\n", (int)numdevs); + +@@ -859,7 +952,14 @@ find_device(usb_cb_t cb, /* I - Callb + !devdesc.idProduct) + continue; + +- printer.quirks = quirks(devdesc.idVendor, devdesc.idProduct); ++ printer.quirks = quirks(devdesc.idVendor, devdesc.idProduct); ++ ++ /* ++ * Ignore blacklisted printers... ++ */ ++ ++ if (printer.quirks & USBLP_QUIRK_BLACKLIST) ++ continue; + + for (conf = 0; conf < devdesc.bNumConfigurations; conf ++) + { +@@ -886,7 +986,7 @@ find_device(usb_cb_t cb, /* I - Callb + */ + + if (((altptr->bInterfaceClass != LIBUSB_CLASS_PRINTER || +- altptr->bInterfaceSubClass != 1) && ++ altptr->bInterfaceSubClass != 1) && + ((printer.quirks & USBLP_QUIRK_BAD_CLASS) == 0)) || + (altptr->bInterfaceProtocol != 1 && /* Unidirectional */ + altptr->bInterfaceProtocol != 2) || /* Bidirectional */ +@@ -964,7 +1064,7 @@ find_device(usb_cb_t cb, /* I - Callb + bEndpointAddress; + } + else +- fprintf(stderr, "DEBUG: Uni-directional USB communication " ++ fprintf(stderr, "DEBUG: Uni-directional USB communication " + "only!\n"); + printer.write_endp = confptr->interface[printer.iface]. + altsetting[printer.altset]. +@@ -997,7 +1097,8 @@ find_device(usb_cb_t cb, /* I - Callb + * Clean up .... + */ + +- libusb_free_device_list(list, 1); ++ if (numdevs >= 0) ++ libusb_free_device_list(list, 1); + libusb_exit(NULL); + + return (NULL); +@@ -1144,7 +1245,7 @@ make_device_uri( + if ((sern = cupsGetOption("SERIALNUMBER", num_values, values)) == NULL) + if ((sern = cupsGetOption("SERN", num_values, values)) == NULL) + if ((sern = cupsGetOption("SN", num_values, values)) == NULL && +- ((libusb_get_device_descriptor (printer->device, &devdesc) >= 0) && ++ ((libusb_get_device_descriptor(printer->device, &devdesc) >= 0) && + devdesc.iSerialNumber)) + { + /* +@@ -1288,7 +1389,7 @@ open_device(usb_printer_t *printer, /* I + } + + printer->usblp_attached = 0; +- printer->opened_for_job = 0; ++ printer->reset_after_job = 0; + + if (verbose) + fputs("STATE: +connecting-to-device\n", stderr); +@@ -1343,7 +1444,7 @@ open_device(usb_printer_t *printer, /* I + + printer->origconf = current; + +- if ((errcode = ++ if ((errcode = + libusb_get_config_descriptor (printer->device, printer->conf, &confptr)) + < 0) + { +@@ -1355,7 +1456,7 @@ open_device(usb_printer_t *printer, /* I + + if (number1 != current) + { +- fprintf(stderr, "DEBUG: Switching USB device configuration: %d -> %d\n", ++ fprintf(stderr, "DEBUG: Switching USB device configuration: %d -> %d\n", + current, number1); + if ((errcode = libusb_set_configuration(printer->handle, number1)) < 0) + { +@@ -1586,7 +1687,8 @@ static unsigned int quirks(int vendor, i + for (i = 0; quirk_printers[i].vendorId; i++) + { + if (vendor == quirk_printers[i].vendorId && +- product == quirk_printers[i].productId) ++ (quirk_printers[i].productId == 0x0000 || ++ product == quirk_printers[i].productId)) + return quirk_printers[i].quirks; + } + return 0; diff --git a/source/a/cups/cups-blacklist-usblp.conf b/source/a/cups/cups-blacklist-usblp.conf new file mode 100644 index 000000000..0ebaa9a63 --- /dev/null +++ b/source/a/cups/cups-blacklist-usblp.conf @@ -0,0 +1,10 @@ +############################################################################## +# Do not edit this file; instead, copy it to /etc/modprobe.d/ and edit that +############################################################################## + +# Blacklist the (obsolete) usblp module. While the CUPS package has been +# patched to handle if this module is loaded, there are some reports that +# it doesn't always work. Anyway, there should be no need to have this +# module loaded, so we'll blacklist it just in case. + +blacklist usblp diff --git a/source/a/cups/cups.SlackBuild b/source/a/cups/cups.SlackBuild index afac91324..0bb759ee5 100755 --- a/source/a/cups/cups.SlackBuild +++ b/source/a/cups/cups.SlackBuild @@ -23,7 +23,7 @@ # CUPS build script by volkerdi@slackware.com. VERSION=1.5.4 -BUILD=${BUILD:-2} +BUILD=${BUILD:-3} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -57,7 +57,7 @@ cd cups-$VERSION || exit 1 # Fix for CUPS 1.5.4. Don't reload the obsolete usblp module, as this # can cause partial printing with certain printers. -zcat $CWD/usb-backend-reset-after-job-only-for-specific-devices.patch.gz | patch -p0 --verbose || exit 1 +zcat $CWD/cups-1.5.4-usb-quirks.diff.gz | patch -p1 --verbose || exit 1 sed -i.orig -e 's#$exec_prefix/lib/cups#$libdir/cups#g' configure ./configure \ @@ -76,6 +76,13 @@ mkdir -p $PKG/etc/cups mkdir -p $PKG/var/spool make BUILDROOT=$PKG install || exit 1 +# Blacklist the usblp module just to make sure that it doesn't cause +# any problems: +mkdir -p $PKG/lib/modprobe.d +cp -a $CWD/cups-blacklist-usblp.conf $PKG/lib/modprobe.d +chown root:root $PKG/lib/modprobe.d/cups-blacklist-usblp.conf +chmod 644 $PKG/lib/modprobe.d/cups-blacklist-usblp.conf + # Hey, what's with the gigantic test files? Bloat is bad. rm -f $PKG/usr/share/cups/ipptool/*.{pdf,ps,jpg} diff --git a/source/a/cups/usb-backend-reset-after-job-only-for-specific-devices.patch b/source/a/cups/usb-backend-reset-after-job-only-for-specific-devices.patch deleted file mode 100644 index dcf91c833..000000000 --- a/source/a/cups/usb-backend-reset-after-job-only-for-specific-devices.patch +++ /dev/null @@ -1,74 +0,0 @@ ---- backend/usb-libusb.c.orig 2012-07-16 19:10:55.000000000 +0200 -+++ backend/usb-libusb.c 2012-08-06 11:01:58.034150159 +0200 -@@ -70,7 +70,7 @@ - read_endp, /* Read endpoint */ - protocol, /* Protocol: 1 = Uni-di, 2 = Bi-di. */ - usblp_attached, /* "usblp" kernel module attached? */ -- opened_for_job; /* Set to 1 by print_device() */ -+ reset_after_job; /* Set to 1 by print_device() */ - unsigned int quirks; /* Quirks flags */ - struct libusb_device_handle *handle; /* Open handle to device */ - } usb_printer_t; -@@ -122,6 +122,8 @@ - #define USBLP_QUIRK_USB_INIT 0x2 /* needs vendor USB init string */ - #define USBLP_QUIRK_BAD_CLASS 0x4 /* descriptor uses vendor-specific - Class or SubClass */ -+#define USBLP_QUIRK_RESET 0x4000 /* After printing do a reset -+ for clean-up */ - #define USBLP_QUIRK_NO_REATTACH 0x8000 /* After printing we cannot re-attach - the usblp kernel module */ - -@@ -147,9 +149,11 @@ - { 0x04b8, 0x0202, USBLP_QUIRK_BAD_CLASS }, /* Seiko Epson Receipt - Printer M129C */ - { 0x067b, 0x2305, USBLP_QUIRK_BIDIR | -- USBLP_QUIRK_NO_REATTACH }, -+ USBLP_QUIRK_NO_REATTACH | -+ USBLP_QUIRK_RESET }, - /* Prolific Technology, Inc. PL2305 Parallel Port - (USB -> Parallel adapter) */ -+ { 0x04e8, 0x0000, USBLP_QUIRK_RESET }, /* All Samsung devices */ - { 0, 0 } - }; - -@@ -256,7 +260,12 @@ - } - - g.print_fd = print_fd; -- g.printer->opened_for_job = 1; -+ -+ /* -+ * Some devices need a reset after finishing a job, these devices are -+ * marked with the USBLP_QUIRK_RESET quirk. -+ */ -+ g.printer->reset_after_job = (g.printer->quirks & USBLP_QUIRK_RESET ? 1 : 0); - - /* - * If we are printing data from a print driver on stdin, ignore SIGTERM -@@ -772,7 +781,7 @@ - * Reset the device to clean up after the job - */ - -- if (printer->opened_for_job == 1) -+ if (printer->reset_after_job == 1) - { - if ((errcode = libusb_reset_device(printer->handle)) < 0) - fprintf(stderr, -@@ -1288,7 +1297,7 @@ - } - - printer->usblp_attached = 0; -- printer->opened_for_job = 0; -+ printer->reset_after_job = 0; - - if (verbose) - fputs("STATE: +connecting-to-device\n", stderr); -@@ -1586,7 +1595,7 @@ - for (i = 0; quirk_printers[i].vendorId; i++) - { - if (vendor == quirk_printers[i].vendorId && -- product == quirk_printers[i].productId) -+ (product == 0x0000 || product == quirk_printers[i].productId)) - return quirk_printers[i].quirks; - } - return 0; diff --git a/source/a/cxxlibs/cxxlibs.SlackBuild b/source/a/cxxlibs/cxxlibs.SlackBuild index b795d2738..4de69818d 100755 --- a/source/a/cxxlibs/cxxlibs.SlackBuild +++ b/source/a/cxxlibs/cxxlibs.SlackBuild @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright 2006, 2007, 2008, 2009, 2010, 2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006, 2007, 2008, 2009, 2010, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,7 +21,7 @@ PKGNAM=cxxlibs -VERSION=${VERSION:-6.0.17} +VERSION=${VERSION:-6.0.18} BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: diff --git a/source/a/dbus/dbus-1.4.x-allow_root_globally.diff b/source/a/dbus/dbus-1.6.x-allow_root_globally.diff index 6bd84833f..ae2d30a6f 100644 --- a/source/a/dbus/dbus-1.4.x-allow_root_globally.diff +++ b/source/a/dbus/dbus-1.6.x-allow_root_globally.diff @@ -1,6 +1,6 @@ -diff -Nur dbus-1.4.0.orig//bus/system.conf.in dbus-1.4.0//bus/system.conf.in ---- dbus-1.4.0.orig//bus/system.conf.in 2010-08-31 16:44:19.000000000 -0500 -+++ dbus-1.4.0//bus/system.conf.in 2010-09-14 09:17:56.080373096 -0500 +diff -Nur dbus-1.6.0.orig/bus/system.conf.in dbus-1.6.0/bus/system.conf.in +--- dbus-1.6.0.orig/bus/system.conf.in 2012-01-04 11:49:23.000000000 -0600 ++++ dbus-1.6.0/bus/system.conf.in 2012-06-12 23:07:14.541913190 -0500 @@ -70,6 +70,14 @@ send_member="UpdateActivationEnvironment"/> </policy> diff --git a/source/a/dbus/dbus.SlackBuild b/source/a/dbus/dbus.SlackBuild index bd6acd99a..ee115afab 100755 --- a/source/a/dbus/dbus.SlackBuild +++ b/source/a/dbus/dbus.SlackBuild @@ -23,7 +23,7 @@ PKGNAM=dbus VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | cut -d - -f 2 | rev | cut -f 3- -d . | rev)} -BUILD=${BUILD:-3} +BUILD=${BUILD:-1} NUMJOBS=${NUMJOBS:-" -j7 "} @@ -68,7 +68,7 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -zcat $CWD/dbus-1.4.x-allow_root_globally.diff.gz | patch -p1 --verbose || exit 1 +zcat $CWD/dbus-1.6.x-allow_root_globally.diff.gz | patch -p1 --verbose || exit 1 zcat $CWD/dbus.set.home.diff.gz | patch -p1 --verbose || exit 1 CFLAGS="$SLKCFLAGS" \ diff --git a/source/a/dialog/dialog.SlackBuild b/source/a/dialog/dialog.SlackBuild index c79a6c819..6d3721e4b 100755 --- a/source/a/dialog/dialog.SlackBuild +++ b/source/a/dialog/dialog.SlackBuild @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright 2006, 2007, 2008, 2009, 2010, 2011 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,7 +22,7 @@ PKGNAM=dialog VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | cut -f 1,2 -d - | rev)} -BUILD=${BUILD:-2} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -75,6 +75,7 @@ find . \ CFLAGS="$SLKCFLAGS" \ ./configure \ --prefix=/usr \ + --mandir=/usr/man \ --disable-static \ --enable-nls \ --with-ncursesw \ diff --git a/source/a/dosfstools/dosfstools-3.0.11.tar.bz2.sign b/source/a/dosfstools/dosfstools-3.0.11.tar.bz2.sign deleted file mode 100644 index ca1fec559..000000000 --- a/source/a/dosfstools/dosfstools-3.0.11.tar.bz2.sign +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.10 (GNU/Linux) - -iEYEABECAAYFAk0U0YcACgkQ+C5cwEsrK54SwACg2GdKFHonvr+sJx9d6wA+OTwT -pbUAoK/eDyuvkyfQygxW07g6URh5Adg+ -=eKdA ------END PGP SIGNATURE----- diff --git a/source/a/dosfstools/dosfstools.SlackBuild b/source/a/dosfstools/dosfstools.SlackBuild index abb2d85ba..bd3c5773b 100755 --- a/source/a/dosfstools/dosfstools.SlackBuild +++ b/source/a/dosfstools/dosfstools.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2011 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2011, 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,8 +22,8 @@ PKGNAM=dosfstools -VERSION=${VERSION:-$(echo $PKGNAM-*.tar.bz2 | rev | cut -f 3- -d . | rev | cut -f 2- -d -)} -BUILD=${BUILD:-2} +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | rev | cut -f 2- -d -)} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -60,7 +60,7 @@ mkdir -p $TMP $PKG cd $TMP rm -rf $PKGNAM-$VERSION -tar xvf $CWD/$PKGNAM-$VERSION.tar.bz2 || exit 1 +tar xvf $CWD/$PKGNAM-$VERSION.tar.xz || exit 1 cd $PKGNAM-$VERSION chown -R root:root . @@ -76,11 +76,6 @@ zcat $CWD/dosfstools.paths.diff.gz | patch -p1 --verbose || exit 1 make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG || exit 1 -## I do not believe we want these, or it may cause autofscking fat volumes at boot: -## NOTE: only if it is set in fstab, which is not default. Some other things need -## to see fsck.vfat, so allowing it again. -#rm -f $PKG/sbin/fsck.* $PKG/usr/man/man?/fsck.* - # We can handle this: rm -r $PKG/usr/doc # Add a documentation directory: diff --git a/source/a/e2fsprogs/e2fsprogs-1.42.6.tar.sign b/source/a/e2fsprogs/e2fsprogs-1.42.6.tar.sign Binary files differdeleted file mode 100644 index 6558e77e2..000000000 --- a/source/a/e2fsprogs/e2fsprogs-1.42.6.tar.sign +++ /dev/null diff --git a/source/a/e2fsprogs/e2fsprogs-1.42.8.tar.sign b/source/a/e2fsprogs/e2fsprogs-1.42.8.tar.sign Binary files differnew file mode 100644 index 000000000..660df3339 --- /dev/null +++ b/source/a/e2fsprogs/e2fsprogs-1.42.8.tar.sign diff --git a/source/a/e2fsprogs/e2fsprogs.SlackBuild b/source/a/e2fsprogs/e2fsprogs.SlackBuild index 3ba78e554..51c268a1d 100755 --- a/source/a/e2fsprogs/e2fsprogs.SlackBuild +++ b/source/a/e2fsprogs/e2fsprogs.SlackBuild @@ -24,7 +24,7 @@ VERSION=${VERSION:-$(echo e2fsprogs*.tar.?z* | cut -d - -f 2 | rev | cut -f 3- -d . | rev)} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} NUMJOBS=${NUMJOBS:-" -j7 "} @@ -121,6 +121,15 @@ mv $PKG/lib${LIBDIRSUFFIX}/pkgconfig $PKG/lib${LIBDIRSUFFIX}/*.so \ ln -sf /lib${LIBDIRSUFFIX}/$(readlink $i) $i ; done ) + +# Since fsck is now part of util-linux, let's prefer that version: +if [ -r $PKG/sbin/fsck ]; then + mv $PKG/sbin/fsck $PKG/sbin/fsck-e2fsprogs +fi +if [ -r $PKG/usr/man/man8/fsck.8 ]; then + mv $PKG/usr/man/man8/fsck.8 $PKG/usr/man/man8/fsck-e2fsprogs.8 +fi + # findfs is intentionally left out here - we use the one in util-linux-ng ( cd $PKG/sbin rm -f \ diff --git a/source/a/efibootmgr/efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch b/source/a/efibootmgr/efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch new file mode 100644 index 000000000..240aa6968 --- /dev/null +++ b/source/a/efibootmgr/efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch @@ -0,0 +1,28 @@ +From 2d8f962284f40b918c0fc8385e58fcba219ddc12 Mon Sep 17 00:00:00 2001 +From: Fedora Ninjas <pjones@fedoraproject.org> +Date: Wed, 28 Nov 2012 17:13:24 -0500 +Subject: [PATCH 2/5] Remove device path padding on non-Itanium + +This code predates EFI support on any x86 hardware, and it's a strict +violation of the specification. Windows doesn't do it either. +--- + src/include/efi.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/include/efi.h b/src/include/efi.h +index be667ae..c2ac853 100644 +--- a/src/include/efi.h ++++ b/src/include/efi.h +@@ -294,7 +294,9 @@ typedef struct { + uint8_t signature[16]; + uint8_t mbr_type; + uint8_t signature_type; ++#ifdef __ia64 + uint8_t padding[6]; /* Emperically needed */ ++#endif + } __attribute__((packed)) HARDDRIVE_DEVICE_PATH; + + typedef struct { +-- +1.8.0 + diff --git a/source/a/efibootmgr/efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch b/source/a/efibootmgr/efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch new file mode 100644 index 000000000..a1d9831d0 --- /dev/null +++ b/source/a/efibootmgr/efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch @@ -0,0 +1,30 @@ +From 6edc3ed5479b575f87eb51e335957b05fdd04fe8 Mon Sep 17 00:00:00 2001 +From: Fedora Ninjas <pjones@fedoraproject.org> +Date: Wed, 28 Nov 2012 16:49:18 -0500 +Subject: [PATCH 1/5] Work around broken Apple firmware + +Alex Murray found that Apple's firmware sets an invalid EFI attribute on +BootCurrent, which newer versions of the kernel then reject. This patch +from him simply masks off the extraneous bit. +--- + src/lib/efivars_sysfs.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/lib/efivars_sysfs.c b/src/lib/efivars_sysfs.c +index 182c70f..ea87325 100644 +--- a/src/lib/efivars_sysfs.c ++++ b/src/lib/efivars_sysfs.c +@@ -55,6 +55,10 @@ sysfs_read_variable(const char *name, efi_variable_t *var) + return EFI_INVALID_PARAMETER; + } + close(fd); ++ /* latest apple firmware sets high bit which appears invalid ++ to the linux kernel if we write it back so lets zero it out ++ if it is set since it would be invalid to set it anyway */ ++ var->Attributes = var->Attributes & ~(1 << 31); + return var->Status; + } + +-- +1.8.0 + diff --git a/source/a/efibootmgr/efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch b/source/a/efibootmgr/efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch new file mode 100644 index 000000000..e9b535836 --- /dev/null +++ b/source/a/efibootmgr/efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch @@ -0,0 +1,29 @@ +From f9f4ee75ad745637a47bf17ed968101b1ffbcc1d Mon Sep 17 00:00:00 2001 +From: Matt Domsch <Matt_Domsch@dell.com> +Date: Thu, 23 Jul 2009 14:20:19 -0500 +Subject: [PATCH 4/5] fix disk minor number discovery + +Raymund Will noted disk_info_from_fd() incorrectly used logical && +instead of bitwise & when obtaining the minor number. + +Reported in https://bugzilla.novell.com/show_bug.cgi?id=524529#c1 +--- + src/lib/disk.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/lib/disk.c b/src/lib/disk.c +index ebfe619..8ad590b 100644 +--- a/src/lib/disk.c ++++ b/src/lib/disk.c +@@ -55,7 +55,7 @@ disk_info_from_fd(int fd, + return 1; + } + major = buf.st_dev >> 8; +- minor = buf.st_dev && 0xFF; ++ minor = buf.st_dev & 0xFF; + + /* IDE disks can have up to 64 partitions, or 6 bits worth, + * and have one bit for the disk number. +-- +1.8.0 + diff --git a/source/a/efibootmgr/efibootmgr-0.5.4-support-4k-sectors.patch b/source/a/efibootmgr/efibootmgr-0.5.4-support-4k-sectors.patch new file mode 100644 index 000000000..c380c6100 --- /dev/null +++ b/source/a/efibootmgr/efibootmgr-0.5.4-support-4k-sectors.patch @@ -0,0 +1,176 @@ +Return-Path: pjones@redhat.com
+Received: from zmta02.collab.prod.int.phx2.redhat.com (LHLO
+ zmta02.collab.prod.int.phx2.redhat.com) (10.5.5.32) by
+ mail04.corp.redhat.com with LMTP; Wed, 14 Jul 2010 14:25:52 -0400 (EDT)
+Received: from localhost (localhost.localdomain [127.0.0.1])
+ by zmta02.collab.prod.int.phx2.redhat.com (Postfix) with ESMTP id B69C19F152
+ for <pjones@redhat.com>; Wed, 14 Jul 2010 14:25:52 -0400 (EDT)
+Received: from zmta02.collab.prod.int.phx2.redhat.com ([127.0.0.1])
+ by localhost (zmta02.collab.prod.int.phx2.redhat.com [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id jCHcGZehMQ5J for <pjones@redhat.com>;
+ Wed, 14 Jul 2010 14:25:52 -0400 (EDT)
+Received: from int-mx08.intmail.prod.int.phx2.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21])
+ by zmta02.collab.prod.int.phx2.redhat.com (Postfix) with ESMTP id A601C9F14C
+ for <pjones@mail.corp.redhat.com>; Wed, 14 Jul 2010 14:25:52 -0400 (EDT)
+Received: from pjones4.install.bos.redhat.com (pjones4.install.bos.redhat.com [10.16.52.154])
+ by int-mx08.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o6EIPpGh017771;
+ Wed, 14 Jul 2010 14:25:52 -0400
+From: Peter Jones <pjones@redhat.com>
+To: Matt Domsch <Matt_Domsch@dell.com>
+Cc: Peter Jones <pjones@redhat.com>, Stuart Hayes <stuart_hayes@dell.com>
+Subject: [efibootmgr patch] Handle sector_size != 512.
+Date: Wed, 14 Jul 2010 14:26:49 -0400
+Message-Id: <1279132009-26635-1-git-send-email-pjones@redhat.com>
+In-Reply-To: <1279121617-17961-1-git-send-email-pjones@redhat.com>
+References: <1279121617-17961-1-git-send-email-pjones@redhat.com>
+X-Scanned-By: MIMEDefang 2.67 on 10.5.11.21
+
+Disks can have 4kB sectors now, so don't just bail out when that's the
+case.
+---
+ src/include/disk.h | 3 +++
+ src/lib/disk.c | 43 +++++++++++++++++++++++++++++++++----------
+ src/lib/gpt.c | 30 ++++++++++++++----------------
+ 3 files changed, 50 insertions(+), 26 deletions(-)
+
+diff --git a/src/include/disk.h b/src/include/disk.h
+index eb93d10..8aa37d7 100644
+--- a/src/include/disk.h
++++ b/src/include/disk.h
+@@ -65,6 +65,9 @@ enum _interface_type {interface_type_unknown,
+ ata, atapi, scsi, usb,
+ i1394, fibre, i2o, md};
+
++
++unsigned int lcm(unsigned int x, unsigned int y);
++
+ int disk_get_pci(int fd,
+ unsigned char *bus,
+ unsigned char *device,
+diff --git a/src/lib/disk.c b/src/lib/disk.c
+index 883864f..9c3a878 100644
+--- a/src/lib/disk.c
++++ b/src/lib/disk.c
+@@ -420,6 +420,27 @@ get_sector_size(int filedes)
+ return sector_size;
+ }
+
++/************************************************************
++ * lcm
++ * Requires:
++ * - numbers of which to find the lowest common multiple
++ * Modifies: nothing
++ * Returns:
++ * lowest common multiple of x and y
++ ************************************************************/
++unsigned int
++lcm(unsigned int x, unsigned int y)
++{
++ unsigned int m = x, n = y, o;
++
++ while ((o = m % n)) {
++ m = n;
++ n = o;
++ }
++
++ return (x / n) * y;
++}
++
+ /**
+ * disk_get_partition_info()
+ * @fd - open file descriptor to disk
+@@ -442,26 +463,27 @@ disk_get_partition_info (int fd,
+ uint8_t *mbr_type, uint8_t *signature_type)
+ {
+ legacy_mbr *mbr;
+- void *mbr_unaligned;
++ void *mbr_sector;
++ size_t mbr_size;
+ off_t offset;
+ int this_bytes_read = 0;
+ int gpt_invalid=0, mbr_invalid=0;
+ int rc=0;
+ int sector_size = get_sector_size(fd);
+
+- if (sizeof(*mbr) != sector_size)
+- return 1;
+- mbr_unaligned = malloc(sizeof(*mbr)+sector_size-1);
+- mbr = (legacy_mbr *)
+- (((unsigned long)mbr_unaligned + sector_size - 1) &
+- ~(unsigned long)(sector_size-1));
+- memset(mbr, 0, sizeof(*mbr));
++
++ mbr_size = lcm(sizeof(*mbr), sector_size);
++ if ((rc = posix_memalign(&mbr_sector, sector_size, mbr_size)) != 0)
++ goto error;
++ memset(mbr_sector, '\0', mbr_size);
++
+ offset = lseek(fd, 0, SEEK_SET);
+- this_bytes_read = read(fd, mbr, sizeof(*mbr));
++ this_bytes_read = read(fd, mbr_sector, mbr_size);
+ if (this_bytes_read < sizeof(*mbr)) {
+ rc=1;
+ goto error_free_mbr;
+ }
++ mbr = (legacy_mbr *)mbr_sector;
+ gpt_invalid = gpt_disk_get_partition_info(fd, num,
+ start, size,
+ signature,
+@@ -479,7 +501,8 @@ disk_get_partition_info (int fd,
+ }
+ }
+ error_free_mbr:
+- free(mbr_unaligned);
++ free(mbr_sector);
++ error:
+ return rc;
+ }
+
+diff --git a/src/lib/gpt.c b/src/lib/gpt.c
+index d90ddaf..83e7a94 100644
+--- a/src/lib/gpt.c
++++ b/src/lib/gpt.c
+@@ -215,26 +215,24 @@ read_lastoddsector(int fd, uint64_t lba, void *buffer, size_t count)
+ static ssize_t
+ read_lba(int fd, uint64_t lba, void *buffer, size_t bytes)
+ {
+- int sector_size = get_sector_size(fd);
+- off_t offset = lba * sector_size;
++ int sector_size = get_sector_size(fd);
++ off_t offset = lba * sector_size;
+ ssize_t bytesread;
+- void *aligned;
+- void *unaligned;
+-
+- if (bytes % sector_size)
+- return EINVAL;
++ void *iobuf;
++ size_t iobuf_size;
++ int rc;
+
+- unaligned = malloc(bytes+sector_size-1);
+- aligned = (void *)
+- (((unsigned long)unaligned + sector_size - 1) &
+- ~(unsigned long)(sector_size-1));
+- memset(aligned, 0, bytes);
++ iobuf_size = lcm(bytes, sector_size);
++ rc = posix_memalign(&iobuf, sector_size, iobuf_size);
++ if (rc)
++ return rc;
++ memset(iobuf, 0, bytes);
+
+
+- lseek(fd, offset, SEEK_SET);
+- bytesread = read(fd, aligned, bytes);
+- memcpy(buffer, aligned, bytesread);
+- free(unaligned);
++ lseek(fd, offset, SEEK_SET);
++ bytesread = read(fd, iobuf, iobuf_size);
++ memcpy(buffer, iobuf, bytes);
++ free(iobuf);
+
+ /* Kludge. This is necessary to read/write the last
+ block of an odd-sized disk, until Linux 2.5.x kernel fixes.
+--
+1.7.1.1
+
diff --git a/source/a/efibootmgr/efibootmgr.SlackBuild b/source/a/efibootmgr/efibootmgr.SlackBuild new file mode 100755 index 000000000..1e411677b --- /dev/null +++ b/source/a/efibootmgr/efibootmgr.SlackBuild @@ -0,0 +1,117 @@ +#!/bin/sh + +# Copyright 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +PKGNAM=efibootmgr +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-1} + +# Automatically determine the architecture we're building on: +if [ -z "$ARCH" ]; then + case "$(uname -m)" in + i?86) ARCH=i486 ;; + arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7lh ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) ARCH=$(uname -m) ;; + esac + export ARCH +fi + +if [ "$ARCH" = "i386" ]; then + SLKCFLAGS="-O2 -march=i386 -mcpu=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "s390" ]; then + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +elif [ "$ARCH" = "armv7hl" ]; then + SLKCFLAGS="-O3 -march=armv7-a -mfpu=vfpv3-d16" + LIBDIRSUFFIX="" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp} +PKG=$TMP/package-$PKGNAM + +rm -rf $PKG +mkdir -p $TMP $PKG + +cd $TMP +rm -rf $PKGNAM-$VERSION +tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1 +cd $PKGNAM-$VERSION + +zcat $CWD/efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/efibootmgr-0.5.4-support-4k-sectors.patch.gz | patch -p1 --verbose || exit 1 + +chown -R root:root . +find . \ + \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \; + +# Build: +CFLAGS="$SLKCFLAGS" make || exit 1 + +# Install: +mkdir -p $PKG/usr/sbin +cp src/efibootmgr/efibootmgr $PKG/usr/sbin +chown root:root $PKG/usr/sbin/efibootmgr +chmod 755 $PKG/usr/sbin/efibootmgr +mkdir -p $PKG/usr/man/man8 +cat src/man/man8/efibootmgr.8 | gzip -9c > $PKG/usr/man/man8/efibootmgr.8.gz + +# Strip binaries: +( cd $PKG + find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null +) + +# Add a documentation directory: +mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION +cp -a \ + AUTHORS COPYING* INSTALL README* doc/* \ + $PKG/usr/doc/${PKGNAM}-$VERSION + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz + diff --git a/source/a/efibootmgr/slack-desc b/source/a/efibootmgr/slack-desc new file mode 100644 index 000000000..953b4b2a1 --- /dev/null +++ b/source/a/efibootmgr/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +efibootmgr: efibootmgr (tool to modify UEFI boot entries) +efibootmgr: +efibootmgr: efibootmgr is a Linux userspace application to modify the Intel +efibootmgr: Extensible Firmware Interface (EFI) Boot Manager. This application +efibootmgr: can create and destroy boot entries, change the boot order, change +efibootmgr: the next running boot option, and more. +efibootmgr: +efibootmgr: Homepage: http://linux.dell.com/efibootmgr +efibootmgr: +efibootmgr: +efibootmgr: diff --git a/source/a/eject/eject.CDROM_DRIVE_STATUS.diff b/source/a/eject/eject.CDROM_DRIVE_STATUS.diff new file mode 100644 index 000000000..0a80739fa --- /dev/null +++ b/source/a/eject/eject.CDROM_DRIVE_STATUS.diff @@ -0,0 +1,76 @@ +# Make CDROM tray toggle more robust by using CDS_TRAY_OPEN +# when avaiable. +# Also includes Slackware's eject_for_mac.patch +# +diff -Nurp eject.old/eject.c eject.new/eject.c +--- eject.old/eject.c 2013-02-19 10:18:36.041669514 +0000 ++++ eject.new/eject.c 2013-02-19 10:33:04.289392780 +0000 +@@ -564,34 +564,45 @@ static void ToggleTray(int fd) + { + struct timeval time_start, time_stop; + int time_elapsed; ++ int status; + + #ifdef CDROMCLOSETRAY ++ ++ status = ioctl(fd, CDROM_DRIVE_STATUS, 0); ++ if (status == CDS_TRAY_OPEN) { ++ CloseTray(fd); ++ } else { + +- /* Try to open the CDROM tray and measure the time therefor +- * needed. In my experience the function needs less than 0.05 +- * seconds if the tray was already open, and at least 1.5 seconds +- * if it was closed. */ +- gettimeofday(&time_start, NULL); ++ /* Try to open the CDROM tray and measure the time therefor ++ * needed. In my experience the function needs less than 0.05 ++ * seconds if the tray was already open, and at least 1.5 seconds ++ * if it was closed. */ ++ gettimeofday(&time_start, NULL); + +- /* Send the CDROMEJECT command to the device. */ +- if (ioctl(fd, CDROMEJECT, 0) < 0) { +- perror("ioctl"); +- exit(1); ++ /* Send the CDROMEJECT command to the device. */ ++ if (ioctl(fd, CDROMEJECT, 0) < 0 && errno != EIO) { ++ perror("ioctl CDROMEJECT"); ++ exit(1); ++ } ++ ++ /* Get the second timestamp, to measure the time needed to open ++ * the tray. */ ++ gettimeofday(&time_stop, NULL); ++ ++ /* If the ioctl returns CDS_TRAY_OPEN now then we can ignore ++ * the guess based on elapsed-time */ ++ status = ioctl(fd, CDROM_DRIVE_STATUS, 0); ++ if (status != CDS_TRAY_OPEN) { ++ time_elapsed = (time_stop.tv_sec * 1000000 + time_stop.tv_usec) - ++ (time_start.tv_sec * 1000000 + time_start.tv_usec); ++ ++ /* If the tray "opened" too fast, we can be nearly sure, that it ++ * was already open. In this case, close it now. Else the tray was ++ * closed before. This would mean that we are done. */ ++ if (time_elapsed < TRAY_WAS_ALREADY_OPEN_USECS) ++ CloseTray(fd); ++ } + } +- +- /* Get the second timestamp, to measure the time needed to open +- * the tray. */ +- gettimeofday(&time_stop, NULL); +- +- time_elapsed = (time_stop.tv_sec * 1000000 + time_stop.tv_usec) - +- (time_start.tv_sec * 1000000 + time_start.tv_usec); +- +- /* If the tray "opened" too fast, we can be nearly sure, that it +- * was already open. In this case, close it now. Else the tray was +- * closed before. This would mean that we are done. */ +- if (time_elapsed < TRAY_WAS_ALREADY_OPEN_USECS) +- CloseTray(fd); +- + #else + fprintf(stderr, _("%s: CD-ROM tray toggle command not supported by this kernel\n"), programName); + #endif diff --git a/source/a/eject/eject.SlackBuild b/source/a/eject/eject.SlackBuild index 94b0ccf76..7d2c09821 100755 --- a/source/a/eject/eject.SlackBuild +++ b/source/a/eject/eject.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2006, 2008, 2009, 2010, 2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006, 2008, 2009, 2010, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -23,7 +23,7 @@ PKGNAM=eject VERSION=${VERSION:-2.1.5} -BUILD=${BUILD:-3} +BUILD=${BUILD:-4} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -60,7 +60,7 @@ cd ${PKGNAM} zcat $CWD/eject.spaces.diff.gz | patch -p0 --verbose || exit 1 # Fix "eject -T": -zcat $CWD/eject_for_mac.patch.gz | patch -p4 --verbose || exit 1 +zcat $CWD/eject.CDROM_DRIVE_STATUS.diff.gz | patch -p1 --verbose || exit 1 # Make sure ownerships and permissions are sane: chown -R root:root . diff --git a/source/a/eject/eject_for_mac.patch b/source/a/eject/eject_for_mac.patch deleted file mode 100644 index c86e3c17b..000000000 --- a/source/a/eject/eject_for_mac.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Nru /tmp/6rrvEn4EMT/eject-2.1.4/eject.c /tmp/Jon9ZzjSLN/eject-2.1.4/eject.c ---- /tmp/6rrvEn4EMT/eject-2.1.4/eject.c 2007-03-12 14:15:26.000000000 +0100 -+++ /tmp/Jon9ZzjSLN/eject-2.1.4/eject.c 2007-03-12 14:15:28.000000000 +0100 -@@ -552,7 +552,7 @@ - gettimeofday(&time_start, NULL); - - /* Send the CDROMEJECT command to the device. */ -- if (ioctl(fd, CDROMEJECT, 0) < 0) { -+ if (ioctl(fd, CDROMEJECT, 0) < 0 && errno != EIO) { - perror("ioctl"); - exit(1); - } diff --git a/source/a/elilo/elilo.SlackBuild b/source/a/elilo/elilo.SlackBuild new file mode 100755 index 000000000..ad2ffc146 --- /dev/null +++ b/source/a/elilo/elilo.SlackBuild @@ -0,0 +1,116 @@ +#!/bin/sh + +# Copyright 2013 Patrick J. Volkerding, Sebeka, MN, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +PKGNAM=elilo +VERSION=${VERSION:-$(echo $PKGNAM*.tar.?z* | rev | cut -f 2 -d - | rev)} +BUILD=${BUILD:-6} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp} +PKG=$TMP/package-$PKGNAM + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf elilo +mkdir elilo +cd elilo +tar xvf $CWD/${PKGNAM}-$VERSION-all.tar.?z* || exit 1 +tar xvf elilo-${VERSION}-source.tar.gz || exit 1 +chown -R root:root . +chmod -R u+w,go+r-w,a-s . +cd elilo + +sed -i "s,/usr/lib,/usr/lib${LIBDIRSUFFIX},g" Make.defaults +sed -i "s,EFICRT0.*= /usr/lib${LIBDIRSUFFIX},EFICRT0 = /usr/lib${LIBDIRSUFFIX}/gnuefi,g" Make.defaults + +# We will build this from source. +# However, we will package the pre-built EFI binaries, since we would +# like to include both 32-bit and 64-bit x86 EFI loaders in the +# finished package. + +make || exit 1 + +# Install the files in the package directory: +mkdir -p $PKG/usr/sbin +cp tools/eliloalt $PKG/usr/sbin + +# Install eliloconfig, a simple setup script: +cp -a $CWD/eliloconfig $PKG/usr/sbin +chown root:root $PKG/usr/sbin/eliloconfig +chmod 755 $PKG/usr/sbin/eliloconfig +mkdir -p $PKG/var/log/setup +cp -a $CWD/setup.ll.eliloconfig $PKG/var/log/setup +chown root:root $PKG/var/log/setup/setup.ll.eliloconfig +chmod 755 $PKG/var/log/setup/setup.ll.eliloconfig + +mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION +cp -a \ + ChangeLog LIMITATIONS README README.gnu-efi TODO docs/* \ + examples \ + $PKG/usr/doc/$PKGNAM-$VERSION + +# Since it might not be safe to strip the EFI binaries, do this now: +( cd $PKG + find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null +) + +cd .. + +# Install EFI bootloaders in /boot: +mkdir $PKG/boot +# The ia32 version is pretty much useless, since 32-bit UEFI is nowhere to be +# found. Maybe it would help old 32-bit Intel Macs though? +cp -a elilo*ia32.efi $PKG/boot/elilo-ia32.efi +# Itanium binary isn't needed here. +#cp -a elilo*ia64.efi $PKG/boot/elilo-ia64.efi +cp -a elilo*x86_64.efi $PKG/boot/elilo-x86_64.efi + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz + diff --git a/source/a/elilo/eliloconfig b/source/a/elilo/eliloconfig new file mode 100644 index 000000000..91f66d692 --- /dev/null +++ b/source/a/elilo/eliloconfig @@ -0,0 +1,213 @@ +#!/bin/sh +# Copyright 2013 Patrick Volkerding, Sebeka, Minnesota, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +# This script installs the elilo boot loader, the kernel, and optionally +# an initrd into the EFI System Partition. A boot menu entry can also be +# installed using efibootmgr. The kernel used will be whatever the symlink +# /boot/vmlinuz points to, and if /boot/initrd.gz exists, that will be +# installed as the initrd. +# +# The EFI System Partition is expected to be mounted on /boot/efi before +# running this script. + +TMP=/var/log/setup/tmp + +# Set the OS root directory (called T_PX for some unknown reason). +# If an argument is given to this script and it is a directory, it +# is taken to be the root directory. First though, we check for a +# directory named $T_PX, and that gets the first priority. +if [ ! -d "$T_PX" ]; then + if [ ! "$1" = "" ]; then + if [ -d "$1" ]; then + T_PX="$1" + fi + else + # Are we on the installer image? + if [ -r /usr/lib/setup/SeTpartitions ]; then + T_PX=/mnt + # Or, are we on a running system? + elif [ -r /etc/slackware-version ]; then + T_PX=/ + # One more installer-likely thing: + elif [ -r /usr/lib/setup/setup ]; then + T_PX=/mnt + else + # We will have to assume we're on an installed and running system. + T_PX=/ + fi + fi +fi + +# Determine the root partition (such as /dev/sda1) +ROOT_DEVICE=$2 +if [ "$ROOT_DEVICE" = "" ]; then + if [ -r $TMP/SeTrootdev ]; then + ROOT_DEVICE="$(cat $TMP/SeTrootdev)" + else + ROOT_DEVICE="$(mount | cut -f 1 -d ' ' | head -n 1)" + fi +fi + +# If the system is not running under EFI, skip running this script: +if [ ! -d /sys/firmware/efi ]; then + if [ "$T_PX" = "/" ]; then + echo "ERROR: System is not running under UEFI." + fi + exit +fi + +# If there's no vfat mounted on /boot/efi or /mnt/boot/efi, forget it: +if ! mount | grep vfat | grep -wq /boot/efi ; then + if ! mount | grep vfat | grep -wq /mnt/boot/efi ; then + if [ "$T_PX" = "/" ]; then + echo "ERROR: No EFI System Partition mounted on /boot/efi." + fi + exit + fi +fi + +# Figure out the device and partition number of the ESP: +if mount | grep vfat | grep -wq /boot/efi ; then + EFI_DEVICE=$(mount | grep vfat | grep -w /boot/efi | cut -b 1-8) + EFI_PARTITION=$(mount | grep vfat | grep -w /boot/efi | cut -f 1 -d ' ' | cut -b 9-) +else + EFI_DEVICE=$(mount | grep vfat | grep -w /mnt/boot/efi | cut -b 1-8) + EFI_PARTITION=$(mount | grep vfat | grep -w /mnt/boot/efi | cut -f 1 -d ' ' | cut -b 9-) +fi + +# There better be a kernel: +if [ ! -r $T_PX/boot/vmlinuz ]; then + if [ "$T_PX" = "/" ]; then + echo "ERROR: No kernel found at /boot/vmlinuz." + fi + exit +fi + +dialog --title "INSTALL ELILO" \ +--backtitle "ELILO (EFI Linux Loader) installation" \ +--menu "ELILO is a Linux boot loader for \ +EFI based systems. Installing ELILO will allow you to boot your Linux \ +system from the hard drive after selecting it from the UEFI boot menu. \ +Since an EFI System Partition was detected on this machine, it is \ +recommended that you install ELILO now. Please select an option:" \ +13 70 2 \ +"install" "Install ELILO on the EFI System Partition" \ +"skip" "Do not install ELILO" 2> $TMP/reply +if [ $? = 1 -o $? = 255 ]; then + exit +fi +REPLY="`cat $TMP/reply`" +rm -f $TMP/reply +if [ "$REPLY" = "skip" ]; then + exit +fi + +mkdir -p $T_PX/boot/efi/EFI/Slackware 1> /dev/null 2> /dev/null +cat << EOF > $T_PX/boot/efi/EFI/Slackware/elilo.conf +chooser=simple +delay=1 +timeout=1 +# +EOF +cp -a $T_PX/boot/elilo-x86_64.efi $T_PX/boot/efi/EFI/Slackware/elilo.efi 1> /dev/null 2> /dev/null +cp $T_PX/boot/vmlinuz $T_PX/boot/efi/EFI/Slackware 1> /dev/null 2> /dev/null +cat << EOF >> $T_PX/boot/efi/EFI/Slackware/elilo.conf +image=vmlinuz + label=vmlinuz +EOF +touch -r $T_PX/boot/vmlinuz $T_PX/boot/efi/EFI/Slackware/vmlinuz +if [ -r $T_PX/boot/initrd.gz ]; then + cp $T_PX/boot/initrd.gz $T_PX/boot/efi/EFI/Slackware 1> /dev/null 2> /dev/null + touch -r $T_PX/boot/initrd.gz $T_PX/boot/efi/EFI/Slackware/initrd.gz + cat << EOF >> $T_PX/boot/efi/EFI/Slackware/elilo.conf + initrd=initrd.gz +EOF +fi +cat << EOF >> $T_PX/boot/efi/EFI/Slackware/elilo.conf + read-only + append="root=$ROOT_DEVICE vga=normal ro" +EOF + +dialog --title "INSTALL BOOT MENU ENTRY?" \ +--backtitle "ELILO (EFI Linux Loader) installation" \ +--menu "Would you like to install \ +a boot menu entry so that you can easily select Slackware when you boot your \ +machine? WARNING: DO NOT install a boot menu entry on Apple hardware. \ +Apple computers use a different type of EFI firmware, and efibootmgr has \ +been known to damage them. On all other computers, it is recommended to add \ +a boot menu entry. Please select an option:" \ +14 70 2 \ +"install" "Install a boot menu entry" \ +"skip" "Do not install a boot menu entry" 2> $TMP/reply +if [ $? = 1 -o $? = 255 ]; then + exit +fi +REPLY="`cat $TMP/reply`" +rm -f $TMP/reply +if [ "$REPLY" = "skip" ]; then + exit +fi + +if [ ! -d /sys/firmware/efi/vars ]; then + modprobe efivars 1> /dev/null 2> /dev/null + sleep 1 # Probably not needed, but playing it safe +fi +# If it's still gone, we fail silently: +if [ ! -d /sys/firmware/efi/vars ]; then + exit +fi + +efibootmgr -v | rev | cut -f 2- | rev | grep Boot0 | grep Slackware | while read line ; do + # Reject entries that don't exactly match as not our business + if [ ! "$(echo $line | cut -f 2- -d ' ')" = "Slackware" ]; then + continue + fi + ENTRY="$(efibootmgr -v | grep "^$(echo $line | cut -b1-8)")" + dialog --title "REMOVE OLD \"Slackware\" EFI BOOT ENTRY?" \ + --backtitle "ELILO (EFI Linux Loader) installation" \ + --yesno "An old Slackware boot entry has been found in your EFI boot menu. \ +Would you like to remove this before installing the new Slackware boot \ +entry? This is recommended.\n\nOld EFI boot menu entry:\n$ENTRY" 13 70 + if [ ! $? = 0 ]; then + continue + fi + # Remove the boot entry: + efibootmgr -q -B -b $(echo $line | cut -b5-8) +done + +efibootmgr -q -c -d $EFI_DEVICE -p $EFI_PARTITION -l "\\EFI\\Slackware\\elilo.efi" -L "Slackware" + +efibootmgr -v | rev | cut -f 2- | rev | grep Boot0 | grep Slackware | while read line ; do + # Reject entries that don't exactly match as not our business + if [ ! "$(echo $line | cut -f 2- -d ' ')" = "Slackware" ]; then + continue + fi + ENTRY="$(efibootmgr -v | grep "^$(echo $line | cut -b1-8)")" + if echo $ENTRY | grep -q -F "\EFI\Slackware\elilo.efi" ; then + dialog --title "EFI BOOT ENTRY INSTALLED" \ + --backtitle "ELILO (EFI Linux Loader) installation" \ + --msgbox "A Slackware boot entry has been installed to your EFI boot +menu.\n\nEFI boot menu entry:\n$ENTRY" 11 70 + fi +done + +# Done. diff --git a/source/a/elilo/setup.ll.eliloconfig b/source/a/elilo/setup.ll.eliloconfig new file mode 100644 index 000000000..75e56138a --- /dev/null +++ b/source/a/elilo/setup.ll.eliloconfig @@ -0,0 +1,3 @@ +#!/bin/sh +#BLURB="Set up ELILO (EFI LILO) to boot Linux from your hard drive" +sh usr/sbin/eliloconfig $* diff --git a/source/a/elilo/slack-desc b/source/a/elilo/slack-desc new file mode 100644 index 000000000..acacac071 --- /dev/null +++ b/source/a/elilo/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':'. + + |-----handy-ruler-----------------------------------------------------| +elilo: elilo (Linux Loader for EFI-based platforms) +elilo: +elilo: This is elilo, a boot loader originally developed by HP for IA-64 +elilo: systems. This is used to load the kernel and initial ramdisk on +elilo: machines that use UEFI. Since most UEFI implementations are 64-bit, +elilo: the 64-bit EFI binary is generally the one to use (even for loading +elilo: a 32-bit kernel). +elilo: +elilo: Homepage: http://elilo.sourceforge.net +elilo: +elilo: diff --git a/source/a/etc/etc.SlackBuild b/source/a/etc/etc.SlackBuild index 5db87ea7f..0233a9776 100755 --- a/source/a/etc/etc.SlackBuild +++ b/source/a/etc/etc.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2005-2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2005-2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -20,8 +20,8 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=14.0 -BUILD=${BUILD:-1} +VERSION=14.1 +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -44,6 +44,10 @@ cd $PKG explodepkg $CWD/_etc.tar.gz # Fix for ARCH: sed -i -e "s#/i486-slackware-linux#/${ARCH}-slackware-linux#" etc/ld.so.conf.new +# Fix paths if lib64 is needed: +if [ "$ARCH" = "x86_64" ]; then + sed -i -e "s#/lib#/lib64#" etc/ld.so.conf.new +fi cp -a $CWD/termcap-BSD.gz etc/termcap-BSD.gz gzip -d --force etc/termcap-BSD.gz chown root:root etc/termcap-BSD diff --git a/source/a/file/file.SlackBuild b/source/a/file/file.SlackBuild index 04c47856b..2435c5f02 100755 --- a/source/a/file/file.SlackBuild +++ b/source/a/file/file.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2005-2008, 2009, 2010 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2005-2008, 2009, 2010, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -71,9 +71,15 @@ zcat $CWD/file.etc.file.diff.gz | patch -p1 --verbose || exit 1 # This is needed after the patch above: autoreconf || exit 1 -# Don't spew warnings about using the flat text files -zcat $CWD/file.quiet.diff.gz | patch -p1 -E --verbose || exit 1 -# I don't know what this one does +# Since we're going to include the compiled magic database now (otherwise +# there seem to be libmagic related crashes), this patch probably doesn't +# need to be applied. +# +## Don't spew warnings about using the flat text files +#zcat $CWD/file.quiet.diff.gz | patch -p1 -E --verbose || exit 1 + +# Keep the output format for ELF binaries the same as it was in earlier +# versions of file to avoid breaking existing scripts: zcat $CWD/file.short.diff.gz | patch -p1 -E --verbose || exit 1 # Add zisofs and crda regulatory bin detection @@ -103,22 +109,27 @@ make install DESTDIR=$PKG || exit 1 # Seems --disable-static has been ignored lately: rm -f $PKG/usr/lib${LIBDIRSUFFIX}/libmagic.a -# Is file really this much of a processing bottleneck? Doubtful. +# Update: We're going to use magic.mgc now as the flat files cause +# libmagic crashes with versions newer than file-5.11. Maybe that +# wasn't being tested as well... in any case, using magic.mgc works. # -# NOTE: Benchmarked flat files vs. .mgc June 2009, found no measurable -# difference on 3000+ files. # -# If you really need these (let's say you're doing virus scanning -# and this *would* speed things up quite a bit) you can create -# the pre-parsed file yourself using file's -C option. -rm -f $PKG/etc/file/magic.mgc -mkdir -p $PKG/etc/file/magic -cp -a magic/Magdir/* $PKG/etc/file/magic -# After building, this works fine. /etc/file/magic/ takes up 1.2M, -# while the magic.mgc file is 1.7M. Considering a difference of 500k, -# and the potential speedup, I'm not sure it's worth the effort... -# but it does make it easier for an admin to add a small chunk of -# new magic. +## Is file really this much of a processing bottleneck? Doubtful. +## +## NOTE: Benchmarked flat files vs. .mgc June 2009, found no measurable +## difference on 3000+ files. +## +## If you really need these (let's say you're doing virus scanning +## and this *would* speed things up quite a bit) you can create +## the pre-parsed file yourself using file's -C option. +#rm -f $PKG/etc/file/magic.mgc +#mkdir -p $PKG/etc/file/magic +#cp -a magic/Magdir/* $PKG/etc/file/magic +## After building, this works fine. /etc/file/magic/ takes up 1.2M, +## while the magic.mgc file is 1.7M. Considering a difference of 500k, +## and the potential speedup, I'm not sure it's worth the effort... +## but it does make it easier for an admin to add a small chunk of +## new magic. # IMHO, moving this sort of thing does not make sense. # We'll support both the traditional and new locations. diff --git a/source/a/floppy/fdutils-5.4-20020222.diff b/source/a/floppy/fdutils-5.4-20020222.diff deleted file mode 100644 index 28a7b0405..000000000 --- a/source/a/floppy/fdutils-5.4-20020222.diff +++ /dev/null @@ -1,2991 +0,0 @@ -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/Changelog fdutils/Changelog ---- fdutils-5.4/Changelog Sat Jun 3 16:29:33 2000 -+++ fdutils/Changelog Sun Feb 3 23:51:42 2002 -@@ -1,3 +1,9 @@ -+020203 Fix fdmount and superformat bugs -+020203 Create /dev/fd0 before testing for existence of /dev/fd0 -+011002 Fix floppycontrol.c printf conditional on FD_DISK_CHANGED, so that -+ it works with gcc3 which apparently considers printf as a macro... -+000612 Explicitly include sysmacros.h, apparently this is needed in -+ certain environments - 000603 Released 5.4 - 000527 Fixed a couple of buffer overrun exploits and other cleanup. Made - fdutils compilable with Linux 2.3/2.4 kernels. Documentation fixes -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/INSTALL fdutils/INSTALL ---- fdutils-5.4/INSTALL Thu Jul 1 19:48:19 1999 -+++ fdutils/INSTALL Mon May 21 00:24:21 2001 -@@ -8,14 +8,17 @@ - 3. Compile the utilities: - make - -- 3. Run the MAKEFLOPPIES script to create the device files: -+ 4. Install: -+ make install -+ -+ 5. Run the MAKEFLOPPIES script to create the device files: - cd /dev - MAKEFLOPPIES - -- 4. Enjoy! -+ 6. Enjoy! - I you have any questions, feel free to ask! - -- 5. You might also want to get a recent version of mtools (later than -+ 7. You might also want to get a recent version of mtools (later than - 3.0) - - A. Knaff -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/config.guess fdutils/config.guess ---- fdutils-5.4/config.guess Tue Jun 17 22:37:13 1997 -+++ fdutils/config.guess Mon May 21 00:24:45 2001 -@@ -1,7 +1,10 @@ - #! /bin/sh - # Attempt to guess a canonical system name. --# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc. --# -+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -+# Free Software Foundation, Inc. -+ -+timestamp='2001-04-20' -+ - # This file 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 of the License, or -@@ -22,18 +25,92 @@ - # the same distribution terms that you use for the rest of that program. - - # Written by Per Bothner <bothner@cygnus.com>. --# The master version of this file is at the FSF in /home/gd/gnu/lib. -+# Please send patches to <config-patches@gnu.org>. - # - # This script attempts to guess a canonical system name similar to - # config.sub. If it succeeds, it prints the system name on stdout, and - # exits with 0. Otherwise, it exits with 1. - # - # The plan is that this can be called by configure scripts if you --# don't specify an explicit system type (host/target name). --# --# Only a few systems have been added to this list; please add others --# (but try to keep the structure clean). --# -+# don't specify an explicit build system type. -+ -+me=`echo "$0" | sed -e 's,.*/,,'` -+ -+usage="\ -+Usage: $0 [OPTION] -+ -+Output the configuration name of the system \`$me' is run on. -+ -+Operation modes: -+ -h, --help print this help, then exit -+ -t, --time-stamp print date of last modification, then exit -+ -v, --version print version number, then exit -+ -+Report bugs and patches to <config-patches@gnu.org>." -+ -+version="\ -+GNU config.guess ($timestamp) -+ -+Originally written by Per Bothner. -+Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000 -+Free Software Foundation, Inc. -+ -+This is free software; see the source for copying conditions. There is NO -+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -+ -+help=" -+Try \`$me --help' for more information." -+ -+# Parse command line -+while test $# -gt 0 ; do -+ case $1 in -+ --time-stamp | --time* | -t ) -+ echo "$timestamp" ; exit 0 ;; -+ --version | -v ) -+ echo "$version" ; exit 0 ;; -+ --help | --h* | -h ) -+ echo "$usage"; exit 0 ;; -+ -- ) # Stop option processing -+ shift; break ;; -+ - ) # Use stdin as input. -+ break ;; -+ -* ) -+ echo "$me: invalid option $1$help" >&2 -+ exit 1 ;; -+ * ) -+ break ;; -+ esac -+done -+ -+if test $# != 0; then -+ echo "$me: too many arguments$help" >&2 -+ exit 1 -+fi -+ -+ -+dummy=dummy-$$ -+trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 -+ -+# CC_FOR_BUILD -- compiler used by this script. -+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -+# use `HOST_CC' if defined, but it is deprecated. -+ -+case $CC_FOR_BUILD,$HOST_CC,$CC in -+ ,,) echo "int dummy(){}" > $dummy.c -+ for c in cc gcc c89 ; do -+ ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 -+ if test $? = 0 ; then -+ CC_FOR_BUILD="$c"; break -+ fi -+ done -+ rm -f $dummy.c $dummy.o $dummy.rel -+ if test x"$CC_FOR_BUILD" = x ; then -+ CC_FOR_BUILD=no_compiler_found -+ fi -+ ;; -+ ,,*) CC_FOR_BUILD=$CC ;; -+ ,*,*) CC_FOR_BUILD=$HOST_CC ;; -+esac - - # This is needed to find uname on a Pyramid OSx when run in the BSD universe. - # (ghazi@noc.rutgers.edu 8/24/94.) -@@ -43,37 +120,162 @@ - - UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown - UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown --UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown - UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - --trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 -- - # Note: order is significant - the case branches are not exclusive. - - case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in -+ *:NetBSD:*:*) -+ # Netbsd (nbsd) targets should (where applicable) match one or -+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, -+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently -+ # switched to ELF, *-*-netbsd* would select the old -+ # object file format. This provides both forward -+ # compatibility and a consistent mechanism for selecting the -+ # object file format. -+ # Determine the machine/vendor (is the vendor relevant). -+ case "${UNAME_MACHINE}" in -+ amiga) machine=m68k-unknown ;; -+ arm32) machine=arm-unknown ;; -+ atari*) machine=m68k-atari ;; -+ sun3*) machine=m68k-sun ;; -+ mac68k) machine=m68k-apple ;; -+ macppc) machine=powerpc-apple ;; -+ hp3[0-9][05]) machine=m68k-hp ;; -+ ibmrt|romp-ibm) machine=romp-ibm ;; -+ *) machine=${UNAME_MACHINE}-unknown ;; -+ esac -+ # The Operating System including object format, if it has switched -+ # to ELF recently, or will in the future. -+ case "${UNAME_MACHINE}" in -+ i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) -+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ -+ | grep __ELF__ >/dev/null -+ then -+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). -+ # Return netbsd for either. FIX? -+ os=netbsd -+ else -+ os=netbsdelf -+ fi -+ ;; -+ *) -+ os=netbsd -+ ;; -+ esac -+ # The OS release -+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` -+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: -+ # contains redundant information, the shorter form: -+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. -+ echo "${machine}-${os}${release}" -+ exit 0 ;; - alpha:OSF1:*:*) -+ if test $UNAME_RELEASE = "V4.0"; then -+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` -+ fi - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. -- echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'` -+ cat <<EOF >$dummy.s -+ .data -+\$Lformat: -+ .byte 37,100,45,37,120,10,0 # "%d-%x\n" -+ -+ .text -+ .globl main -+ .align 4 -+ .ent main -+main: -+ .frame \$30,16,\$26,0 -+ ldgp \$29,0(\$27) -+ .prologue 1 -+ .long 0x47e03d80 # implver \$0 -+ lda \$2,-1 -+ .long 0x47e20c21 # amask \$2,\$1 -+ lda \$16,\$Lformat -+ mov \$0,\$17 -+ not \$1,\$18 -+ jsr \$26,printf -+ ldgp \$29,0(\$26) -+ mov 0,\$16 -+ jsr \$26,exit -+ .end main -+EOF -+ $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null -+ if test "$?" = 0 ; then -+ case `./$dummy` in -+ 0-0) -+ UNAME_MACHINE="alpha" -+ ;; -+ 1-0) -+ UNAME_MACHINE="alphaev5" -+ ;; -+ 1-1) -+ UNAME_MACHINE="alphaev56" -+ ;; -+ 1-101) -+ UNAME_MACHINE="alphapca56" -+ ;; -+ 2-303) -+ UNAME_MACHINE="alphaev6" -+ ;; -+ 2-307) -+ UNAME_MACHINE="alphaev67" -+ ;; -+ esac -+ fi -+ rm -f $dummy.s $dummy -+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` -+ exit 0 ;; -+ Alpha\ *:Windows_NT*:*) -+ # How do we know it's Interix rather than the generic POSIX subsystem? -+ # Should we change UNAME_MACHINE based on the output of uname instead -+ # of the specific Alpha model? -+ echo alpha-pc-interix - exit 0 ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit 0 ;; - Amiga*:UNIX_System_V:4.0:*) -- echo m68k-cbm-sysv4 -+ echo m68k-unknown-sysv4 - exit 0;; -- amiga:NetBSD:*:*) -- echo m68k-cbm-netbsd${UNAME_RELEASE} -- exit 0 ;; - amiga:OpenBSD:*:*) -- echo m68k-cbm-openbsd${UNAME_RELEASE} -- exit 0 ;; -+ echo m68k-unknown-openbsd${UNAME_RELEASE} -+ exit 0 ;; -+ *:[Aa]miga[Oo][Ss]:*:*) -+ echo ${UNAME_MACHINE}-unknown-amigaos -+ exit 0 ;; -+ arc64:OpenBSD:*:*) -+ echo mips64el-unknown-openbsd${UNAME_RELEASE} -+ exit 0 ;; -+ arc:OpenBSD:*:*) -+ echo mipsel-unknown-openbsd${UNAME_RELEASE} -+ exit 0 ;; -+ hkmips:OpenBSD:*:*) -+ echo mips-unknown-openbsd${UNAME_RELEASE} -+ exit 0 ;; -+ pmax:OpenBSD:*:*) -+ echo mipsel-unknown-openbsd${UNAME_RELEASE} -+ exit 0 ;; -+ sgi:OpenBSD:*:*) -+ echo mips-unknown-openbsd${UNAME_RELEASE} -+ exit 0 ;; -+ wgrisc:OpenBSD:*:*) -+ echo mipsel-unknown-openbsd${UNAME_RELEASE} -+ exit 0 ;; -+ *:OS/390:*:*) -+ echo i370-ibm-openedition -+ exit 0 ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; -- Pyramid*:OSx*:*:*|MIS*:OSx*:*:*) -+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) -+ echo hppa1.1-hitachi-hiuxmpp -+ exit 0;; -+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 -@@ -81,9 +283,12 @@ - echo pyramid-pyramid-bsd - fi - exit 0 ;; -- NILE:*:*:dcosx) -+ NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit 0 ;; -+ sun4H:SunOS:5.*:*) -+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -+ exit 0 ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; -@@ -108,26 +313,61 @@ - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; -+ sun*:*:4.2BSD:*) -+ UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` -+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 -+ case "`/bin/arch`" in -+ sun3) -+ echo m68k-sun-sunos${UNAME_RELEASE} -+ ;; -+ sun4) -+ echo sparc-sun-sunos${UNAME_RELEASE} -+ ;; -+ esac -+ exit 0 ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; -- atari*:NetBSD:*:*) -- echo m68k-atari-netbsd${UNAME_RELEASE} -- exit 0 ;; - atari*:OpenBSD:*:*) -- echo m68k-atari-openbsd${UNAME_RELEASE} -+ echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; -- sun3*:NetBSD:*:*) -- echo m68k-sun-netbsd${UNAME_RELEASE} -+ # The situation for MiNT is a little confusing. The machine name -+ # can be virtually everything (everything which is not -+ # "atarist" or "atariste" at least should have a processor -+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT" -+ # to the lowercase version "mint" (or "freemint"). Finally -+ # the system name "TOS" denotes a system which is actually not -+ # MiNT. But MiNT is downward compatible to TOS, so this should -+ # be no problem. -+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) -+ echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; -- sun3*:OpenBSD:*:*) -- echo m68k-sun-openbsd${UNAME_RELEASE} -+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) -+ echo m68k-atari-mint${UNAME_RELEASE} -+ exit 0 ;; -+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) -+ echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; -- mac68k:NetBSD:*:*) -- echo m68k-apple-netbsd${UNAME_RELEASE} -+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) -+ echo m68k-milan-mint${UNAME_RELEASE} -+ exit 0 ;; -+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) -+ echo m68k-hades-mint${UNAME_RELEASE} -+ exit 0 ;; -+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) -+ echo m68k-unknown-mint${UNAME_RELEASE} -+ exit 0 ;; -+ sun3*:OpenBSD:*:*) -+ echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) -- echo m68k-apple-openbsd${UNAME_RELEASE} -+ echo m68k-unknown-openbsd${UNAME_RELEASE} -+ exit 0 ;; -+ mvme68k:OpenBSD:*:*) -+ echo m68k-unknown-openbsd${UNAME_RELEASE} -+ exit 0 ;; -+ mvme88k:OpenBSD:*:*) -+ echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} -@@ -141,9 +381,17 @@ - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; -+ 2020:CLIX:*:* | 2430:CLIX:*:*) -+ echo clipper-intergraph-clix${UNAME_RELEASE} -+ exit 0 ;; - mips:*:*:UMIPS | mips:*:*:RISCos) -- sed 's/^ //' << EOF >dummy.c -- int main (argc, argv) int argc; char **argv; { -+ sed 's/^ //' << EOF >$dummy.c -+#ifdef __cplusplus -+#include <stdio.h> /* for printf() prototype */ -+ int main (int argc, char *argv[]) { -+#else -+ int main (argc, argv) int argc; char *argv[]; { -+#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); -@@ -158,12 +406,15 @@ - exit (-1); - } - EOF -- ${CC-cc} dummy.c -o dummy \ -- && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ -- && rm dummy.c dummy && exit 0 -- rm -f dummy.c dummy -+ $CC_FOR_BUILD $dummy.c -o $dummy \ -+ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ -+ && rm -f $dummy.c $dummy && exit 0 -+ rm -f $dummy.c $dummy - echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; -+ Motorola:PowerMAX_OS:*:*) -+ echo powerpc-motorola-powermax -+ exit 0 ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit 0 ;; -@@ -179,15 +430,18 @@ - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` -- if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then -- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ -- -o ${TARGET_BINARY_INTERFACE}x = x ] ; then -+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] -+ then -+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ -+ [ ${TARGET_BINARY_INTERFACE}x = x ] -+ then - echo m88k-dg-dgux${UNAME_RELEASE} -- else -+ else - echo m88k-dg-dguxbcs${UNAME_RELEASE} -+ fi -+ else -+ echo i586-dg-dgux${UNAME_RELEASE} - fi -- else echo i586-dg-dgux${UNAME_RELEASE} -- fi - exit 0 ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 -@@ -208,12 +462,20 @@ - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' -- i?86:AIX:*:*) -+ i*86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; -+ ia64:AIX:*:*) -+ if [ -x /usr/bin/oslevel ] ; then -+ IBM_REV=`/usr/bin/oslevel` -+ else -+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} -+ fi -+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} -+ exit 0 ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then -- sed 's/^ //' << EOF >dummy.c -+ sed 's/^ //' << EOF >$dummy.c - #include <sys/systemcfg.h> - - main() -@@ -224,8 +486,8 @@ - exit(0); - } - EOF -- ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 -- rm -f dummy.c dummy -+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 -+ rm -f $dummy.c $dummy - echo rs6000-ibm-aix3.2.5 - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 -@@ -233,8 +495,9 @@ - echo rs6000-ibm-aix3.2 - fi - exit 0 ;; -- *:AIX:*:4) -- if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then -+ *:AIX:*:[45]) -+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` -+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc -@@ -242,7 +505,7 @@ - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else -- IBM_REV=4.${UNAME_RELEASE} -+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; -@@ -252,7 +515,7 @@ - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit 0 ;; -- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and -+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) -@@ -267,18 +530,75 @@ - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit 0 ;; -- 9000/[3478]??:HP-UX:*:*) -+ 9000/[34678]??:HP-UX:*:*) -+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; -- 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;; -- 9000/8?? ) HP_ARCH=hppa1.0 ;; -+ 9000/[678][0-9][0-9]) -+ case "${HPUX_REV}" in -+ 11.[0-9][0-9]) -+ if [ -x /usr/bin/getconf ]; then -+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` -+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` -+ case "${sc_cpu_version}" in -+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 -+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 -+ 532) # CPU_PA_RISC2_0 -+ case "${sc_kernel_bits}" in -+ 32) HP_ARCH="hppa2.0n" ;; -+ 64) HP_ARCH="hppa2.0w" ;; -+ esac ;; -+ esac -+ fi ;; -+ esac -+ if [ "${HP_ARCH}" = "" ]; then -+ sed 's/^ //' << EOF >$dummy.c -+ -+ #define _HPUX_SOURCE -+ #include <stdlib.h> -+ #include <unistd.h> -+ -+ int main () -+ { -+ #if defined(_SC_KERNEL_BITS) -+ long bits = sysconf(_SC_KERNEL_BITS); -+ #endif -+ long cpu = sysconf (_SC_CPU_VERSION); -+ -+ switch (cpu) -+ { -+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break; -+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break; -+ case CPU_PA_RISC2_0: -+ #if defined(_SC_KERNEL_BITS) -+ switch (bits) -+ { -+ case 64: puts ("hppa2.0w"); break; -+ case 32: puts ("hppa2.0n"); break; -+ default: puts ("hppa2.0"); break; -+ } break; -+ #else /* !defined(_SC_KERNEL_BITS) */ -+ puts ("hppa2.0"); break; -+ #endif -+ default: puts ("hppa1.0"); break; -+ } -+ exit (0); -+ } -+EOF -+ (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` -+ if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi -+ rm -f $dummy.c $dummy -+ fi ;; - esac -- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; -+ ia64:HP-UX:*:*) -+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` -+ echo ia64-hp-hpux${HPUX_REV} -+ exit 0 ;; - 3050*:HI-UX:*:*) -- sed 's/^ //' << EOF >dummy.c -+ sed 's/^ //' << EOF >$dummy.c - #include <unistd.h> - int - main () -@@ -303,8 +623,8 @@ - exit (0); - } - EOF -- ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 -- rm -f dummy.c dummy -+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 -+ rm -f $dummy.c $dummy - echo unknown-hitachi-hiuxwe2 - exit 0 ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) -@@ -313,13 +633,16 @@ - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit 0 ;; -+ *9??*:MPE/iX:*:*) -+ echo hppa1.0-hp-mpeix -+ exit 0 ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit 0 ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit 0 ;; -- i?86:OSF1:*:*) -+ i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else -@@ -329,6 +652,9 @@ - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit 0 ;; -+ hppa*:OpenBSD:*:*) -+ echo hppa-unknown-openbsd -+ exit 0 ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit 0 ;; -@@ -359,104 +685,297 @@ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ - exit 0 ;; - CRAY*TS:*:*:*) -- echo t90-cray-unicos${UNAME_RELEASE} -+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -+ exit 0 ;; -+ CRAY*T3D:*:*:*) -+ echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -+ exit 0 ;; -+ CRAY*T3E:*:*:*) -+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -+ exit 0 ;; -+ CRAY*SV1:*:*:*) -+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY-2:*:*:*) - echo cray2-cray-unicos - exit 0 ;; -- F300:UNIX_System_V:*:*) -- FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'` -+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) -+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` -+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` -- echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; -- F301:UNIX_System_V:*:*) -- echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` -- exit 0 ;; -- hp3[0-9][05]:NetBSD:*:*) -- echo m68k-hp-netbsd${UNAME_RELEASE} -+ hp300:OpenBSD:*:*) -+ echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; -- hp3[0-9][05]:OpenBSD:*:*) -- echo m68k-hp-openbsd${UNAME_RELEASE} -- exit 0 ;; -- i?86:BSD/386:*:* | *:BSD/OS:*:*) -+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit 0 ;; -+ sparc*:BSD/OS:*:*) -+ echo sparc-unknown-bsdi${UNAME_RELEASE} -+ exit 0 ;; -+ *:BSD/OS:*:*) -+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} -+ exit 0 ;; - *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; -- *:NetBSD:*:*) -- echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` -- exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - i*:CYGWIN*:*) -- echo i386-pc-cygwin32 -+ echo ${UNAME_MACHINE}-pc-cygwin -+ exit 0 ;; -+ i*:MINGW*:*) -+ echo ${UNAME_MACHINE}-pc-mingw32 -+ exit 0 ;; -+ i*:PW*:*) -+ echo ${UNAME_MACHINE}-pc-pw32 -+ exit 0 ;; -+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*) -+ # How do we know it's Interix rather than the generic POSIX subsystem? -+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we -+ # UNAME_MACHINE based on the output of uname instead of i386? -+ echo i386-pc-interix -+ exit 0 ;; -+ i*:UWIN*:*) -+ echo ${UNAME_MACHINE}-pc-uwin - exit 0 ;; - p*:CYGWIN*:*) -- echo powerpcle-unknown-cygwin32 -+ echo powerpcle-unknown-cygwin - exit 0 ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - *:GNU:*:*) -- echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` -+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; -- *:Linux:*:*) -- # The BFD linker knows what the default object file format is, so -- # first see if it will tell us. -- ld_help_string=`ld --help 2>&1` -- if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then -- echo "${UNAME_MACHINE}-pc-linux" ; exit 0 -- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86linux"; then -- echo "${UNAME_MACHINE}-pc-linux-aout" ; exit 0 -- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86coff"; then -- echo "${UNAME_MACHINE}-pc-linux-coff" ; exit 0 -- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then -- echo "${UNAME_MACHINE}-unknown-linux" ; exit 0 -- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then -- echo "${UNAME_MACHINE}-unknown-linux-aout" ; exit 0 -- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then -- echo "powerpc-unknown-linux" ; exit 0 -- elif test "${UNAME_MACHINE}" = "alpha" ; then -- echo alpha-unknown-linux ; exit 0 -- elif test "${UNAME_MACHINE}" = "sparc" ; then -- echo sparc-unknown-linux ; exit 0 -- else -- # Either a pre-BFD a.out linker (linux-oldld) or one that does not give us -- # useful --help. Gcc wants to distinguish between linux-oldld and linux-aout. -- test ! -d /usr/lib/ldscripts/. \ -- && echo "${UNAME_MACHINE}-pc-linux-oldld" && exit 0 -- # Determine whether the default compiler is a.out or elf -- cat >dummy.c <<EOF -+ i*86:Minix:*:*) -+ echo ${UNAME_MACHINE}-pc-minix -+ exit 0 ;; -+ arm*:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-gnu -+ exit 0 ;; -+ ia64:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux -+ exit 0 ;; -+ m68*:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-gnu -+ exit 0 ;; -+ mips:Linux:*:*) -+ cat >$dummy.c <<EOF -+#ifdef __cplusplus -+#include <stdio.h> /* for printf() prototype */ -+int main (int argc, char *argv[]) { -+#else -+int main (argc, argv) int argc; char *argv[]; { -+#endif -+#ifdef __MIPSEB__ -+ printf ("%s-unknown-linux-gnu\n", argv[1]); -+#endif -+#ifdef __MIPSEL__ -+ printf ("%sel-unknown-linux-gnu\n", argv[1]); -+#endif -+ return 0; -+} -+EOF -+ $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 -+ rm -f $dummy.c $dummy -+ ;; -+ ppc:Linux:*:*) -+ # Determine Lib Version -+ cat >$dummy.c <<EOF -+#include <features.h> -+#if defined(__GLIBC__) -+extern char __libc_version[]; -+extern char __libc_release[]; -+#endif - main(argc, argv) --int argc; --char *argv[]; -+ int argc; -+ char *argv[]; - { -+#if defined(__GLIBC__) -+ printf("%s %s\n", __libc_version, __libc_release); -+#else -+ printf("unknown\n"); -+#endif -+ return 0; -+} -+EOF -+ LIBC="" -+ $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null -+ if test "$?" = 0 ; then -+ ./$dummy | grep 1\.99 > /dev/null -+ if test "$?" = 0 ; then LIBC="libc1" ; fi -+ fi -+ rm -f $dummy.c $dummy -+ echo powerpc-unknown-linux-gnu${LIBC} -+ exit 0 ;; -+ alpha:Linux:*:*) -+ cat <<EOF >$dummy.s -+ .data -+ \$Lformat: -+ .byte 37,100,45,37,120,10,0 # "%d-%x\n" -+ .text -+ .globl main -+ .align 4 -+ .ent main -+ main: -+ .frame \$30,16,\$26,0 -+ ldgp \$29,0(\$27) -+ .prologue 1 -+ .long 0x47e03d80 # implver \$0 -+ lda \$2,-1 -+ .long 0x47e20c21 # amask \$2,\$1 -+ lda \$16,\$Lformat -+ mov \$0,\$17 -+ not \$1,\$18 -+ jsr \$26,printf -+ ldgp \$29,0(\$26) -+ mov 0,\$16 -+ jsr \$26,exit -+ .end main -+EOF -+ LIBC="" -+ $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null -+ if test "$?" = 0 ; then -+ case `./$dummy` in -+ 0-0) UNAME_MACHINE="alpha" ;; -+ 1-0) UNAME_MACHINE="alphaev5" ;; -+ 1-1) UNAME_MACHINE="alphaev56" ;; -+ 1-101) UNAME_MACHINE="alphapca56" ;; -+ 2-303) UNAME_MACHINE="alphaev6" ;; -+ 2-307) UNAME_MACHINE="alphaev67" ;; -+ esac -+ objdump --private-headers $dummy | \ -+ grep ld.so.1 > /dev/null -+ if test "$?" = 0 ; then -+ LIBC="libc1" -+ fi -+ fi -+ rm -f $dummy.s $dummy -+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} -+ exit 0 ;; -+ parisc:Linux:*:* | hppa:Linux:*:*) -+ # Look for CPU level -+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in -+ PA7*) echo hppa1.1-unknown-linux-gnu ;; -+ PA8*) echo hppa2.0-unknown-linux-gnu ;; -+ *) echo hppa-unknown-linux-gnu ;; -+ esac -+ exit 0 ;; -+ parisc64:Linux:*:* | hppa64:Linux:*:*) -+ echo hppa64-unknown-linux-gnu -+ exit 0 ;; -+ s390:Linux:*:* | s390x:Linux:*:*) -+ echo ${UNAME_MACHINE}-ibm-linux -+ exit 0 ;; -+ sh*:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-gnu -+ exit 0 ;; -+ sparc:Linux:*:* | sparc64:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-gnu -+ exit 0 ;; -+ x86_64:Linux:*:*) -+ echo x86_64-unknown-linux-gnu -+ exit 0 ;; -+ i*86:Linux:*:*) -+ # The BFD linker knows what the default object file format is, so -+ # first see if it will tell us. cd to the root directory to prevent -+ # problems with other programs or directories called `ld' in the path. -+ ld_supported_emulations=`cd /; ld --help 2>&1 \ -+ | sed -ne '/supported emulations:/!d -+ s/[ ][ ]*/ /g -+ s/.*supported emulations: *// -+ s/ .*// -+ p'` -+ case "$ld_supported_emulations" in -+ i*86linux) -+ echo "${UNAME_MACHINE}-pc-linux-gnuaout" -+ exit 0 -+ ;; -+ elf_i*86) -+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" -+ ;; -+ i*86coff) -+ echo "${UNAME_MACHINE}-pc-linux-gnucoff" -+ exit 0 -+ ;; -+ esac -+ # Either a pre-BFD a.out linker (linux-gnuoldld) -+ # or one that does not give us useful --help. -+ # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. -+ # If ld does not provide *any* "supported emulations:" -+ # that means it is gnuoldld. -+ test -z "$ld_supported_emulations" && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 -+ case "${UNAME_MACHINE}" in -+ i*86) -+ VENDOR=pc; -+ ;; -+ *) -+ VENDOR=unknown; -+ ;; -+ esac -+ # Determine whether the default compiler is a.out or elf -+ cat >$dummy.c <<EOF -+#include <features.h> -+#ifdef __cplusplus -+#include <stdio.h> /* for printf() prototype */ -+ int main (int argc, char *argv[]) { -+#else -+ int main (argc, argv) int argc; char *argv[]; { -+#endif - #ifdef __ELF__ -- printf ("%s-pc-linux\n", argv[1]); -+# ifdef __GLIBC__ -+# if __GLIBC__ >= 2 -+ printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); -+# else -+ printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); -+# endif -+# else -+ printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); -+# endif - #else -- printf ("%s-pc-linux-aout\n", argv[1]); -+ printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); - #endif - return 0; - } - EOF -- ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 -- rm -f dummy.c dummy -- fi ;; -+ $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 -+ rm -f $dummy.c $dummy -+ test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 -+ ;; - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions - # are messed up and put the nodename in both sysname and nodename. -- i?86:DYNIX/ptx:4*:*) -+ i*86:DYNIX/ptx:4*:*) - echo i386-sequent-sysv4 - exit 0 ;; -- i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) -+ i*86:UNIX_SV:4.2MP:2.*) -+ # Unixware is an offshoot of SVR4, but it has its own version -+ # number series starting with 2... -+ # I am not positive that other SVR4 systems won't match this, -+ # I just have to hope. -- rms. -+ # Use sysv4.2uw... so that sysv4* matches it. -+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} -+ exit 0 ;; -+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) -+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then -- echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} -+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else -- echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} -+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit 0 ;; -- i?86:*:3.2:*) -+ i*86:*:5:7*) -+ # Fixed at (any) Pentium or better -+ UNAME_MACHINE=i586 -+ if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then -+ echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} -+ else -+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} -+ fi -+ exit 0 ;; -+ i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` - echo ${UNAME_MACHINE}-pc-isc$UNAME_REL -@@ -465,11 +984,24 @@ - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 -+ (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ -+ && UNAME_MACHINE=i686 -+ (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ -+ && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit 0 ;; -+ i*86:*DOS:*:*) -+ echo ${UNAME_MACHINE}-pc-msdosdjgpp -+ exit 0 ;; -+ pc:*:*:*) -+ # Left here for compatibility: -+ # uname -m prints for DJGPP always 'pc', but it prints nothing about -+ # the processor, so we play safe by assuming i386. -+ echo i386-pc-msdosdjgpp -+ exit 0 ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit 0 ;; -@@ -489,7 +1021,7 @@ - exit 0 ;; - M68*:*:R3V[567]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; -- 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) -+ 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` -@@ -500,24 +1032,30 @@ - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; -- m68*:LynxOS:2.*:*) -+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit 0 ;; -- i?86:LynxOS:2.*:*) -+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; -- rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) -+ rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; -+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) -+ echo powerpc-unknown-lynxos${UNAME_RELEASE} -+ exit 0 ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; -+ RM*:ReliantUNIX-*:*:*) -+ echo mips-sni-sysv4 -+ exit 0 ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; -@@ -529,6 +1067,10 @@ - echo ns32k-sni-sysv - fi - exit 0 ;; -+ PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort -+ # says <Richard.M.Bartel@ccMail.Census.GOV> -+ echo i586-unisys-sysv4 -+ exit 0 ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes <hewes@openmarket.com>. - # How about differentiating between stratus architectures? -djm -@@ -541,23 +1083,101 @@ - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; -- R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*) -+ news*:NEWS-OS:6*:*) -+ echo mips-sony-newsos6 -+ exit 0 ;; -+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit 0 ;; -- PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort -- # says <Richard.M.Bartel@ccMail.Census.GOV> -- echo i586-unisys-sysv4 -- exit 0 ;; -+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. -+ echo powerpc-be-beos -+ exit 0 ;; -+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. -+ echo powerpc-apple-beos -+ exit 0 ;; -+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible. -+ echo i586-pc-beos -+ exit 0 ;; -+ SX-4:SUPER-UX:*:*) -+ echo sx4-nec-superux${UNAME_RELEASE} -+ exit 0 ;; -+ SX-5:SUPER-UX:*:*) -+ echo sx5-nec-superux${UNAME_RELEASE} -+ exit 0 ;; -+ Power*:Rhapsody:*:*) -+ echo powerpc-apple-rhapsody${UNAME_RELEASE} -+ exit 0 ;; -+ *:Rhapsody:*:*) -+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} -+ exit 0 ;; -+ *:Darwin:*:*) -+ echo `uname -p`-apple-darwin${UNAME_RELEASE} -+ exit 0 ;; -+ *:procnto*:*:* | *:QNX:[0123456789]*:*) -+ if test "${UNAME_MACHINE}" = "x86pc"; then -+ UNAME_MACHINE=pc -+ fi -+ echo `uname -p`-${UNAME_MACHINE}-nto-qnx -+ exit 0 ;; -+ *:QNX:*:4*) -+ echo i386-pc-qnx -+ exit 0 ;; -+ NSR-[KW]:NONSTOP_KERNEL:*:*) -+ echo nsr-tandem-nsk${UNAME_RELEASE} -+ exit 0 ;; -+ *:NonStop-UX:*:*) -+ echo mips-compaq-nonstopux -+ exit 0 ;; -+ BS2000:POSIX*:*:*) -+ echo bs2000-siemens-sysv -+ exit 0 ;; -+ DS/*:UNIX_System_V:*:*) -+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} -+ exit 0 ;; -+ *:Plan9:*:*) -+ # "uname -m" is not consistent, so use $cputype instead. 386 -+ # is converted to i386 for consistency with other x86 -+ # operating systems. -+ if test "$cputype" = "386"; then -+ UNAME_MACHINE=i386 -+ else -+ UNAME_MACHINE="$cputype" -+ fi -+ echo ${UNAME_MACHINE}-unknown-plan9 -+ exit 0 ;; -+ i*86:OS/2:*:*) -+ # If we were able to find `uname', then EMX Unix compatibility -+ # is probably installed. -+ echo ${UNAME_MACHINE}-pc-os2-emx -+ exit 0 ;; -+ *:TOPS-10:*:*) -+ echo pdp10-unknown-tops10 -+ exit 0 ;; -+ *:TENEX:*:*) -+ echo pdp10-unknown-tenex -+ exit 0 ;; -+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) -+ echo pdp10-dec-tops20 -+ exit 0 ;; -+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) -+ echo pdp10-xkl-tops20 -+ exit 0 ;; -+ *:TOPS-20:*:*) -+ echo pdp10-unknown-tops20 -+ exit 0 ;; -+ *:ITS:*:*) -+ echo pdp10-unknown-its -+ exit 0 ;; - esac - - #echo '(No uname command or uname output not recognized.)' 1>&2 - #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - --cat >dummy.c <<EOF -+cat >$dummy.c <<EOF - #ifdef _SEQUENT_ - # include <sys/types.h> - # include <sys/utsname.h> -@@ -595,7 +1215,10 @@ - #endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; -- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); -+ if (version < 4) -+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); -+ else -+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); - #endif - -@@ -640,11 +1263,24 @@ - #endif - - #if defined (vax) --#if !defined (ultrix) -- printf ("vax-dec-bsd\n"); exit (0); --#else -- printf ("vax-dec-ultrix\n"); exit (0); --#endif -+# if !defined (ultrix) -+# include <sys/param.h> -+# if defined (BSD) -+# if BSD == 43 -+ printf ("vax-dec-bsd4.3\n"); exit (0); -+# else -+# if BSD == 199006 -+ printf ("vax-dec-bsd4.3reno\n"); exit (0); -+# else -+ printf ("vax-dec-bsd\n"); exit (0); -+# endif -+# endif -+# else -+ printf ("vax-dec-bsd\n"); exit (0); -+# endif -+# else -+ printf ("vax-dec-ultrix\n"); exit (0); -+# endif - #endif - - #if defined (alliant) && defined (i860) -@@ -655,8 +1291,8 @@ - } - EOF - --${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 --rm -f dummy.c dummy -+$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 -+rm -f $dummy.c $dummy - - # Apollos put the system type in the environment. - -@@ -688,6 +1324,48 @@ - esac - fi - --#echo '(Unable to guess system type)' 1>&2 -+cat >&2 <<EOF -+$0: unable to guess system type -+ -+This script, last modified $timestamp, has failed to recognize -+the operating system you are using. It is advised that you -+download the most up to date version of the config scripts from -+ -+ ftp://ftp.gnu.org/pub/gnu/config/ -+ -+If the version you run ($0) is already up to date, please -+send the following data and any information you think might be -+pertinent to <config-patches@gnu.org> in order to provide the needed -+information to handle your system. -+ -+config.guess timestamp = $timestamp -+ -+uname -m = `(uname -m) 2>/dev/null || echo unknown` -+uname -r = `(uname -r) 2>/dev/null || echo unknown` -+uname -s = `(uname -s) 2>/dev/null || echo unknown` -+uname -v = `(uname -v) 2>/dev/null || echo unknown` -+ -+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -+/bin/uname -X = `(/bin/uname -X) 2>/dev/null` -+ -+hostinfo = `(hostinfo) 2>/dev/null` -+/bin/universe = `(/bin/universe) 2>/dev/null` -+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -+/bin/arch = `(/bin/arch) 2>/dev/null` -+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` -+ -+UNAME_MACHINE = ${UNAME_MACHINE} -+UNAME_RELEASE = ${UNAME_RELEASE} -+UNAME_SYSTEM = ${UNAME_SYSTEM} -+UNAME_VERSION = ${UNAME_VERSION} -+EOF - - exit 1 -+ -+# Local variables: -+# eval: (add-hook 'write-file-hooks 'time-stamp) -+# time-stamp-start: "timestamp='" -+# time-stamp-format: "%:y-%02m-%02d" -+# time-stamp-end: "'" -+# End: -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/config.h.in fdutils/config.h.in ---- fdutils-5.4/config.h.in Fri Jul 2 23:37:12 1999 -+++ fdutils/config.h.in Mon May 21 00:24:53 2001 -@@ -14,3 +14,6 @@ - - /* Define if you have the <linux/xia_fs.h> header file. */ - #undef HAVE_LINUX_XIA_FS_H -+ -+/* Define if you have the <sys/sysmacros.h> header file. */ -+#undef HAVE_SYS_SYSMACROS_H -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/config.sub fdutils/config.sub ---- fdutils-5.4/config.sub Sun Mar 2 18:43:27 1997 -+++ fdutils/config.sub Mon May 21 00:24:43 2001 -@@ -1,6 +1,10 @@ - #! /bin/sh --# Configuration validation subroutine script, version 1.1. --# Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. -+# Configuration validation subroutine script. -+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -+# Free Software Foundation, Inc. -+ -+timestamp='2001-05-11' -+ - # This file is (in principle) common to ALL GNU software. - # The presence of a machine in this file suggests that SOME GNU software - # can handle that machine. It does not imply ALL GNU software can. -@@ -25,6 +29,8 @@ - # configuration script generated by Autoconf, you may include it under - # the same distribution terms that you use for the rest of that program. - -+# Please send patches to <config-patches@gnu.org>. -+# - # Configuration subroutine to validate and canonicalize a configuration type. - # Supply the specified configuration type as an argument. - # If it is invalid, we print an error message on stderr and exit with code 1. -@@ -45,30 +51,73 @@ - # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM - # It is wrong to echo any other type of specification. - --if [ x$1 = x ] --then -- echo Configuration name missing. 1>&2 -- echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 -- echo "or $0 ALIAS" 1>&2 -- echo where ALIAS is a recognized configuration type. 1>&2 -- exit 1 --fi -+me=`echo "$0" | sed -e 's,.*/,,'` - --# First pass through any local machine types. --case $1 in -- *local*) -- echo $1 -- exit 0 -- ;; -- *) -- ;; -+usage="\ -+Usage: $0 [OPTION] CPU-MFR-OPSYS -+ $0 [OPTION] ALIAS -+ -+Canonicalize a configuration name. -+ -+Operation modes: -+ -h, --help print this help, then exit -+ -t, --time-stamp print date of last modification, then exit -+ -v, --version print version number, then exit -+ -+Report bugs and patches to <config-patches@gnu.org>." -+ -+version="\ -+GNU config.sub ($timestamp) -+ -+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -+Free Software Foundation, Inc. -+ -+This is free software; see the source for copying conditions. There is NO -+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -+ -+help=" -+Try \`$me --help' for more information." -+ -+# Parse command line -+while test $# -gt 0 ; do -+ case $1 in -+ --time-stamp | --time* | -t ) -+ echo "$timestamp" ; exit 0 ;; -+ --version | -v ) -+ echo "$version" ; exit 0 ;; -+ --help | --h* | -h ) -+ echo "$usage"; exit 0 ;; -+ -- ) # Stop option processing -+ shift; break ;; -+ - ) # Use stdin as input. -+ break ;; -+ -* ) -+ echo "$me: invalid option $1$help" -+ exit 1 ;; -+ -+ *local*) -+ # First pass through any local machine types. -+ echo $1 -+ exit 0;; -+ -+ * ) -+ break ;; -+ esac -+done -+ -+case $# in -+ 0) echo "$me: missing argument$help" >&2 -+ exit 1;; -+ 1) ;; -+ *) echo "$me: too many arguments$help" >&2 -+ exit 1;; - esac - - # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). - # Here we must recognize all the valid KERNEL-OS combinations. - maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` - case $maybe_os in -- linux-gnu*) -+ nto-qnx* | linux-gnu* | storm-chaos* | os2-emx*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; -@@ -94,15 +143,25 @@ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -- -apple) -+ -apple | -axis) - os= - basic_machine=$1 - ;; -+ -sim | -cisco | -oki | -wec | -winbond) -+ os= -+ basic_machine=$1 -+ ;; -+ -scout) -+ ;; -+ -wrs) -+ os=-vxworks -+ basic_machine=$1 -+ ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco5) -- os=sco3.2v5 -+ os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) -@@ -121,6 +180,9 @@ - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; -+ -udk*) -+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -+ ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -@@ -143,25 +205,50 @@ - -psos*) - os=-psos - ;; -+ -mint | -mint[0-9]*) -+ basic_machine=m68k-atari -+ os=-mint -+ ;; - esac - - # Decode aliases for certain CPU-COMPANY combinations. - case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. -- tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \ -- | arme[lb] | pyramid \ -- | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \ -- | alpha | we32k | ns16k | clipper | i370 | sh \ -- | powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \ -- | pdp11 | mips64el | mips64orion | mips64orionel \ -- | sparc | sparclet | sparclite | sparc64) -+ tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \ -+ | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \ -+ | pyramid | mn10200 | mn10300 | tron | a29k \ -+ | 580 | i960 | h8300 \ -+ | x86 | ppcbe | mipsbe | mipsle | shbe | shle \ -+ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ -+ | hppa64 \ -+ | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ -+ | alphaev6[78] \ -+ | we32k | ns16k | clipper | i370 | sh | sh[34] \ -+ | powerpc | powerpcle \ -+ | 1750a | dsp16xx | pdp10 | pdp11 \ -+ | mips16 | mips64 | mipsel | mips64el \ -+ | mips64orion | mips64orionel | mipstx39 | mipstx39el \ -+ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ -+ | mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \ -+ | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \ -+ | v850 | c4x \ -+ | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \ -+ | pj | pjl | h8500 | z8k) - basic_machine=$basic_machine-unknown - ;; -+ m6811 | m68hc11 | m6812 | m68hc12) -+ # Motorola 68HC11/12. -+ basic_machine=$basic_machine-unknown -+ os=-none -+ ;; -+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | w65 | z8k) -+ ;; -+ - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. -- i[3456]86) -+ i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. -@@ -170,23 +257,52 @@ - exit 1 - ;; - # Recognize the basic CPU types with company name. -- vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \ -- | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \ -- | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \ -- | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \ -- | hppa-* | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \ -- | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \ -- | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \ -- | mips64el-* | mips64orion-* | mips64orionel-* | f301-*) -+ # FIXME: clean up the formatting here. -+ vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ -+ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \ -+ | arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \ -+ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ -+ | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ -+ | xmp-* | ymp-* \ -+ | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \ -+ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ -+ | hppa2.0n-* | hppa64-* \ -+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ -+ | alphaev6[78]-* \ -+ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ -+ | clipper-* | orion-* \ -+ | sparclite-* | pdp10-* | pdp11-* | sh-* | sh[34]-* | sh[34]eb-* \ -+ | powerpc-* | powerpcle-* | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \ -+ | mips16-* | mips64-* | mipsel-* \ -+ | mips64el-* | mips64orion-* | mips64orionel-* \ -+ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ -+ | mipstx39-* | mipstx39el-* | mcore-* \ -+ | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \ -+ | [cjt]90-* \ -+ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ -+ | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \ -+ | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. -+ 386bsd) -+ basic_machine=i386-unknown -+ os=-bsd -+ ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; -+ a29khif) -+ basic_machine=a29k-amd -+ os=-udi -+ ;; -+ adobe68k) -+ basic_machine=m68010-adobe -+ os=-scout -+ ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; -@@ -202,20 +318,24 @@ - os=-sysv - ;; - amiga | amiga-*) -- basic_machine=m68k-cbm -+ basic_machine=m68k-unknown - ;; -- amigados) -- basic_machine=m68k-cbm -- os=-amigados -+ amigaos | amigados) -+ basic_machine=m68k-unknown -+ os=-amigaos - ;; - amigaunix | amix) -- basic_machine=m68k-cbm -+ basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; -+ apollo68bsd) -+ basic_machine=m68k-apollo -+ os=-bsd -+ ;; - aux) - basic_machine=m68k-apple - os=-aux -@@ -252,13 +372,16 @@ - basic_machine=cray2-cray - os=-unicos - ;; -- [ctj]90-cray) -- basic_machine=c90-cray -+ [cjt]90) -+ basic_machine=${basic_machine}-cray - os=-unicos - ;; - crds | unos) - basic_machine=m68k-crds - ;; -+ cris | cris-* | etrax*) -+ basic_machine=cris-axis -+ ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; -@@ -292,6 +415,10 @@ - encore | umax | mmax) - basic_machine=ns32k-encore - ;; -+ es1800 | OSE68k | ose68k | ose | OSE) -+ basic_machine=m68k-ericsson -+ os=-ose -+ ;; - fx2800) - basic_machine=i860-alliant - ;; -@@ -302,6 +429,10 @@ - basic_machine=tron-gmicro - os=-sysv - ;; -+ go32) -+ basic_machine=i386-pc -+ os=-go32 -+ ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 -@@ -310,6 +441,14 @@ - basic_machine=h8300-hitachi - os=-hms - ;; -+ h8300xray) -+ basic_machine=h8300-hitachi -+ os=-xray -+ ;; -+ h8500hms) -+ basic_machine=h8500-hitachi -+ os=-hms -+ ;; - harris) - basic_machine=m88k-harris - os=-sysv3 -@@ -325,13 +464,30 @@ - basic_machine=m68k-hp - os=-hpux - ;; -+ hp3k9[0-9][0-9] | hp9[0-9][0-9]) -+ basic_machine=hppa1.0-hp -+ ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; -- hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) -+ hp9k6[0-9][0-9] | hp6[0-9][0-9]) -+ basic_machine=hppa1.0-hp -+ ;; -+ hp9k7[0-79][0-9] | hp7[0-79][0-9]) -+ basic_machine=hppa1.1-hp -+ ;; -+ hp9k78[0-9] | hp78[0-9]) -+ # FIXME: really hppa2.0-hp -+ basic_machine=hppa1.1-hp -+ ;; -+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) -+ # FIXME: really hppa2.0-hp -+ basic_machine=hppa1.1-hp -+ ;; -+ hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) -@@ -340,27 +496,42 @@ - hppa-next) - os=-nextstep3 - ;; -+ hppaosf) -+ basic_machine=hppa1.1-hp -+ os=-osf -+ ;; -+ hppro) -+ basic_machine=hppa1.1-hp -+ os=-proelf -+ ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm -- os=-mvs - ;; - # I'm not sure what "Sysv32" means. Should this be sysv3.2? -- i[3456]86v32) -+ i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; -- i[3456]86v4*) -+ i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; -- i[3456]86v) -+ i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; -- i[3456]86sol2) -+ i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; -+ i386mach) -+ basic_machine=i386-mach -+ os=-mach -+ ;; -+ i386-vsta | vsta) -+ basic_machine=i386-unknown -+ os=-vsta -+ ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in -@@ -386,19 +557,59 @@ - basic_machine=ns32k-utek - os=-sysv - ;; -+ mingw32) -+ basic_machine=i386-pc -+ os=-mingw32 -+ ;; - miniframe) - basic_machine=m68000-convergent - ;; -+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) -+ basic_machine=m68k-atari -+ os=-mint -+ ;; -+ mipsel*-linux*) -+ basic_machine=mipsel-unknown -+ os=-linux-gnu -+ ;; -+ mips*-linux*) -+ basic_machine=mips-unknown -+ os=-linux-gnu -+ ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; -+ mmix*) -+ basic_machine=mmix-knuth -+ os=-mmixware -+ ;; -+ monitor) -+ basic_machine=m68k-rom68k -+ os=-coff -+ ;; -+ msdos) -+ basic_machine=i386-pc -+ os=-msdos -+ ;; -+ mvs) -+ basic_machine=i370-ibm -+ os=-mvs -+ ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; -+ netbsd386) -+ basic_machine=i386-unknown -+ os=-netbsd -+ ;; -+ netwinder) -+ basic_machine=armv4l-rebel -+ os=-linux -+ ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos -@@ -411,6 +622,10 @@ - basic_machine=mips-sony - os=-newsos - ;; -+ necv70) -+ basic_machine=v70-nec -+ os=-sysv -+ ;; - next | m*-next ) - basic_machine=m68k-next - case $os in -@@ -436,9 +651,32 @@ - basic_machine=i960-intel - os=-nindy - ;; -+ mon960) -+ basic_machine=i960-intel -+ os=-mon960 -+ ;; -+ nonstopux) -+ basic_machine=mips-compaq -+ os=-nonstopux -+ ;; - np1) - basic_machine=np1-gould - ;; -+ nsr-tandem) -+ basic_machine=nsr-tandem -+ ;; -+ op50n-* | op60c-*) -+ basic_machine=hppa1.1-oki -+ os=-proelf -+ ;; -+ OSE68000 | ose68000) -+ basic_machine=m68000-ericsson -+ os=-ose -+ ;; -+ os68k) -+ basic_machine=m68k-none -+ os=-os68k -+ ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 -@@ -456,30 +694,28 @@ - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; -- pentium | p5) -- basic_machine=i586-intel -+ pentium | p5 | k5 | k6 | nexgen) -+ basic_machine=i586-pc -+ ;; -+ pentiumpro | p6 | 6x86 | athlon) -+ basic_machine=i686-pc - ;; -- pentiumpro | p6) -- basic_machine=i686-intel -+ pentiumii | pentium2) -+ basic_machine=i686-pc - ;; -- pentium-* | p5-*) -+ pentium-* | p5-* | k5-* | k6-* | nexgen-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; -- pentiumpro-* | p6-*) -+ pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; -- k5) -- # We don't have specific support for AMD's K5 yet, so just call it a Pentium -- basic_machine=i586-amd -- ;; -- nexen) -- # We don't have specific support for Nexgen yet, so just call it a Pentium -- basic_machine=i586-nexgen -+ pentiumii-* | pentium2-*) -+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; -- power) basic_machine=rs6000-ibm -+ power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; -@@ -494,12 +730,24 @@ - ps2) - basic_machine=i386-ibm - ;; -+ pw32) -+ basic_machine=i586-unknown -+ os=-pw32 -+ ;; -+ rom68k) -+ basic_machine=m68k-rom68k -+ os=-coff -+ ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; -+ sa29200) -+ basic_machine=a29k-amd -+ os=-udi -+ ;; - sequent) - basic_machine=i386-sequent - ;; -@@ -507,6 +755,10 @@ - basic_machine=sh-hitachi - os=-hms - ;; -+ sparclite-wrs) -+ basic_machine=sparclite-wrs -+ os=-vxworks -+ ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 -@@ -514,6 +766,13 @@ - spur) - basic_machine=spur-unknown - ;; -+ st2000) -+ basic_machine=m68k-tandem -+ ;; -+ stratus) -+ basic_machine=i860-stratus -+ os=-sysv4 -+ ;; - sun2) - basic_machine=m68000-sun - ;; -@@ -554,10 +813,28 @@ - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; -+ sv1) -+ basic_machine=sv1-cray -+ os=-unicos -+ ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; -+ t3e) -+ basic_machine=t3e-cray -+ os=-unicos -+ ;; -+ tic54x | c54x*) -+ basic_machine=tic54x-unknown -+ os=-coff -+ ;; -+ tx39) -+ basic_machine=mipstx39-unknown -+ ;; -+ tx39el) -+ basic_machine=mipstx39el-unknown -+ ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; -@@ -569,6 +846,10 @@ - basic_machine=a29k-nyu - os=-sym1 - ;; -+ v810 | necv810) -+ basic_machine=v810-nec -+ os=-none -+ ;; - vaxv) - basic_machine=vax-dec - os=-sysv -@@ -577,7 +858,7 @@ - basic_machine=vax-dec - os=-vms - ;; -- vpp*|vx|vx-*) -+ vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) -@@ -592,6 +873,14 @@ - basic_machine=a29k-wrs - os=-vxworks - ;; -+ w65*) -+ basic_machine=w65-wdc -+ os=-none -+ ;; -+ w89k-*) -+ basic_machine=hppa1.1-winbond -+ os=-proelf -+ ;; - xmp) - basic_machine=xmp-cray - os=-unicos -@@ -599,6 +888,10 @@ - xps | xps100) - basic_machine=xps100-honeywell - ;; -+ z8k-*-coff) -+ basic_machine=z8k-unknown -+ os=-sim -+ ;; - none) - basic_machine=none-none - os=-none -@@ -606,8 +899,21 @@ - - # Here we handle the default manufacturer of certain CPU types. It is in - # some cases the only manufacturer, in others, it is the most popular. -+ w89k) -+ basic_machine=hppa1.1-winbond -+ ;; -+ op50n) -+ basic_machine=hppa1.1-oki -+ ;; -+ op60c) -+ basic_machine=hppa1.1-oki -+ ;; - mips) -- basic_machine=mips-mips -+ if [ x$os = x-linux-gnu ]; then -+ basic_machine=mips-unknown -+ else -+ basic_machine=mips-mips -+ fi - ;; - romp) - basic_machine=romp-ibm -@@ -618,13 +924,20 @@ - vax) - basic_machine=vax-dec - ;; -+ pdp10) -+ # there are many clones, so DEC is not a safe bet -+ basic_machine=pdp10-unknown -+ ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; -- sparc) -+ sh3 | sh4) -+ basic_machine=sh-unknown -+ ;; -+ sparc | sparcv9 | sparcv9b) - basic_machine=sparc-sun - ;; - cydra) -@@ -636,6 +949,19 @@ - orion105) - basic_machine=clipper-highlevel - ;; -+ mac | mpw | mac-mpw) -+ basic_machine=m68k-apple -+ ;; -+ pmac | pmac-mpw) -+ basic_machine=powerpc-apple -+ ;; -+ c4x*) -+ basic_machine=c4x-none -+ os=-coff -+ ;; -+ *-unknown) -+ # Make sure to match an already-canonicalized machine name. -+ ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 -@@ -668,9 +994,12 @@ - -solaris) - os=-solaris2 - ;; -- -unixware* | svr4*) -+ -svr4*) - os=-sysv4 - ;; -+ -unixware*) -+ os=-sysv4.2uw -+ ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; -@@ -681,19 +1010,42 @@ - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ -- | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \ -+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ -+ | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ -- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ -+ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ -- | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ -- | -linux-gnu* | -uxpv*) -+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ -+ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ -+ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ -+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ -+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; -+ -qnx*) -+ case $basic_machine in -+ x86-* | i*86-*) -+ ;; -+ *) -+ os=-nto$os -+ ;; -+ esac -+ ;; -+ -nto*) -+ os=-nto-qnx -+ ;; -+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ -+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ -+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) -+ ;; -+ -mac*) -+ os=`echo $os | sed -e 's|mac|macos|'` -+ ;; - -linux*) -- os=`echo $os | sed -e 's|linux|linux|'` -+ os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` -@@ -701,6 +1053,12 @@ - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; -+ -opened*) -+ os=-openedition -+ ;; -+ -wince*) -+ os=-wince -+ ;; - -osfrose*) - os=-osfrose - ;; -@@ -716,12 +1074,18 @@ - -acis*) - os=-aos - ;; -+ -386bsd) -+ os=-bsd -+ ;; - -ctix* | -uts*) - os=-sysv - ;; - -ns2 ) - os=-nextstep2 - ;; -+ -nsk*) -+ os=-nsk -+ ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` -@@ -747,9 +1111,18 @@ - # This must come after -sysvr4. - -sysv*) - ;; -+ -ose*) -+ os=-ose -+ ;; -+ -es1800*) -+ os=-ose -+ ;; - -xenix) - os=-xenix - ;; -+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) -+ os=-mint -+ ;; - -none) - ;; - *) -@@ -775,9 +1148,15 @@ - *-acorn) - os=-riscix1.2 - ;; -+ arm*-rebel) -+ os=-linux -+ ;; - arm*-semi) - os=-aout - ;; -+ pdp10-*) -+ os=-tops20 -+ ;; - pdp11-*) - os=-none - ;; -@@ -796,15 +1175,36 @@ - # default. - # os=-sunos4 - ;; -+ m68*-cisco) -+ os=-aout -+ ;; -+ mips*-cisco) -+ os=-elf -+ ;; -+ mips*-*) -+ os=-elf -+ ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; -+ *-be) -+ os=-beos -+ ;; - *-ibm) - os=-aix - ;; -+ *-wec) -+ os=-proelf -+ ;; -+ *-winbond) -+ os=-proelf -+ ;; -+ *-oki) -+ os=-proelf -+ ;; - *-hp) - os=-hpux - ;; -@@ -815,7 +1215,7 @@ - os=-sysv - ;; - *-cbm) -- os=-amigados -+ os=-amigaos - ;; - *-dg) - os=-dgux -@@ -865,9 +1265,21 @@ - *-masscomp) - os=-rtu - ;; -- f301-fujitsu) -+ f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; -+ *-rom68k) -+ os=-coff -+ ;; -+ *-*bug) -+ os=-coff -+ ;; -+ *-apple) -+ os=-macos -+ ;; -+ *-atari*) -+ os=-mint -+ ;; - *) - os=-none - ;; -@@ -889,9 +1301,15 @@ - -aix*) - vendor=ibm - ;; -+ -beos*) -+ vendor=be -+ ;; - -hpux*) - vendor=hp - ;; -+ -mpeix*) -+ vendor=hp -+ ;; - -hiux*) - vendor=hitachi - ;; -@@ -907,7 +1325,7 @@ - -genix*) - vendor=ns - ;; -- -mvs*) -+ -mvs* | -opened*) - vendor=ibm - ;; - -ptx*) -@@ -919,9 +1337,26 @@ - -aux*) - vendor=apple - ;; -+ -hms*) -+ vendor=hitachi -+ ;; -+ -mpw* | -macos*) -+ vendor=apple -+ ;; -+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) -+ vendor=atari -+ ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; - esac - - echo $basic_machine$os -+exit 0 -+ -+# Local variables: -+# eval: (add-hook 'write-file-hooks 'time-stamp) -+# time-stamp-start: "timestamp='" -+# time-stamp-format: "%:y-%02m-%02d" -+# time-stamp-end: "'" -+# End: -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/configure fdutils/configure ---- fdutils-5.4/configure Fri Jul 2 23:37:09 1999 -+++ fdutils/configure Mon May 21 00:24:49 2001 -@@ -1250,7 +1250,7 @@ - esac - - --for ac_hdr in linux/ext_fs.h linux/xia_fs.h -+for ac_hdr in linux/ext_fs.h linux/xia_fs.h sys/sysmacros.h - do - ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` - echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/configure.in fdutils/configure.in ---- fdutils-5.4/configure.in Thu Jul 1 19:22:51 1999 -+++ fdutils/configure.in Mon May 21 00:24:21 2001 -@@ -18,7 +18,7 @@ - AC_C_CONST - AC_C_INLINE - --AC_CHECK_HEADERS(linux/ext_fs.h linux/xia_fs.h) -+AC_CHECK_HEADERS(linux/ext_fs.h linux/xia_fs.h sys/sysmacros.h) - - dnl Make fdmount accessible by the floppy group only - undefine([fdmount-floppy-only])dnl -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/README fdutils/doc/README ---- fdutils-5.4/doc/README Thu Jul 1 19:43:45 1999 -+++ fdutils/doc/README Mon Jun 11 22:26:36 2001 -@@ -171,7 +171,7 @@ - disks and also Commodore 1581 disks. Please get Michael Haardt's - documentation on floppy drives for a detailed description of those - formats. This can be ftp'ed from --ftp://cantor.informatik.rwth-aachen.de/pub/linux/floppy.ps -+http://www.moria.de/~michael/floppy/floppy.ps - - Commodore 1581 disks are not yet described in this documentation. - Use 'setfdprm /dev/fd0 1600 10 2 80 2 0x2A 0x02 0xDF 0x2E' to use -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/acronyms.texi fdutils/doc/acronyms.texi ---- fdutils-5.4/doc/acronyms.texi Sat May 27 18:37:00 2000 -+++ fdutils/doc/acronyms.texi Mon Jun 11 22:23:31 2001 -@@ -100,7 +100,7 @@ - disks, i.e. virtually all disks that are available today. The PC - hardware can only read MFM and FM disks. The doc at: - @example --ftp://cantor.informatik.rwth-aachen.de/pub/linux/floppy.ps -+http://www.moria.de/~michael/floppy/floppy.ps - @end example - contains more detailed information about FM and MFM encoding. - -@@ -108,7 +108,7 @@ - FM is a low level encoding of disk data. It was used for SD disks, and - is now considered to be obsolete. The doc at: - @example --ftp://cantor.informatik.rwth-aachen.de/pub/linux/floppy.ps -+http://www.moria.de/~michael/floppy/floppy.ps - @end example - contains more detailed information about FM and MFM encoding. - -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/diskd.1 fdutils/doc/diskd.1 ---- fdutils-5.4/doc/diskd.1 Fri Jun 2 22:28:27 2000 -+++ fdutils/doc/diskd.1 Mon Jun 11 22:22:46 2001 -@@ -1,4 +1,4 @@ --.TH diskd 1 "02jun00" fdutils-5.4 -+.TH diskd 1 "11Jun01" fdutils-5.4 - .SH Name - diskd - disk daemon; wait for disk to be inserted - '\" t -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/diskseekd.1 fdutils/doc/diskseekd.1 ---- fdutils-5.4/doc/diskseekd.1 Fri Jun 2 22:28:27 2000 -+++ fdutils/doc/diskseekd.1 Mon Jun 11 22:22:46 2001 -@@ -1,4 +1,4 @@ --.TH diskseekd 1 "02jun00" fdutils-5.4 -+.TH diskseekd 1 "11Jun01" fdutils-5.4 - .SH Name - diskseek, diskseekd - disk seek daemon; simulates Messy Dos' drive cleaning effect - '\" t -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/fd.4 fdutils/doc/fd.4 ---- fdutils-5.4/doc/fd.4 Fri Jul 2 23:44:15 1999 -+++ fdutils/doc/fd.4 Mon Jun 11 22:23:59 2001 -@@ -1,7 +1,7 @@ - '\" t - .\"{{{}}} - .\"{{{ Notes --.\" Copyright (c) 1993 Michael Haardt (michael@cantor.informatik.rwth-aachen.de) -+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de) - .\" and 1994,1995, 1997 Alain Knaff (alain@linux.lu) - .\" - .\" This is free documentation; you can redistribute it and/or -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/fdmount.1 fdutils/doc/fdmount.1 ---- fdutils-5.4/doc/fdmount.1 Fri Jun 2 22:28:27 2000 -+++ fdutils/doc/fdmount.1 Mon Jun 11 22:22:46 2001 -@@ -1,4 +1,4 @@ --.TH fdmount 1 "02jun00" fdutils-5.4 -+.TH fdmount 1 "11Jun01" fdutils-5.4 - .SH Name - fdmount - Floppy disk mount utility - '\" t -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/fdrawcmd.1 fdutils/doc/fdrawcmd.1 ---- fdutils-5.4/doc/fdrawcmd.1 Fri Jun 2 22:28:27 2000 -+++ fdutils/doc/fdrawcmd.1 Mon Jun 11 22:22:46 2001 -@@ -1,4 +1,4 @@ --.TH fdrawcmd 1 "02jun00" fdutils-5.4 -+.TH fdrawcmd 1 "11Jun01" fdutils-5.4 - .SH Name - fdrawcmd - send raw commands to the floppy disk controller - '\" t -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/floppycontrol.1 fdutils/doc/floppycontrol.1 ---- fdutils-5.4/doc/floppycontrol.1 Fri Jun 2 22:28:27 2000 -+++ fdutils/doc/floppycontrol.1 Mon Jun 11 22:22:46 2001 -@@ -1,4 +1,4 @@ --.TH floppycontrol 1 "02jun00" fdutils-5.4 -+.TH floppycontrol 1 "11Jun01" fdutils-5.4 - .SH Name - floppycontrol - floppy driver configuration utility - '\" t -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/floppymeter.1 fdutils/doc/floppymeter.1 ---- fdutils-5.4/doc/floppymeter.1 Fri Jun 2 22:28:27 2000 -+++ fdutils/doc/floppymeter.1 Mon Jun 11 22:22:46 2001 -@@ -1,4 +1,4 @@ --.TH floppymeter 1 "02jun00" fdutils-5.4 -+.TH floppymeter 1 "11Jun01" fdutils-5.4 - .SH Name - floppymeter - measure raw capacity and exact rotation speed of floppy drive - '\" t -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/format2.texi fdutils/doc/format2.texi ---- fdutils-5.4/doc/format2.texi Fri Sep 19 21:01:19 1997 -+++ fdutils/doc/format2.texi Mon Jun 11 21:59:18 2001 -@@ -157,7 +157,7 @@ - on floppy drives for a detailed description of those formats. This can - be ftp'ed from the following location: - @example --ftp://cantor.informatik.rwth-aachen.de/pub/linux/floppy.ps -+http://www.moria.de/~michael/floppy/ - @end example - - Commodore 1581 disks are not yet described in this documentation. Use -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/getfdprm.1 fdutils/doc/getfdprm.1 ---- fdutils-5.4/doc/getfdprm.1 Fri Jun 2 22:28:27 2000 -+++ fdutils/doc/getfdprm.1 Mon Jun 11 22:22:46 2001 -@@ -1,4 +1,4 @@ --.TH getfdprm 1 "02jun00" fdutils-5.4 -+.TH getfdprm 1 "11Jun01" fdutils-5.4 - .SH Name - getfdprm - print the current format information - '\" t -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/makefloppies.1 fdutils/doc/makefloppies.1 ---- fdutils-5.4/doc/makefloppies.1 Fri Jun 2 22:28:27 2000 -+++ fdutils/doc/makefloppies.1 Mon Jun 11 22:22:46 2001 -@@ -1,4 +1,4 @@ --.TH makefloppies 1 "02jun00" fdutils-5.4 -+.TH makefloppies 1 "11Jun01" fdutils-5.4 - .SH Name - MAKEFLOPPIES - Creates the default floppy device nodes. - '\" t -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/setfdprm.1 fdutils/doc/setfdprm.1 ---- fdutils-5.4/doc/setfdprm.1 Fri Jun 2 22:28:27 2000 -+++ fdutils/doc/setfdprm.1 Mon Jun 11 22:22:46 2001 -@@ -1,4 +1,4 @@ --.TH setfdprm 1 "02jun00" fdutils-5.4 -+.TH setfdprm 1 "11Jun01" fdutils-5.4 - .SH Name - setfdprm - sets user-provided floppy disk parameters - '\" t -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/superformat.1 fdutils/doc/superformat.1 ---- fdutils-5.4/doc/superformat.1 Fri Jun 2 22:28:27 2000 -+++ fdutils/doc/superformat.1 Mon Jun 11 22:22:46 2001 -@@ -1,4 +1,4 @@ --.TH superformat 1 "02jun00" fdutils-5.4 -+.TH superformat 1 "11Jun01" fdutils-5.4 - .SH Name - superformat - format floppies - '\" t -@@ -258,14 +258,19 @@ - spins, and on how much time is needed to change the head or the track. - .TP - \&\fR\&\f(CW--absolute_skew\ \fIabsolute-skew\fR\&\f(CW\fR\ --Set the absolute skew. (The skew value used for the first formatted --track) -+.IP -+Set the absolute skew. This skew value is used for the first formatted -+track. It is expressed in raw bytes. - .TP - \&\fR\&\f(CW--head_skew\ \fIhead-skew\fR\&\f(CW\fR\ --Set the head skew. (The skew added for passing from head 0 to head 1) -+.IP -+Set the head skew. This is the skew added for passing from head 0 to -+head 1. It is expressed in raw bytes. - .TP - \&\fR\&\f(CW--track_skew\ \fItrack-skew\fR\&\f(CW\fR\ --Set the track skew. (The skew added for seeking to the next track) -+.IP -+Set the track skew. This is the skew added for seeking to the next -+track. It is expressed in raw bytes. - .PP - Example: (absolute skew=3, head skew=1, track skew=2) - .PP -@@ -287,6 +292,10 @@ - .lp - - \&\fR -+.PP -+N.B. For simplicitie's sake, this example expresses skews in units of -+sectors. In reality, superformat expects the skews to be expressed in -+raw bytes. - .PP - .SH Examples - In all the examples of this section, we assume that drive 0 is a 3 1/2 -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/superformat.texi fdutils/doc/superformat.texi ---- fdutils-5.4/doc/superformat.texi Sat May 27 18:36:51 2000 -+++ fdutils/doc/superformat.texi Mon May 21 00:24:21 2001 -@@ -187,14 +187,20 @@ - - @table @code - @item --absolute_skew @var{absolute-skew} --Set the absolute skew. (The skew value used for the first formatted --track) -+ -+Set the absolute skew. This skew value is used for the first formatted -+track. It is expressed in raw bytes. - - @item --head_skew @var{head-skew} --Set the head skew. (The skew added for passing from head 0 to head 1) -+ -+Set the head skew. This is the skew added for passing from head 0 to -+head 1. It is expressed in raw bytes. - - @item --track_skew @var{track-skew} --Set the track skew. (The skew added for seeking to the next track) -+ -+Set the track skew. This is the skew added for seeking to the next -+track. It is expressed in raw bytes. -+ - @end table - - Example: (absolute skew=3, head skew=1, track skew=2) -@@ -209,6 +215,10 @@ - track 2 head 0: 4,5,6,1,2,3 (skew=3) - track 2 head 1: 3,4,5,6,1,2 (skew=4) - @end example -+ -+N.B. For simplicitie's sake, this example expresses skews in units of -+sectors. In reality, superformat expects the skews to be expressed in -+raw bytes. - - @node Examples, Troubleshooting, Sector skewing options, superformat - @subsection Examples -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/doc/xdfcopy.1 fdutils/doc/xdfcopy.1 ---- fdutils-5.4/doc/xdfcopy.1 Fri Jun 2 22:28:27 2000 -+++ fdutils/doc/xdfcopy.1 Mon Jun 11 22:22:47 2001 -@@ -1,4 +1,4 @@ --.TH xdfcopy 1 "02jun00" fdutils-5.4 -+.TH xdfcopy 1 "11Jun01" fdutils-5.4 - .SH Name - xdfcopy - Program to copy and format Xdf disks in Linux - '\" t -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/src/MAKEFLOPPIES fdutils/src/MAKEFLOPPIES ---- fdutils-5.4/src/MAKEFLOPPIES Wed Aug 21 16:51:25 1996 -+++ fdutils/src/MAKEFLOPPIES Sun Feb 3 20:13:39 2002 -@@ -12,6 +12,9 @@ - set -u - MAJOR=2 - TMPDEVICE=/dev/tmpfloppy$$ -+if [ ! -b /dev/fd0 ] ; then -+ mknod /dev/fd0 b $MAJOR 0 -+fi - if floppycontrol 2>/dev/null; then - FLOPPYCONTROL=yes - else -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/src/diskseekd.c fdutils/src/diskseekd.c ---- fdutils-5.4/src/diskseekd.c Sat May 27 18:50:05 2000 -+++ fdutils/src/diskseekd.c Mon May 21 00:24:21 2001 -@@ -1,4 +1,7 @@ - #include <sys/types.h> -+#ifdef HAVE_SYS_SYSMACROS_H -+# include <sys/sysmacros.h> -+#endif - #include <sys/time.h> - #include <unistd.h> - #include <stdio.h> -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/src/driveprm.c fdutils/src/driveprm.c ---- fdutils-5.4/src/driveprm.c Sat May 27 18:49:58 2000 -+++ fdutils/src/driveprm.c Mon May 21 00:24:21 2001 -@@ -1,3 +1,7 @@ -+#include <sys/types.h> -+#ifdef HAVE_SYS_SYSMACROS_H -+# include <sys/sysmacros.h> -+#endif - #include <stdlib.h> - #include <string.h> - #include <stdio.h> -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/src/fdmount.c fdutils/src/fdmount.c ---- fdutils-5.4/src/fdmount.c Sat May 27 18:50:14 2000 -+++ fdutils/src/fdmount.c Sun Feb 3 23:50:06 2002 -@@ -826,14 +826,9 @@ - - mnt=get_mounted(devname); - if (!mnt) { -- if (!force) { -- errmsg("not mounted"); -- save_unlock_mtab(); -- return -1; -- } -- else { -- msg("not in /etc/mtab, trying to unmount anyway!"); -- } -+ errmsg("not mounted"); -+ save_unlock_mtab(); -+ return -1; - } - else { - mountpoint=mnt->ms.mnt_dir; -@@ -860,7 +855,7 @@ - } - #endif - -- e=umount(devname); -+ e=umount(mountpoint); - if (e) { - errmsg("failed to unmount: %s\n",strerror(errno)); - goto err; -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/src/floppycontrol.c fdutils/src/floppycontrol.c ---- fdutils-5.4/src/floppycontrol.c Sun Apr 2 10:18:15 2000 -+++ fdutils/src/floppycontrol.c Sat Oct 27 13:47:28 2001 -@@ -16,6 +16,11 @@ - #include <getopt.h> - #include "enh_options.h" - -+#ifndef FD_DISK_CHANGED -+#define FD_DISK_CHANGED 0 -+#endif -+ -+ - int eioctl(int fd, int command,void * param, char *emsg) - { - int r; -@@ -381,14 +386,17 @@ - eioctl( fd, FDPOLLDRVSTAT, &drivstat,"get drive state"); - else - eioctl( fd, FDGETDRVSTAT , &drivstat,"get drive state"); -- printf("%s %s %s %s %s\n", -+ -+#ifndef FD_DCL_SEEN -+# define FD_DCL_SEEN 0x40 -+#endif -+ printf("%s %s %s %s %s %s\n", - drivstat.flags & FD_VERIFY ? "verify" : "", - drivstat.flags & FD_DISK_NEWCHANGE ? "newchange" : "", - drivstat.flags & FD_NEED_TWADDLE ? "need_twaddle" : "", --#ifdef FD_DISK_CHANGED - drivstat.flags & FD_DISK_CHANGED ? "disk_changed" : "", --#endif -- drivstat.flags & FD_DISK_WRITABLE ?"disk_writable" : ""); -+ drivstat.flags & FD_DISK_WRITABLE ?"disk_writable" : "", -+ drivstat.flags & FD_DCL_SEEN ?"dcl_seen" : ""); - printf("spinup= %ld\n", drivstat.spinup_date); - printf("select= %ld\n", drivstat.select_date); - printf("first_read= %ld\n", drivstat.first_read_date); -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/src/floppymeter.c fdutils/src/floppymeter.c ---- fdutils-5.4/src/floppymeter.c Sat May 27 18:49:58 2000 -+++ fdutils/src/floppymeter.c Mon May 21 00:24:21 2001 -@@ -1,3 +1,7 @@ -+#include <sys/types.h> -+#ifdef HAVE_SYS_SYSMACROS_H -+# include <sys/sysmacros.h> -+#endif - #include <unistd.h> - #include <stdio.h> - #include <string.h> -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/src/measure.c fdutils/src/measure.c ---- fdutils-5.4/src/measure.c Sat May 27 18:49:57 2000 -+++ fdutils/src/measure.c Sun Feb 3 22:15:54 2002 -@@ -138,6 +138,23 @@ - perror("format"); - exit(1); - } -+ -+ if((raw_cmd.reply[1] & ~0x20) | -+ (raw_cmd.reply[2] & ~0x20)) { -+ int i; -+ -+ if ( raw_cmd.reply[1] & ST1_WP ){ -+ fprintf(stderr,"The disk is write protected\n"); -+ exit(1); -+ } -+ -+ fprintf(stderr, -+ "\nFatal error while measuring raw capacity\n"); -+ for(i=0; i < raw_cmd.reply_count; i++) { -+ fprintf(stderr, "%d: %02x\n", i, raw_cmd.reply[i]); -+ } -+ exit(1); -+ } - } - - -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/src/mediaprm.c fdutils/src/mediaprm.c ---- fdutils-5.4/src/mediaprm.c Wed Mar 22 22:16:53 2000 -+++ fdutils/src/mediaprm.c Mon May 21 00:24:21 2001 -@@ -20,6 +20,7 @@ - FE_TPI, - FE_STRETCH, - FE_SWAPSIDES, -+ FE_ZEROBASED, - - FE_GAP, - -@@ -35,7 +36,8 @@ - FE_DENSITY, - } field_t; - --static int SIZE, SECT, VSECT, HEAD, CYL, TPI, STRETCH, SWAPSIDES, GAP, FM; -+static int SIZE, SECT, VSECT, HEAD, CYL, TPI, STRETCH, SWAPSIDES, ZEROBASED; -+static int GAP, FM; - static int PERP, SSIZE, _2M, DTR, SPEC1, FMT_GAP, DENSITY; - static int ssize; - -@@ -48,6 +50,7 @@ - #define F_TPI FE_TPI,&TPI - #define F_STRETCH FE_STRETCH,&STRETCH - #define F_SWAPSIDES FE_SWAPSIDES,&SWAPSIDES -+#define F_ZEROBASED FE_ZEROBASED,&ZEROBASED - - #define F_GAP FE_GAP,&GAP - -@@ -77,6 +80,7 @@ - { "stretch", F_STRETCH, 0 }, - - { "swapsides", F_SWAPSIDES, 1}, -+ { "zerobased", F_ZEROBASED, 1}, - - { "gap", F_GAP, 0}, - -@@ -234,7 +238,7 @@ - medprm->sect = VSECT / 512; - medprm->head = HEAD; - medprm->track = CYL; -- medprm->stretch = STRETCH | (SWAPSIDES << 1); -+ medprm->stretch = STRETCH | (SWAPSIDES << 1) | (ZEROBASED << 2); - medprm->gap = GAP; - medprm->rate = (FM<<7) | (PERP<<6) | (ssize<<3) | (_2M<<2) | DTR; - medprm->spec1 = SPEC1; -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/src/printfdprm.c fdutils/src/printfdprm.c ---- fdutils-5.4/src/printfdprm.c Mon Jun 9 22:58:15 1997 -+++ fdutils/src/printfdprm.c Mon May 21 00:24:21 2001 -@@ -141,6 +141,12 @@ - print("swapsides",0); - #endif - -+#ifdef FD_ZEROBASED -+ if(ft->stretch & FD_ZEROBASED) -+ print("zerobased",0); -+#endif -+ -+ - if(ft->rate & FD_2M) - print("2M",0); - -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/src/superformat.c fdutils/src/superformat.c ---- fdutils-5.4/src/superformat.c Sat May 27 18:49:57 2000 -+++ fdutils/src/superformat.c Fri Feb 22 11:55:23 2002 -@@ -26,7 +26,10 @@ - cylinders as happen to work (as in 2m). Currently, if too many cylinders - are attempted it won't fail until the very end - */ -- -+#include <sys/types.h> -+#ifdef HAVE_SYS_SYSMACROS_H -+# include <sys/sysmacros.h> -+#endif - #include <unistd.h> - #include <stdio.h> - #include <string.h> -@@ -68,6 +71,7 @@ - char floppy_buffer[24 * 512]; - int verbosity = 3; - static char noverify = 0; -+static char noformat = 0; - static char dosverify = 0; - static char verify_later = 0; - short stretch; -@@ -323,7 +327,8 @@ - raw_cmd.length = nssect * sizeof(format_map_t); - raw_cmd.cmd_count = 6; - raw_cmd.cmd[0] = FD_FORMAT & ~fm_mode; -- raw_cmd.cmd[1] = head << 2 | ( fd->drive & 3); -+ raw_cmd.cmd[1] = (head << 2 | ( fd->drive & 3)) ^ -+ (fd->swapSides ? 4 : 0); - raw_cmd.cmd[2] = fd->sizecode; - raw_cmd.cmd[3] = nssect; - raw_cmd.cmd[4] = fd->fmt_gap; -@@ -355,7 +360,8 @@ - raw_cmd.data = floppy_buffer; - raw_cmd.cmd_count = 9; - raw_cmd.cmd[0] = FD_WRITE & ~fm_mode & ~0x80; -- raw_cmd.cmd[1] = head << 2 | ( fd->drive & 3); -+ raw_cmd.cmd[1] = (head << 2 | ( fd->drive & 3)) ^ -+ (fd->swapSides ? 4 : 0); - raw_cmd.cmd[2] = cylinder; - raw_cmd.cmd[3] = head; - raw_cmd.cmd[4] = cur_sector; -@@ -490,6 +496,7 @@ - - short retries; - short zeroBased=0; -+ short swapSides=0; - int n,rsize; - char *verify_buffer = NULL; - char dosdrive; -@@ -510,6 +517,11 @@ - (void *) &noverify, - "skip verification" }, - -+ { '\0', "print-drive-deviation", 0, EO_TYPE_BYTE, 1, 0, -+ (void *) &noformat, -+ "print deviation, do not format " }, -+ -+ - { 'B', "dosverify", 0, EO_TYPE_BYTE, 1, 0, - (void *) &dosverify, - "verify disk using mbadblocks" }, -@@ -662,11 +674,6 @@ - exit(1); - } - -- fd[0].zeroBased = zeroBased; -- if(zeroBased) -- noverify = 1; -- -- - /* sanity checking */ - if (sizecode < 0 || sizecode >= MAX_SIZECODE) { - fprintf(stderr,"Bad sizecode %d\n", sizecode); -@@ -779,7 +786,16 @@ - break; - } - stretch = geometry.stretch & 1; -- -+#ifdef FD_ZEROBASED -+ if(geometry.stretch & FD_ZEROBASED) { -+ zeroBased = 1; -+ } -+#endif -+#ifdef FD_SWAPSIDES -+ if(geometry.stretch & FD_SWAPSIDES) { -+ swapSides = 1; -+ } -+#endif - mask |= SET_SECTORS | SET_CYLINDERS | - SET_SIZECODE | SET_2M | SET_RATE; - } else { -@@ -831,6 +847,15 @@ - stretch = 0; - } - } -+ -+ fd[0].zeroBased = zeroBased; -+#ifndef FD_ZEROBASED -+ if(zeroBased) { -+ noverify = 1; -+ } -+#endif -+ -+ fd[0].swapSides = swapSides; - - if (cylinders > fd[0].drvprm.tracks) { - fprintf(stderr,"too many cylinder for this drive\n"); -@@ -900,8 +925,9 @@ - fprintf(stderr, - "In order to avoid this time consuming " - "measurement in the future,\n" -- "add the following line to " DRIVEPRMFILE -- ":\ndrive%d: deviation=%d\n", -+ "add the following line to " DRIVEPRMFILE ":\n"); -+ fprintf(stdout, -+ "drive%d: deviation=%d\n", - fd[0].drive, - (fd[0].raw_capacity-old_capacity)*1000000/ - old_capacity); -@@ -914,6 +940,9 @@ - } - } - -+ if(noformat) -+ return 0; -+ - /* FIXME. Why is this needed? */ - fd[0].raw_capacity -= 30; - -@@ -971,7 +1000,11 @@ - parameters.head = heads; - parameters.track = cylinders; - parameters.size = cylinders * heads * sectors; -- parameters.stretch = stretch; -+ parameters.stretch = stretch -+#ifdef FD_ZEROBASED -+ | (zeroBased ? 4 : 0) -+#endif -+ | (swapSides ? 2 : 0); - parameters.gap = fd[0].gap; - if ( !use_2m) - fd0.rate = fd[0].rate; -@@ -1054,7 +1087,7 @@ - ioctl(fd[0].fd, FDFLUSH ); - close(fd[0].fd); - -- if (! (mask & SET_DOSDRIVE ) && fd[0].drive < 2) -+ if (! (mask & SET_DOSDRIVE ) && fd[0].drive < 2 && !zeroBased) - dosdrive = fd[0].drive+'a'; - - if (dosdrive) { -@@ -1085,8 +1118,9 @@ - dosverify = 0; - } - } else { -- fprintf(stderr, -- "\nwarning: mformat not called because DOS drive unknown\n"); -+ if(!zeroBased) -+ fprintf(stderr, -+ "\nwarning: mformat not called because DOS drive unknown\n"); - /*exit(1);*/ - dosverify = 0; - } -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/src/superformat.h fdutils/src/superformat.h ---- fdutils-5.4/src/superformat.h Sun Apr 2 10:09:28 2000 -+++ fdutils/src/superformat.h Mon May 21 00:24:21 2001 -@@ -84,6 +84,7 @@ - int rotations; /* how many time do we have to go over 0 to read - * the track */ - int zeroBased; /* 1 if sector numbering starts at zero */ -+ int swapSides; /* if logical side 0 is on physical 1 and vice-versa */ - }; - - -diff -ur --new-file --exclude-from=/home/aknaff/floppy/exclude fdutils-5.4/src/xdfcopy.c fdutils/src/xdfcopy.c ---- fdutils-5.4/src/xdfcopy.c Sat May 27 18:49:57 2000 -+++ fdutils/src/xdfcopy.c Mon May 21 00:24:21 2001 -@@ -2,6 +2,10 @@ - * Software patents declared unconstitutional, worldwide - */ - -+#include <sys/types.h> -+#ifdef HAVE_SYS_SYSMACROS_H -+# include <sys/sysmacros.h> -+#endif - #include <unistd.h> - #include <stdio.h> - #include <string.h> diff --git a/source/a/floppy/fdutils-5.5-20081027.diff b/source/a/floppy/fdutils-5.5-20081027.diff new file mode 100644 index 000000000..d4033be37 --- /dev/null +++ b/source/a/floppy/fdutils-5.5-20081027.diff @@ -0,0 +1,905 @@ +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/Changelog fdutils/Changelog +--- fdutils-5.5/Changelog 2005-03-03 22:41:49.000000000 +0100 ++++ fdutils/Changelog 2006-02-27 23:01:38.000000000 +0100 +@@ -1,3 +1,5 @@ ++v20060227 ++ * Fixed "zero-based" flag + v20050303 + * Fixed instant verification in superformat (now based on + FDRAWCMD, rather than VFS' read which is plagued by excessive +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/diskd.1 fdutils/doc/diskd.1 +--- fdutils-5.5/doc/diskd.1 2005-03-03 22:55:18.000000000 +0100 ++++ fdutils/doc/diskd.1 2008-10-27 20:53:44.000000000 +0100 +@@ -1,4 +1,4 @@ +-.TH diskd 1 "03Mar05" fdutils-5.5 ++.TH diskd 1 "27oct08" fdutils-5.5 + .SH Name + diskd - disk daemon; wait for disk to be inserted + '\" t +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/diskseekd.1 fdutils/doc/diskseekd.1 +--- fdutils-5.5/doc/diskseekd.1 2005-03-03 22:55:18.000000000 +0100 ++++ fdutils/doc/diskseekd.1 2008-10-27 20:53:44.000000000 +0100 +@@ -1,4 +1,4 @@ +-.TH diskseekd 1 "03Mar05" fdutils-5.5 ++.TH diskseekd 1 "27oct08" fdutils-5.5 + .SH Name + diskseek, diskseekd - disk seek daemon; simulates Messy Dos' drive cleaning effect + '\" t +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/fdmount.1 fdutils/doc/fdmount.1 +--- fdutils-5.5/doc/fdmount.1 2005-03-03 22:55:18.000000000 +0100 ++++ fdutils/doc/fdmount.1 2008-10-27 20:53:45.000000000 +0100 +@@ -1,4 +1,4 @@ +-.TH fdmount 1 "03Mar05" fdutils-5.5 ++.TH fdmount 1 "27oct08" fdutils-5.5 + .SH Name + fdmount - Floppy disk mount utility + '\" t +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/fdrawcmd.1 fdutils/doc/fdrawcmd.1 +--- fdutils-5.5/doc/fdrawcmd.1 2005-03-03 22:55:18.000000000 +0100 ++++ fdutils/doc/fdrawcmd.1 2008-10-27 20:53:45.000000000 +0100 +@@ -1,4 +1,4 @@ +-.TH fdrawcmd 1 "03Mar05" fdutils-5.5 ++.TH fdrawcmd 1 "27oct08" fdutils-5.5 + .SH Name + fdrawcmd - send raw commands to the floppy disk controller + '\" t +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/floppycontrol.1 fdutils/doc/floppycontrol.1 +--- fdutils-5.5/doc/floppycontrol.1 2005-03-03 22:55:18.000000000 +0100 ++++ fdutils/doc/floppycontrol.1 2008-10-27 20:53:45.000000000 +0100 +@@ -1,4 +1,4 @@ +-.TH floppycontrol 1 "03Mar05" fdutils-5.5 ++.TH floppycontrol 1 "27oct08" fdutils-5.5 + .SH Name + floppycontrol - floppy driver configuration utility + '\" t +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/floppymeter.1 fdutils/doc/floppymeter.1 +--- fdutils-5.5/doc/floppymeter.1 2005-03-03 22:55:18.000000000 +0100 ++++ fdutils/doc/floppymeter.1 2008-10-27 20:53:45.000000000 +0100 +@@ -1,4 +1,4 @@ +-.TH floppymeter 1 "03Mar05" fdutils-5.5 ++.TH floppymeter 1 "27oct08" fdutils-5.5 + .SH Name + floppymeter - measure raw capacity and exact rotation speed of floppy drive + '\" t +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/formatlist.texi fdutils/doc/formatlist.texi +--- fdutils-5.5/doc/formatlist.texi 2002-05-02 23:03:31.000000000 +0200 ++++ fdutils/doc/formatlist.texi 2006-02-27 23:08:50.000000000 +0100 +@@ -221,7 +221,7 @@ + setfdprm /dev/fd0H1520 1520 19 2 80 0 0x1b 0 0xcf 0x6c + @end example + +-@strong{Note:} This redefines the geometry for any device node with the ++@strong{NB:} This redefines the geometry for any device node with the + same format number, not just the new node. + + The new geometry is only valid until the next reboot (or removal of the +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/getfdprm.1 fdutils/doc/getfdprm.1 +--- fdutils-5.5/doc/getfdprm.1 2005-03-03 22:55:18.000000000 +0100 ++++ fdutils/doc/getfdprm.1 2008-10-27 20:53:45.000000000 +0100 +@@ -1,4 +1,4 @@ +-.TH getfdprm 1 "03Mar05" fdutils-5.5 ++.TH getfdprm 1 "27oct08" fdutils-5.5 + .SH Name + getfdprm - print the current format information + '\" t +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/makefloppies.1 fdutils/doc/makefloppies.1 +--- fdutils-5.5/doc/makefloppies.1 2005-03-03 22:55:18.000000000 +0100 ++++ fdutils/doc/makefloppies.1 2008-10-27 20:53:45.000000000 +0100 +@@ -1,4 +1,4 @@ +-.TH makefloppies 1 "03Mar05" fdutils-5.5 ++.TH makefloppies 1 "27oct08" fdutils-5.5 + .SH Name + MAKEFLOPPIES - Creates the default floppy device nodes. + '\" t +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/setfdprm.1 fdutils/doc/setfdprm.1 +--- fdutils-5.5/doc/setfdprm.1 2005-03-03 22:55:18.000000000 +0100 ++++ fdutils/doc/setfdprm.1 2008-10-27 20:53:45.000000000 +0100 +@@ -1,4 +1,4 @@ +-.TH setfdprm 1 "03Mar05" fdutils-5.5 ++.TH setfdprm 1 "27oct08" fdutils-5.5 + .SH Name + setfdprm - sets user-provided floppy disk parameters + '\" t +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/superformat.1 fdutils/doc/superformat.1 +--- fdutils-5.5/doc/superformat.1 2005-03-03 22:55:18.000000000 +0100 ++++ fdutils/doc/superformat.1 2008-10-27 20:53:45.000000000 +0100 +@@ -1,4 +1,4 @@ +-.TH superformat 1 "03Mar05" fdutils-5.5 ++.TH superformat 1 "27oct08" fdutils-5.5 + .SH Name + superformat - format floppies + '\" t +@@ -79,7 +79,7 @@ + .in +0.3i + \&\fR\&\f(CWsuperformat [\fR\&\f(CW-D \fIdos-drive\fR\&\f(CW] [\fR\&\f(CW-v \fIverbosity-level\fR\&\f(CW] [\fR\&\f(CW-b \fIbegin-track\fR\&\f(CW] + [\fR\&\f(CW-e \fIend-track\fR\&\f(CW] [\fR\&\f(CW--superverify] [\fR\&\f(CW--dosverify] +-[\fR\&\f(CW--noverify] [\fR\&\f(CW--verify_later] [\fR\&\f(CW--zero-based] ++[\fR\&\f(CW--noverify] [\fR\&\f(CW--verify_later] [\fR\&\f(CW--first-sector-number \fIn\fR\&\f(CW] [\fR\&\f(CW--zero-based] + [\fR\&\f(CW-G \fIformat-gap\fR\&\f(CW] [\fR\&\f(CW-F \fIfinal-gap\fR\&\f(CW] [\fR\&\f(CW-i \fIinterleave\fR\&\f(CW] [\fR\&\f(CW-c \fIchunksize\fR\&\f(CW] + [\fR\&\f(CW-g \fIgap\fR\&\f(CW] [\fR\&\f(CW--absolute-skew \fIabsolute-skew\fR\&\f(CW] [\fR\&\f(CW--head-skew \fIhead-skew\fR\&\f(CW] + [\fR\&\f(CW--track-skew \fItrack-skew\fR\&\f(CW] [\fR\&\f(CW--biggest-last] \fIdrive\fR\&\f(CW [\fImedia-description\fR\&\f(CW] +@@ -237,13 +237,12 @@ + For MSS formats, make sure that the biggest sector is last on the track. + This makes the format more reliable on drives which are out of spec. + .TP ++\&\fR\&\f(CW--first-sector-number\ \fIn\fR\&\f(CW\fR\ ++Formats the disk with sector numbers starting at \fIn\fR, rather than ++1. Certain CP/M boxes or Music synthesizers use this format. ++.TP + \&\fR\&\f(CW--zero-based\fR\ +-Formats the disk with sector numbers starting at 0, rather than +-1. Certain CP/M boxes or Music synthesizers use this format. Those disks +-can currently not be read/written to by the standard Linux read/write +-API; you have to use fdrawcmd to access them. As disk verifying is done +-by this API, verifying is automatically switched off when formatting +-zero-based. ++Shorthand for \fR\&\f(CW--first-sector-number 0\fR + .PP + .SH Sector\ skewing\ options + .PP +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/superformat.texi fdutils/doc/superformat.texi +--- fdutils-5.5/doc/superformat.texi 2002-11-02 14:35:11.000000000 +0100 ++++ fdutils/doc/superformat.texi 2008-10-27 20:53:41.000000000 +0100 +@@ -6,7 +6,7 @@ + @example + @code{superformat} [@code{-D} @var{dos-drive}] [@code{-v} @var{verbosity-level}] [@code{-b} @var{begin-track}] + [@code{-e} @var{end-track}] [@code{--superverify}] [@code{--dosverify}] +-[@code{--noverify}] [@code{--verify_later}] [@code{--zero-based}] ++[@code{--noverify}] [@code{--verify_later}] [@code{--first-sector-number} @var{n}] [@code{--zero-based}] + [@code{-G} @var{format-gap}] [@code{-F} @var{final-gap}] [@code{-i} @var{interleave}] [@code{-c} @var{chunksize}] + [@code{-g} @var{gap}] [@code{--absolute-skew} @var{absolute-skew}] [@code{--head-skew} @var{head-skew}] + [@code{--track-skew} @var{track-skew}] [@code{--biggest-last}] @var{drive} [@var{media-description}] +@@ -162,13 +162,12 @@ + For MSS formats, make sure that the biggest sector is last on the track. + This makes the format more reliable on drives which are out of spec. + ++@item --first-sector-number @var{n} ++Formats the disk with sector numbers starting at @var{n}, rather than ++1. Certain CP/M boxes or Music synthesizers use this format. ++ + @item --zero-based +-Formats the disk with sector numbers starting at 0, rather than +-1. Certain CP/M boxes or Music synthesizers use this format. Those disks +-can currently not be read/written to by the standard Linux read/write +-API; you have to use fdrawcmd to access them. As disk verifying is done +-by this API, verifying is automatically switched off when formatting +-zero-based. ++Shorthand for @code{--first-sector-number 0} + + @end table + +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/doc/xdfcopy.1 fdutils/doc/xdfcopy.1 +--- fdutils-5.5/doc/xdfcopy.1 2005-03-03 22:55:18.000000000 +0100 ++++ fdutils/doc/xdfcopy.1 2008-10-27 20:53:45.000000000 +0100 +@@ -1,4 +1,4 @@ +-.TH xdfcopy 1 "03Mar05" fdutils-5.5 ++.TH xdfcopy 1 "27oct08" fdutils-5.5 + .SH Name + xdfcopy - Program to copy and format Xdf disks in Linux + '\" t +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/calc-format.c fdutils/src/calc-format.c +--- fdutils-5.5/src/calc-format.c 2004-02-28 23:00:28.000000000 +0100 ++++ fdutils/src/calc-format.c 2008-10-27 20:19:20.000000000 +0100 +@@ -10,8 +10,8 @@ + #define SSIZE(j) ( (128<<j) + GAPSIZE(j) + header_size) + + +-static inline int chunks_in_sect(struct params *fd, int i, +- int gap, int chunksize) ++static inline unsigned int chunks_in_sect(struct params *fd, int i, ++ int gap, int chunksize) + { + return (SSIZE(i)-1) / chunksize + 1; + } +@@ -28,22 +28,22 @@ + } + + +-static inline int firstSector(struct params *fd, int i) ++static inline unsigned int firstSector(struct params *fd, int i) + { + if(i>=MAX_SIZECODE-1) +- return 1; ++ return 0; + else + return fd->last_sect[i+1]; + } + +-static inline int lastSector(struct params *fd, int i) ++static inline unsigned int lastSector(struct params *fd, int i) + { + return fd->last_sect[i]; + } + +-static inline int nrSectorsForSize(struct params *fd, int i) ++static inline unsigned int nrSectorsForSize(struct params *fd, int i) + { +- return lastSector(fd, i) - firstSector(fd, i); ++ return lastSector(fd, i) - firstSector(fd, i); + } + + +@@ -93,7 +93,7 @@ + int i; + int nr_sectors; + +- cur_sector = 1; ++ cur_sector = 0; + sizes=0; + for (i=MAX_SIZECODE-1; i>=0; --i) { + if(i > max_sizecode) +@@ -107,7 +107,7 @@ + if(nr_sectors) + sizes++; + } +- fd->dsect = cur_sector-1; /* number of data sectors */ ++ fd->dsect = cur_sector; /* number of data sectors */ + if(sizes > 1) + fd->need_init = 1; + +@@ -264,51 +264,54 @@ + */ + static void calc_sequence(struct params *fd, int tailsect) + { +- int sec_id, cur_sector, i; ++ int sec_id, cur_slot, i; ++ int *occupied = SafeNewArray(fd->dsect, int); ++ int last_slot = fd->dsect - 1; + +- fd->sequence = SafeNewArray(fd->dsect,struct fparm2); +- cur_sector = fd->dsect-1; ++ fd->sequence = SafeNewArray(fd->dsect, struct fparm2); ++ cur_slot = last_slot; + +- /* construct the sequence while working backwards. cur_sector ++ /* construct the sequence while working backwards. cur_slot + * points to the place where the next sector will be placed. + * We place it, then move circularily backwards placing more + * and more sectors */ + sec_id = tailsect; + fd->rotations = 0; + for(i=0; i < fd->dsect; +- i++, cur_sector -= fd->actual_interleave, sec_id--) { +- if (sec_id == 0) +- sec_id = fd->dsect; +- +- if ( cur_sector < 0) { +- cur_sector += fd->dsect; +- if(sec_id != fd->dsect) ++ i++, cur_slot -= fd->actual_interleave, sec_id--) { ++ if (sec_id < 0) ++ sec_id = last_slot; ++ ++ if ( cur_slot < 0) { ++ cur_slot += fd->dsect; ++ if(sec_id != last_slot) + fd->rotations++; + } + + /* slot occupied, look elsewhere */ +- while(fd->sequence[cur_sector].sect ){ +- cur_sector--; +- if ( cur_sector < 0 ) { +- cur_sector += fd->dsect; +- if(sec_id != fd->dsect) ++ while(occupied[cur_slot]) { ++ cur_slot--; ++ if ( cur_slot < 0 ) { ++ cur_slot += fd->dsect; ++ if(sec_id != last_slot) + fd->rotations++; + } + } + + /* place the sector */ +- fd->sequence[cur_sector].sect = sec_id; +- fd->sequence[cur_sector].size = sizeOfSector(fd, sec_id); ++ fd->sequence[cur_slot].sect = sec_id; ++ fd->sequence[cur_slot].size = sizeOfSector(fd, sec_id); ++ occupied[cur_slot] = 1; + } + + /* handle wrap-around between tailsect and tailsect+1 */ +- if(tailsect != fd->dsect) { +- /* always add one rotation, because tailsect+1 cannot be ++ if(tailsect != last_slot) { ++ /* always add one rotation, because tailsect cannot be + * at the last position, thus is necessarily earlyer */ + fd->rotations++; + + if(fd->actual_interleave == 2 && +- cur_sector + fd->actual_interleave == 1) ++ cur_slot + fd->actual_interleave == 1) + /* if we use interleave, and the last sector was + * placed at the first last position, add one + * extra rotation for tailsect+1 following tailsect +@@ -333,11 +336,11 @@ + max_offset = cur_sector; + + /* offset of the starting sector */ +- if ( fd->sequence[i].sect == 1 ) ++ if ( fd->sequence[i].sect == 0 ) + fd->min = cur_sector * fd->chunksize; + + /* offset of the end of the of the highest sector */ +- if (fd->sequence[i].sect == fd->dsect) ++ if (fd->sequence[i].sect == fd->dsect - 1) + track_end = cur_sector * fd->chunksize + + header_size + index_size + + SSIZE(fd->sequence[i].size); +@@ -509,7 +512,7 @@ + fd->min = 0; + + for(i=0; i<sectors; i++){ +- fd->sequence[i].sect = i+1; ++ fd->sequence[i].sect = i; + fd->sequence[i].size = 2; + fd->sequence[i].offset = i; + } +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/fdmount.c fdutils/src/fdmount.c +--- fdutils-5.5/src/fdmount.c 2005-03-03 23:09:16.000000000 +0100 ++++ fdutils/src/fdmount.c 2008-10-27 20:45:50.000000000 +0100 +@@ -629,7 +629,7 @@ + struct mntent ms; + struct floppy_drive_struct drivstat; + char options[80+MAX_OPT]; +- char super[2048]; ++ unsigned char super[2048]; + char *mountpoint; + + strncpy(curdev,devname, sizeof(curdev)); +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/fdutils.h fdutils/src/fdutils.h +--- fdutils-5.5/src/fdutils.h 2002-05-02 23:03:31.000000000 +0200 ++++ fdutils/src/fdutils.h 2008-10-25 22:17:36.000000000 +0200 +@@ -1,4 +1,8 @@ ++#ifndef __FDUTILS_H ++#define __FDUTILS_H ++ + #include <assert.h> ++#include <linux/fd.h> + /* This file contains common structures understood by several of the + * fdutils + */ +@@ -22,3 +26,17 @@ + #define SafeNew(type) ((type *)(safe_malloc(sizeof(type)))) + void *safe_malloc(size_t size); + void *safe_calloc(size_t nmemb, size_t size); ++ ++#ifndef FD_SWAPSIDES ++#define FD_SWAPSIDES 2 ++#endif ++ ++#ifndef FD_ZEROBASED ++#define FD_ZEROBASED 4 ++#endif ++ ++#ifndef FD_SECTBASEMASK ++#define FD_SECTBASEMASK 0x3fc ++#endif ++ ++#endif +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/floppycontrol.c fdutils/src/floppycontrol.c +--- fdutils-5.5/src/floppycontrol.c 2002-11-02 14:36:43.000000000 +0100 ++++ fdutils/src/floppycontrol.c 2008-10-26 09:27:38.000000000 +0100 +@@ -379,7 +379,7 @@ + } + + if (mask & SET_RESET) +- eioctl(fd, FDRESET, (void *)reset_now, "reset"); ++ eioctl(fd, FDRESET, (void *)(long)reset_now, "reset"); + + if (mask & (PRINTSTATE | POLLSTATE) ){ + if ( mask & POLLSTATE ) +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/mediaprm.c fdutils/src/mediaprm.c +--- fdutils-5.5/src/mediaprm.c 2005-03-03 21:51:06.000000000 +0100 ++++ fdutils/src/mediaprm.c 2008-10-27 20:34:09.000000000 +0100 +@@ -21,6 +21,7 @@ + FE_STRETCH, + FE_SWAPSIDES, + FE_ZEROBASED, ++ FE_FIRSTSECTORNUMBER, + + FE_GAP, + +@@ -36,7 +37,7 @@ + FE_DENSITY, + } field_t; + +-static int SIZE, SECT, VSECT, HEAD, CYL, TPI, STRETCH, SWAPSIDES, ZEROBASED; ++static int SIZE, SECT, VSECT, HEAD, CYL, TPI, STRETCH, SWAPSIDES, ZEROBASED, FIRSTSECTORNUMBER=1; + static int GAP, FM; + static int PERP, SSIZE, _2M, DTR, SPEC1, FMT_GAP, DENSITY; + static int ssize; +@@ -51,6 +52,7 @@ + #define F_STRETCH FE_STRETCH,&STRETCH + #define F_SWAPSIDES FE_SWAPSIDES,&SWAPSIDES + #define F_ZEROBASED FE_ZEROBASED,&ZEROBASED ++#define F_FIRSTSECTORNUMBER FE_FIRSTSECTORNUMBER,&FIRSTSECTORNUMBER + + #define F_GAP FE_GAP,&GAP + +@@ -81,6 +83,8 @@ + + { "swapsides", F_SWAPSIDES, 1}, + { "zerobased", F_ZEROBASED, 1}, ++ { "zero-based", F_ZEROBASED, 1}, ++ { "first-sector-number", F_FIRSTSECTORNUMBER, 0}, + + { "gap", F_GAP, 0}, + +@@ -234,11 +238,25 @@ + } + set_field(F_2M,0); + ++ if(mask & (1 << FE_ZEROBASED)) { ++ if((mask & (1 << FE_FIRSTSECTORNUMBER)) && ++ FIRSTSECTORNUMBER != 0) { ++ fprintf(stderr, ++ "Zerobased incompatible with first-sector-number=%d\n", ++ FIRSTSECTORNUMBER); ++ exit(1); ++ } else ++ FIRSTSECTORNUMBER = 0; ++ } else if(! (mask & (1 << FE_FIRSTSECTORNUMBER))) { ++ FIRSTSECTORNUMBER = 1; ++ } ++ + medprm->size = SIZE; + medprm->sect = VSECT / 512; + medprm->head = HEAD; + medprm->track = CYL; +- medprm->stretch = STRETCH | (SWAPSIDES << 1) | (ZEROBASED << 2); ++ medprm->stretch = STRETCH | (SWAPSIDES << 1) | ++ ((1^FIRSTSECTORNUMBER) << 2); + medprm->gap = GAP; + medprm->rate = (FM<<7) | (PERP<<6) | (ssize<<3) | (_2M<<2) | DTR; + medprm->spec1 = SPEC1; +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/mediaprm.lex fdutils/src/mediaprm.lex +--- fdutils-5.5/src/mediaprm.lex 2002-05-02 23:03:31.000000000 +0200 ++++ fdutils/src/mediaprm.lex 2006-02-27 22:56:21.000000000 +0100 +@@ -12,7 +12,7 @@ + %option pointer + + fid [^\"]+ +-vid [A-Za-z_][A-Za-z0-9_]* ++vid [A-Za-z_][A-Za-z0-9_-]* + number (0x[a-zA-Z0-9]+|-?[0-9]+)(KB|k|b)? + + %% +@@ -37,6 +37,8 @@ + } + + swapsides | ++zerobased | ++zero-based | + mss | + 2m | + 2M | +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/msdos_fs.h fdutils/src/msdos_fs.h +--- fdutils-5.5/src/msdos_fs.h 2002-05-02 23:03:31.000000000 +0200 ++++ fdutils/src/msdos_fs.h 2008-10-26 09:27:07.000000000 +0100 +@@ -6,41 +6,41 @@ + #define p packed + + struct msdos_boot_sector { +- char jump[3] p; /* 0 - Boot strap short or near jump */ +- char banner[8] p; /* 3 - Name - can be used to special case ++ char jump[3]; /* 0 - Boot strap short or near jump */ ++ char banner[8]; /* 3 - Name - can be used to special case + partition manager volumes */ + unsigned short sector_size p; /* 11 - bytes per logical sector */ +- unsigned char cluster_size p; /* 13 - sectors/cluster */ ++ unsigned char cluster_size; /* 13 - sectors/cluster */ + unsigned short res_sect p; /* 14 - reserved sectors */ +- unsigned char fats p; /* 16 - number of FATs */ ++ unsigned char fats; /* 16 - number of FATs */ + unsigned short dir_entries p; /* 17 - root directory entries */ + unsigned short sectors p; /* 19 - number of sectors */ +- unsigned char media p; /* 21 - media code (unused) */ ++ unsigned char media; /* 21 - media code (unused) */ + unsigned short fat_length p; /* 22 - sectors/FAT */ + unsigned short secs_track p; /* 24 - sectors per track */ + unsigned short heads p; /* 26 - number of heads */ + unsigned long hidden p; /* 28 - hidden sectors (unused) */ + unsigned long total_sect p; /* 32 - number of sectors (if sectors == 0) */ +- unsigned char physdrive p; /* 36 physical drive ? */ +- unsigned char _reserved p; /* 37 reserved */ +- unsigned char dos4 p; /* 38 DOS > 4.0 diskette */ ++ unsigned char physdrive; /* 36 physical drive ? */ ++ unsigned char _reserved; /* 37 reserved */ ++ unsigned char dos4; /* 38 DOS > 4.0 diskette */ + unsigned long serial p; /* 39 serial number */ +- unsigned char label[11] p; /* 43 disk label */ +- unsigned char fat_type[8] p; /* 54 FAT type */ ++ unsigned char label[11]; /* 43 disk label */ ++ char fat_type[8]; /* 54 FAT type */ + #ifdef USE_2M +- unsigned char res_2m p; /* 62 reserved by 2M */ +- unsigned char CheckSum p; /* 63 2M checksum (not used) */ +- unsigned char fmt_2mf p; /* 64 2MF format version */ +- unsigned char wt p; /* 65 1 if write track after format */ +- unsigned char rate_0 p; /* 66 data transfer rate on track 0 */ +- unsigned char rate_any p; /* 67 data transfer rate on track<>0 */ ++ unsigned char res_2m; /* 62 reserved by 2M */ ++ unsigned char CheckSum; /* 63 2M checksum (not used) */ ++ unsigned char fmt_2mf; /* 64 2MF format version */ ++ unsigned char wt; /* 65 1 if write track after format */ ++ unsigned char rate_0; /* 66 data transfer rate on track 0 */ ++ unsigned char rate_any; /* 67 data transfer rate on track<>0 */ + unsigned short BootP p; /* 68 offset to boot program */ + unsigned short Infp0 p; /* 70 T1: information for track 0 */ + unsigned short InfpX p; /* 72 T2: information for track<>0 */ + unsigned short InfTm p; /* 74 T3: track sectors size table */ +- unsigned char junk[126 - 76] p; /* 76 remaining data */ ++ unsigned char junk[126 - 76]; /* 76 remaining data */ + #else +- unsigned char junk[126 - 62] p; /* 76 remaining data */ ++ unsigned char junk[126 - 62]; /* 76 remaining data */ + #endif + unsigned short bootid p; /* 510 should be 0xAA55 */ + }; +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/printfdprm.c fdutils/src/printfdprm.c +--- fdutils-5.5/src/printfdprm.c 2004-03-13 11:02:45.000000000 +0100 ++++ fdutils/src/printfdprm.c 2008-10-27 00:59:01.000000000 +0100 +@@ -1,5 +1,6 @@ + #include <stdio.h> + #include "printfdprm.h" ++#include "fdutils.h" + + + void print_params(drivedesc_t *drivedesc, +@@ -101,9 +102,9 @@ + print("tpi=48",0); + break; + default: +- if(level >= LEV_ALL || ft->stretch) +- print("stretch=%d", ft->stretch); +- break; ++ if(level >= LEV_ALL || (ft->stretch & 1)) ++ print("stretch=%d", ft->stretch & 1); ++ break; + } + + if(level >= LEV_ALL || ft->size != ft->sect * ft->head * ft->track) +@@ -136,20 +137,20 @@ + if(level >= LEV_EXPL || (ft->track != 80 && ft->track != 40)) + print("cyl=%d", ft->track); + +-#ifdef FD_SWAPSIDES + if(ft->stretch & FD_SWAPSIDES) + print("swapsides",0); +-#endif +- +-#ifdef FD_ZEROBASED +- if(ft->stretch & FD_ZEROBASED) +- print("zerobased",0); +-#endif + ++ if(ft->stretch & FD_SECTBASEMASK) { ++ int firstSectorNumber = ((ft->stretch & FD_SECTBASEMASK)>>2)^1; ++ if(firstSectorNumber > 1) ++ print("first-sector-number=%d",firstSectorNumber); ++ else if(firstSectorNumber==0) ++ print("zero-based",0); ++ } + + if(ft->rate & FD_2M) + print("2M",0); +- ++ + if(level < LEV_ALL && + ft->sect * 4 < (2 << ssize) && ft->sect * 4 % (1 << ssize)) + print("mss", 0); +@@ -163,7 +164,7 @@ + } + + /* useless stuff */ +- if(level >= LEV_MOST) { ++ if(level >= LEV_MOST) { + print("gap=0x%02x", (unsigned char) ft->gap); + print("fmt_gap=0x%02x", (unsigned char) ft->fmt_gap); + } +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/superformat.c fdutils/src/superformat.c +--- fdutils-5.5/src/superformat.c 2005-03-03 22:41:05.000000000 +0100 ++++ fdutils/src/superformat.c 2008-10-27 20:40:47.000000000 +0100 +@@ -296,7 +296,7 @@ + fd += findex[cylinder][head]; + skew = fd->min + lskews[cylinder][head] * fd->chunksize; + assert(skew >= fd->min); +- assert(skew <= fd->max); ++ assert(skew <= fd->max); + } else + skew = 0; + +@@ -305,7 +305,8 @@ + for (i=0; i<fd->dsect; ++i){ + offset = fd->sequence[i].offset + lskews[cylinder][head]; + offset = offset % fd->nssect; +- data[offset].sector = fd->sequence[i].sect - fd->zeroBased; ++ data[offset].sector = ++ fd->sequence[i].sect + fd->firstSectorNumber; + data[offset].size = fd->sequence[i].size; + data[offset].cylinder = cylinder; + data[offset].head = head; +@@ -339,7 +340,7 @@ + raw_cmd.cmd[3] = nssect; + raw_cmd.cmd[4] = fd->fmt_gap; + raw_cmd.cmd[5] = 0; +- raw_cmd.flags = FD_RAW_WRITE | FD_RAW_INTR | FD_RAW_SPIN | ++ raw_cmd.flags = FD_RAW_WRITE | FD_RAW_INTR | FD_RAW_SPIN | + FD_RAW_NEED_SEEK | FD_RAW_NEED_DISK; + raw_cmd.track = cylinder << stretch; + raw_cmd.rate = fd->rate & 0x43; +@@ -363,14 +364,16 @@ + static int rw_track(struct params *fd, int cylinder, int head, int mode) + { + int i; +- int cur_sector; ++ int cur_sector; /* current sector, logical (based on 0) */ + int retries; + struct floppy_raw_cmd raw_cmd; + +- cur_sector = 1 - fd->zeroBased; ++ cur_sector = 0; + + for (i=MAX_SIZECODE-1; i>=0; --i) { +- if ( fd->last_sect[i] <= cur_sector + fd->zeroBased) ++ if ( cur_sector >= fd->last_sect[i] ) ++ /* last sector for size reached, move on to next ++ * sizecode */ + continue; + retries=0; + retry: +@@ -383,32 +386,31 @@ + (fd->swapSides ? 4 : 0); + raw_cmd.cmd[2] = cylinder; + raw_cmd.cmd[3] = head; +- raw_cmd.cmd[4] = cur_sector; ++ raw_cmd.cmd[4] = cur_sector + fd->firstSectorNumber; + raw_cmd.cmd[5] = i; +- raw_cmd.cmd[6] = fd->last_sect[i] - 1 - fd->zeroBased; ++ raw_cmd.cmd[6] = fd->last_sect[i] + fd->firstSectorNumber - 1; + raw_cmd.cmd[7] = fd->gap; + if ( i ) + raw_cmd.cmd[8] = 0xff; + else + raw_cmd.cmd[8] = 0xff; +- raw_cmd.flags = (mode ? FD_RAW_WRITE : FD_RAW_READ) | ++ raw_cmd.flags = (mode ? FD_RAW_WRITE : FD_RAW_READ) | + FD_RAW_INTR | FD_RAW_SPIN | + FD_RAW_NEED_SEEK | FD_RAW_NEED_DISK; + raw_cmd.track = cylinder << stretch; + raw_cmd.rate = fd->rate & 0x43; + +- raw_cmd.length = (fd->last_sect[i] - +- fd->zeroBased - +- cur_sector) * 128 << i; ++ raw_cmd.length = (fd->last_sect[i] - cur_sector) * 128 << i; + /* debugging */ + if (verbosity == 9) + printf("%s %ld sectors of size %d starting at %d\n", + mode ? "writing" : "reading", + raw_cmd.length / 512, i, cur_sector); +- if(send_cmd(fd->fd, & raw_cmd, ++ if(send_cmd(fd->fd, & raw_cmd, + mode ? "format" : "verify")){ + if ( !retries && mode && (raw_cmd.reply[1] & ST1_ND) ){ +- cur_sector = raw_cmd.reply[5]; ++ cur_sector = ++ raw_cmd.reply[5] - fd->firstSectorNumber; + retries++; + goto retry; + } +@@ -516,6 +518,7 @@ + + short retries; + short zeroBased=0; ++ short firstSectorNumber=1; + short swapSides=0; + int n,rsize; + char *verify_buffer = NULL; +@@ -673,6 +676,10 @@ + (void *) &zeroBased, + "Start numbering sectors from 0 instead of 1 (not readable by normal I/O)" }, + ++ { '\0', "first-sector-number", 1, EO_TYPE_SHORT, 1, 0, ++ (void *) &firstSectorNumber, ++ "Number of first sector (by default, 1)" }, ++ + { '\0', 0 } + }; + +@@ -693,6 +700,15 @@ + exit(1); + } + ++ if(zeroBased) { ++ if(firstSectorNumber == 1) ++ firstSectorNumber = 0; ++ else if(firstSectorNumber > 1) { ++ fprintf(stderr, "Contradiction between zeroBased and firstSectorNumber"); ++ exit(1); ++ } ++ } ++ + /* sanity checking */ + if (sizecode < 0 || sizecode >= MAX_SIZECODE) { + fprintf(stderr,"Bad sizecode %d\n", sizecode); +@@ -730,7 +746,7 @@ + while(1) { + fd[0].fd = open(fd[0].name, O_RDWR | O_NDELAY | O_EXCL); + +- /* we open the disk wronly/rdwr in order to check write ++ /* we open the disk wronly/rdwr in order to check write + * protect */ + if (fd[0].fd < 0) { + perror("open"); +@@ -778,7 +794,7 @@ + + + if(have_geom) { +- if(mask & (SET_SECTORS | SET_CYLINDERS | ++ if(mask & (SET_SECTORS | SET_CYLINDERS | + SET_HEADS | SET_SIZECODE | SET_2M | SET_RATE)) { + fprintf(stderr, + "Cannot mix old style and new style geometry spec\n"); +@@ -805,17 +821,14 @@ + break; + } + stretch = geometry.stretch & 1; +-#ifdef FD_ZEROBASED +- if(geometry.stretch & FD_ZEROBASED) { +- zeroBased = 1; ++ if(geometry.stretch & FD_SECTBASEMASK) { ++ firstSectorNumber = ++ ((geometry.stretch & FD_SECTBASEMASK)>>2)^1; + } +-#endif +-#ifdef FD_SWAPSIDES + if(geometry.stretch & FD_SWAPSIDES) { + swapSides = 1; + } +-#endif +- mask |= SET_SECTORS | SET_CYLINDERS | ++ mask |= SET_SECTORS | SET_CYLINDERS | + SET_SIZECODE | SET_2M | SET_RATE; + } else { + /* density */ +@@ -831,7 +844,7 @@ + density = DRIVE_DEFAULTS.density; + if ( mask & SET_RATE ){ + for (i=0; i< density; ++i) { +- if(fd[0].rate == ++ if(fd[0].rate == + DRIVE_DEFAULTS.fmt[i].rate) + density=i; + } +@@ -867,13 +880,7 @@ + } + } + +- fd[0].zeroBased = zeroBased; +-#ifndef FD_ZEROBASED +- if(zeroBased) { +- noverify = 1; +- } +-#endif +- ++ fd[0].firstSectorNumber = firstSectorNumber; + fd[0].swapSides = swapSides; + + if (cylinders > fd[0].drvprm.tracks) { +@@ -914,7 +921,7 @@ + header_size = 62; + + if(! (mask & (SET_DEVIATION | SET_MARGIN)) && +- (drivedesc.mask & (1 << FE__DEVIATION))) { ++ (drivedesc.mask & (1 << FE__DEVIATION))) { + deviation = drivedesc.type.deviation; + mask |= SET_DEVIATION; + } +@@ -947,14 +954,14 @@ + "add the following line to " DRIVEPRMFILE ":\n"); + fprintf(stdout, + "drive%d: deviation=%d\n", +- fd[0].drive, ++ fd[0].drive, + (fd[0].raw_capacity-old_capacity)*1000000/ + old_capacity); + fprintf(stderr, + "CAUTION: The line is drive and controller " +- "specific, so it should be\n" ++ "specific, so it should be\n" + "removed before installing a new " +- "drive %d or floppy controller.\n\n", ++ "drive %d or floppy controller.\n\n", + fd[0].drive); + } + } +@@ -981,7 +988,7 @@ + if (verbosity == 9) { + for (i=0; i<fd[0].dsect; ++i) + printf("s=%2d S=%2d o=%2d\n", +- fd[0].sequence[i].sect, ++ fd[0].sequence[i].sect + firstSectorNumber, + fd[0].sequence[i].size, + fd[0].sequence[i].offset); + +@@ -1004,9 +1011,10 @@ + if (verbosity == 9){ + for (i=0; i< fd0.dsect; i++) + printf("s=%2d S=%2d o=%2d\n", +- fd0.sequence[i].sect, +- fd0.sequence[i].size, +- fd0.sequence[i].offset); ++ fd0.sequence[i].sect + ++ fd0.firstSectorNumber, ++ fd0.sequence[i].size, ++ fd0.sequence[i].offset); + + printf("fd[0].sizecode=%d\n", fd0.sizecode); + printf("fd[0].fmt_gap=%d\n", fd0.fmt_gap); +@@ -1019,11 +1027,9 @@ + parameters.head = heads; + parameters.track = cylinders; + parameters.size = cylinders * heads * sectors; +- parameters.stretch = stretch +-#ifdef FD_ZEROBASED +- | (zeroBased ? 4 : 0) +-#endif +- | (swapSides ? 2 : 0); ++ parameters.stretch = stretch ++ | (swapSides ? 2 : 0) ++ | ((1^firstSectorNumber) << 2); + parameters.gap = fd[0].gap; + if ( !use_2m) + fd0.rate = fd[0].rate; +@@ -1109,7 +1115,8 @@ + ioctl(fd[0].fd, FDFLUSH ); + close(fd[0].fd); + +- if (! (mask & SET_DOSDRIVE ) && fd[0].drive < 2 && !zeroBased) ++ if (! (mask & SET_DOSDRIVE ) && fd[0].drive < 2 && ++ firstSectorNumber == 1) + dosdrive = fd[0].drive+'a'; + + if (dosdrive) { +@@ -1133,14 +1140,14 @@ + setenv("MTOOLS_RATE_ANY", env_buffer,1); + if(system(command_buffer)){ + fprintf(stderr,"\nwarning: mformat error\n"); +- /*exit(1);*/ +- /* Do not fail, if mformat happens to not be ++ /*exit(1);*/ ++ /* Do not fail, if mformat happens to not be + * installed. The user might have wanted to make + * an ext2 disk for instance */ + dosverify = 0; + } + } else { +- if(!zeroBased) ++ if(firstSectorNumber != 1) + fprintf(stderr, + "\nwarning: mformat not called because DOS drive unknown\n"); + /*exit(1);*/ +@@ -1173,7 +1180,7 @@ + n = read(fd[0].fd,verify_buffer,rsize); + if ( n < 0){ + perror("read"); +- fprintf(stderr, ++ fprintf(stderr, + "remaining %d\n", n); + exit(1); + } +diff -ur --new-file --exclude-from=/home/alain/Projects/Fdutils/exclude fdutils-5.5/src/superformat.h fdutils/src/superformat.h +--- fdutils-5.5/src/superformat.h 2002-11-02 14:36:45.000000000 +0100 ++++ fdutils/src/superformat.h 2008-10-27 20:17:54.000000000 +0100 +@@ -83,7 +83,7 @@ + int length; /* length of the track */ + int rotations; /* how many time do we have to go over 0 to read + * the track */ +- int zeroBased; /* 1 if sector numbering starts at zero */ ++ int firstSectorNumber; /* Number of first sector (1, by default) */ + int swapSides; /* if logical side 0 is on physical 1 and vice-versa */ + }; + diff --git a/source/a/floppy/floppy.SlackBuild b/source/a/floppy/floppy.SlackBuild index 04966d1ca..adc39b468 100755 --- a/source/a/floppy/floppy.SlackBuild +++ b/source/a/floppy/floppy.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2008, 2009, 2010, 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -20,9 +20,9 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=5.4 -MTOOLS=3.9.8 -BUILD=${BUILD:-3} +VERSION=5.5 +MTOOLS=4.0.18 +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -50,34 +50,39 @@ rm -rf $PKG $TMP/fdutils-$VERSION $TMP/mtools-$MTOOLS mkdir -p $TMP $PKG/{etc,usr/{bin,info,man/man{1,4,5}}} cd $TMP -tar xzvf $CWD/fdutils-$VERSION.tar.gz +tar xvf $CWD/fdutils-$VERSION.tar.?z* cd fdutils-$VERSION -zcat $CWD/fdutils-5.4-20020222.diff.gz | patch -p1 --verbose --backup --suffix=.orig -zcat $CWD/fdutils.mediaprm.diff.gz | patch -p1 --verbose --backup --suffix=.orig +zcat $CWD/fdutils-5.5-20081027.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit 1 +zcat $CWD/fdutils.mediaprm.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit 1 +sed -i 's|<linux/ext2_fs.h>|<ext2fs/ext2_fs.h>|' src/fdmount.c CFLAGS="$SLKCFLAGS" \ ./configure \ --prefix=/usr \ --sysconfdir=/etc \ - $ARCH-slackware-linux -make install prefix=$PKG/usr + --mandir=/usr/man \ + --infodir=/usr/info \ + --build=$ARCH-slackware-linux || exit 1 +make || exit 1 +make install prefix=$PKG/usr exec_prefix=$PKG/usr bindir=$PKG/usr/bin \ + infodir=$PKG/usr/info mandir=$PKG/usr/man sysconfdir=$PKG/etc mkdir -p $PKG/usr/doc/fdutils-$VERSION cp -a COPYING CREDITS Changelog INSTALL doc/FAQ.html doc/README \ $PKG/usr/doc/fdutils-$VERSION chown root:root $PKG/usr/doc/fdutils-$VERSION/* chmod 644 $PKG/usr/doc/fdutils-$VERSION/* cd $TMP -tar xzvf $CWD/mtools-$MTOOLS.tar.gz +tar xvf $CWD/mtools-$MTOOLS.tar.?z* cd mtools-$MTOOLS CFLAGS="$SLKCFLAGS" \ ./configure \ - --prefix=/usr \ - --libdir=/usr/lib${LIBDIRSUFFIX} \ - --sysconfdir=/etc \ - $ARCH-slackware-linux -#make all floppyd floppyd_installtest -make all -make install prefix=$PKG/usr sysconfdir=$PKG/etc bindir=$PKG/usr/bin \ - MAN1DIR=$PKG/usr/man/man1 MAN5DIR=$PKG/usr/man/man5 + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --mandir=/usr/man \ + --infodir=/usr/info \ + --sysconfdir=/etc \ + --build=$ARCH-slackware-linux || exit 1 +make all || exit 1 +make install DESTDIR=$PKG || exit 1 cat $CWD/mtools.conf > $PKG/etc/mtools.conf cat $CWD/mediaprm > $PKG/etc/mediaprm mkdir -p $PKG/usr/doc/mtools-$MTOOLS diff --git a/source/a/floppy/slack-desc b/source/a/floppy/slack-desc index bb9169420..0a60ea477 100644 --- a/source/a/floppy/slack-desc +++ b/source/a/floppy/slack-desc @@ -8,9 +8,9 @@ |-----handy-ruler------------------------------------------------------| floppy: floppy (floppy disk utilities) floppy: -floppy: Contains fdutils-5.4, tools to test and format floppy disks; and -floppy: mtools-3.9.8, a collection of utilities for using DOS/Windows floppy -floppy: disks with Linux. +floppy: Contains fdutils, tools to test and format floppy disks; and mtools, +floppy: a collection of utilities to access FAT disks without mounting them. +floppy: floppy: floppy: floppy: diff --git a/source/a/gawk/gawk.SlackBuild b/source/a/gawk/gawk.SlackBuild index 157f7ce9b..cb332aa75 100755 --- a/source/a/gawk/gawk.SlackBuild +++ b/source/a/gawk/gawk.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2005-2010 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2005-2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,8 +21,8 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PKGNAM=gawk -VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-1} +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-2} NUMJOBS=${NUMJOBS:--j6} @@ -42,12 +42,16 @@ PKG=$TMP/package-gawk if [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" + LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" + LIBDIRSUFFIX="" fi rm -rf $PKG @@ -69,6 +73,7 @@ find . \ CFLAGS="$SLKCFLAGS" \ ./configure \ --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ --mandir=/usr/man \ --infodir=/usr/info \ --build=$ARCH-slackware-linux diff --git a/source/a/gettext/gettext-tools.SlackBuild b/source/a/gettext/gettext-tools.SlackBuild index 8b3154b0c..b231ad5fc 100755 --- a/source/a/gettext/gettext-tools.SlackBuild +++ b/source/a/gettext/gettext-tools.SlackBuild @@ -20,8 +20,8 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=0.18.1.1 -BUILD=${BUILD:-3} +VERSION=0.18.2.1 +BUILD=${BUILD:-2} NUMJOBS=${NUMJOBS:-" -j6 "} @@ -60,7 +60,7 @@ rm -rf $PKG mkdir -p $TMP $PKG cd $TMP rm -rf gettext-$VERSION -tar xjvf $CWD/gettext-$VERSION.tar.bz2 || exit 1 +tar xvf $CWD/gettext-$VERSION.tar.xz || exit 1 cd gettext-$VERSION chown -R root:root . find . \ @@ -97,7 +97,7 @@ gzip $PKG/usr/man/man?/* ( cd $PKG/usr/doc/gettext-tools-$VERSION # These take up a ton of space otherwise tar cf examples.tar examples - bzip2 -9 examples.tar + xz -9 examples.tar rm -rf examples # Move the HTML docs into a subdirectory: mkdir html @@ -109,7 +109,7 @@ gzip $PKG/usr/man/man?/* ) cp -a \ - AUTHORS ../COPYING INSTALL NEWS README \ + AUTHORS ../COPYING* INSTALL NEWS README* \ $PKG/usr/doc/gettext-tools-$VERSION mkdir -p $PKG/install diff --git a/source/a/gettext/gettext.SlackBuild b/source/a/gettext/gettext.SlackBuild index cd86bf7eb..ce4ef587e 100755 --- a/source/a/gettext/gettext.SlackBuild +++ b/source/a/gettext/gettext.SlackBuild @@ -20,8 +20,8 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=0.18.1.1 -BUILD=${BUILD:-3} +VERSION=0.18.2.1 +BUILD=${BUILD:-2} NUMJOBS=${NUMJOBS:-" -j6 "} @@ -60,7 +60,7 @@ rm -rf $PKG mkdir -p $TMP $PKG cd $TMP rm -rf gettext-$VERSION -tar xjvf $CWD/gettext-$VERSION.tar.bz2 || exit 1 +tar xvf $CWD/gettext-$VERSION.tar.xz || exit 1 cd gettext-$VERSION chown -R root:root . find . \ @@ -101,7 +101,7 @@ gzip -9 $PKG/usr/man/man?/* ) cp -a \ - AUTHORS BUGS intl/COPYING.LIB-2.0 intl/COPYING.LIB-2.1 INSTALL NEWS README \ + AUTHORS BUGS intl/COPYING* INSTALL NEWS README* \ $PKG/usr/doc/gettext-$VERSION mkdir -p $PKG/install diff --git a/source/a/getty-ps/getty-ps.SlackBuild b/source/a/getty-ps/getty-ps.SlackBuild index fb1a49f8b..642256fe4 100755 --- a/source/a/getty-ps/getty-ps.SlackBuild +++ b/source/a/getty-ps/getty-ps.SlackBuild @@ -22,7 +22,7 @@ VERSION=2.1.0b -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then diff --git a/source/a/getty-ps/getty.bugfixes.diff b/source/a/getty-ps/getty.bugfixes.diff index 6a1ed29e9..dd2e48585 100644 --- a/source/a/getty-ps/getty.bugfixes.diff +++ b/source/a/getty-ps/getty.bugfixes.diff @@ -132,7 +132,7 @@ Jan Rafaj + +void free_version(void) +{ -+ if (Version) ++ if (Version && defvalue(def, "VERSION")) + free(Version); + Version = NULL; +} diff --git a/source/a/gpm/gpm-1.20.1-consolename.patch b/source/a/gpm/gpm-1.20.1-consolename.patch deleted file mode 100644 index c5879fb41..000000000 --- a/source/a/gpm/gpm-1.20.1-consolename.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- gpm-1.20.1/src/lib/liblow.c.orig 2004-10-13 16:34:15.181502369 -0400 -+++ gpm-1.20.1/src/lib/liblow.c 2004-10-13 16:34:20.491778415 -0400 -@@ -262,13 +262,14 @@ - gpm_report(GPM_PR_ERR,"consolename not set"); - goto err; - } -+#if 0 - /* do we really need this check ? */ - if(strncmp(tty,consolename,strlen(consolename)-1) - || !isdigit(tty[strlen(consolename)-1])) { - gpm_report(GPM_PR_ERR,"strncmp/isdigit/consolename failed"); - goto err; - } -- -+#endif - conn->vc=atoi(&tty[strlen(consolename)-1]); - } - diff --git a/source/a/gpm/gpm-1.20.1-gpmopen.patch b/source/a/gpm/gpm-1.20.1-gpmopen.patch deleted file mode 100644 index f36ad9396..000000000 --- a/source/a/gpm/gpm-1.20.1-gpmopen.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- gpm-1.20.1/src/lib/liblow.c.gpmopen 2004-05-04 17:36:09.000000000 -0400 -+++ gpm-1.20.1/src/lib/liblow.c 2004-05-04 17:42:51.000000000 -0400 -@@ -200,8 +200,6 @@ - Gpm_Stst *new = NULL; - char* sock_name = 0; - -- consolename = NULL; -- - #if 0 - gpm_report(GPM_PR_DEBUG,"VC: %d",flag); - #endif -@@ -260,6 +258,10 @@ - gpm_report(GPM_PR_ERR,"checking tty name failed"); - goto err; - } -+ if (consolename == NULL) { -+ gpm_report(GPM_PR_ERR,"consolename not set"); -+ goto err; -+ } - /* do we really need this check ? */ - if(strncmp(tty,consolename,strlen(consolename)-1) - || !isdigit(tty[strlen(consolename)-1])) { diff --git a/source/a/gpm/gpm-1.20.1-idie.patch b/source/a/gpm/gpm-1.20.1-idie.patch deleted file mode 100644 index 4594f0784..000000000 --- a/source/a/gpm/gpm-1.20.1-idie.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- gpm-1.20.1/src/lib/liblow.c.orig 2004-05-06 14:14:03.000000000 -0400 -+++ gpm-1.20.1/src/lib/liblow.c 2004-05-06 14:18:05.000000000 -0400 -@@ -376,7 +376,9 @@ - - /*....................................... Error: free all memory */ - err: -+#if 0 - gpm_report(GPM_PR_ERR,"Oh, oh, it's an error! possibly I die! "); -+#endif - do { - new=gpm_stack->next; - free(gpm_stack); diff --git a/source/a/gpm/gpm-1.20.1-input-defines.diff b/source/a/gpm/gpm-1.20.1-input-defines.diff deleted file mode 100644 index 4a925a6a3..000000000 --- a/source/a/gpm/gpm-1.20.1-input-defines.diff +++ /dev/null @@ -1,26 +0,0 @@ ---- ./src/headers/input-defines.h.orig 2006-12-11 19:56:14.000000000 -0600 -+++ ./src/headers/input-defines.h 2006-12-11 19:59:30.000000000 -0600 -@@ -59,23 +59,4 @@ - #define PSMOUSE_SYNAPTICS 7 - #endif - --#ifndef HAVE_INPUT_ID --struct input_id { -- unsigned short bustype; -- unsigned short vendor; -- unsigned short product; -- unsigned short version; --}; --#endif -- --#ifndef HAVE_INPUT_ABSINFO --struct input_absinfo { -- int value; -- int minimum; -- int maximum; -- int fuzz; -- int flat; --}; --#endif -- - #endif diff --git a/source/a/gpm/gpm-1.20.1-input.patch b/source/a/gpm/gpm-1.20.1-input.patch deleted file mode 100644 index 152e60381..000000000 --- a/source/a/gpm/gpm-1.20.1-input.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff -ur gpm-1.20.1.orig/src/headers/config.h.in gpm-1.20.1/src/headers/config.h.in ---- gpm-1.20.1.orig/src/headers/config.h.in 2004-09-04 10:24:11.000000000 -0400 -+++ gpm-1.20.1/src/headers/config.h.in 2004-09-04 10:26:02.000000000 -0400 -@@ -46,6 +46,12 @@ - /* Define if you have the <linux/input.h> header file. */ - #undef HAVE_LINUX_INPUT_H - -+/* Definedif you have the input_id structure */ -+#undef HAVE_INPUT_ID -+ -+/* Definedif you have the input_absinfo structure */ -+#undef HAVE_INPUT_ABSINFO -+ - /* Define if you have the <linux/joystick.h> header file. */ - #undef HAVE_LINUX_JOYSTICK_H - diff --git a/source/a/gpm/gpm-1.20.1-lib-silent.patch b/source/a/gpm/gpm-1.20.1-lib-silent.patch index 099075b5b..e77074159 100644 --- a/source/a/gpm/gpm-1.20.1-lib-silent.patch +++ b/source/a/gpm/gpm-1.20.1-lib-silent.patch @@ -15,5 +15,5 @@ + return; + char *string = NULL; + int log_level; va_list ap; - va_start(ap,text); diff --git a/source/a/gpm/gpm-1.20.1-math.patch b/source/a/gpm/gpm-1.20.1-math.patch deleted file mode 100644 index 634a5fd84..000000000 --- a/source/a/gpm/gpm-1.20.1-math.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- gpm-1.20.1/configure.in.math Tue Jun 24 10:52:44 2003 -+++ gpm-1.20.1/configure.in Tue Jun 24 10:53:54 2003 -@@ -128,7 +128,7 @@ - AC_SUBST(lispdir) - - CPPFLAGS='-I$(srcdir) $(DEFS) -include headers/config.h -Wall -DSYSCONFDIR="\"$(sysconfdir)\"" -DSBINDIR="\"$(sbindir)\""' --LDFLAGS='-L$(srcdir)' -+LDFLAGS='-lm -L$(srcdir)' - - dnl AC_DEFINE_UNQUOTED(SYSCONFDIR,"$sysconfdir") - dnl AC_DEFINE_UNQUOTED(SBINDIR,"$sbindir") diff --git a/source/a/gpm/gpm-1.20.1-multilib.patch b/source/a/gpm/gpm-1.20.1-multilib.patch deleted file mode 100644 index 723ee2b59..000000000 --- a/source/a/gpm/gpm-1.20.1-multilib.patch +++ /dev/null @@ -1,52 +0,0 @@ ---- gpm-1.20.1/doc/Makefile.in.multilib 2002-12-24 17:57:16.000000000 -0500 -+++ gpm-1.20.1/doc/Makefile.in 2004-10-20 17:25:11.000000000 -0400 -@@ -97,7 +97,7 @@ - - # Main portion - --all: $(srcdir)/gpm.info $(MANPAGES) -+all: gpm.info $(MANPAGES) - - # why gpmdoc.ps and gpm.ps?? - # there is no gpm.ps in my tree and no rule to generate gpm.ps. -@@ -131,8 +131,8 @@ - #i keep all my infopages compressed and i'm tired to do it by - #hand, so check if there are any compressed pages and do this - #one too -- -ls $(infodir)/*[-.]info.gz >/dev/null 2>&1 \ -- && gzip -f $(infodir)/gpm.info -+ #-ls $(infodir)/*[-.]info.gz >/dev/null 2>&1 \ -+ # && gzip -f $(infodir)/gpm.info - # Hmm.... shouldn't man pages be compressed too? - # maybe they should, but at least at my system they are not. - ---- gpm-1.20.1/contrib/Makefile.in.multilib 2002-12-24 17:57:16.000000000 -0500 -+++ gpm-1.20.1/contrib/Makefile.in 2004-10-20 17:11:38.000000000 -0400 -@@ -9,10 +9,10 @@ - - include $(top_builddir)/Makefile.include - --all: $(srcdir)/$(ELISP) -+all: $(filter-out %.elc,$(srcdir)/$(ELISP)) - - install: all -- if [ -n "$(ELISP)" ]; then for i in `echo $(ELISP)`; do \ -+ if [ -n "$(filter-out %.elc,$(ELISP))" ]; then for i in `echo $(filter-out %.elc,$(ELISP))`; do \ - $(INSTALL_DATA) $(srcdir)/$$i $(lispdir)/`basename $$i` ;\ - done; fi - -@@ -20,7 +20,7 @@ - $(EMACS) -batch -l $(srcdir)/emacs/exec.el -exec '(byte-compile-file "$<")' - - uninstall: -- if [ -n "$(ELISP)" ]; then for i in `echo $(ELISP)`; do \ -+ if [ -n "$(filter-out %.elc,$(ELISP))" ]; then for i in `echo $(filter-out %.elc,$(ELISP))`; do \ - rm -f $(lispdir)/$$i ;\ - done; fi - -@@ -28,4 +28,4 @@ - $(CP) -r $(srcdir) $(top_builddir)/gpm-$(release)/ - - clean distclean: -- $(RM) -f $(srcdir)/emacs/*.elc -+ $(RM) $(srcdir)/emacs/*.elc diff --git a/source/a/gpm/gpm-1.20.1-no-console-error.patch b/source/a/gpm/gpm-1.20.1-no-console-error.patch deleted file mode 100644 index 20c177b4d..000000000 --- a/source/a/gpm/gpm-1.20.1-no-console-error.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- gpm-1.20.1/src/console.c.no-console-error 2006-01-18 17:06:15.000000000 +0100 -+++ gpm-1.20.1/src/console.c 2006-01-18 17:08:19.000000000 +0100 -@@ -249,8 +249,10 @@ - /* Failed, try OLD console */ - else if (stat(GPM_OLD_CONSOLE, &buf) == 0) - console.device = GPM_OLD_CONSOLE; -- else -- gpm_report(GPM_PR_OOPS, "Can't determine console device"); -+ else { // XXX handle this gracefully? -+ fprintf( stderr, "no console device found" ); -+ exit( 1 ); -+ } - - return console.device; - } diff --git a/source/a/gpm/gpm-1.20.1-nodebug.patch b/source/a/gpm/gpm-1.20.1-nodebug.patch deleted file mode 100644 index 945b576c4..000000000 --- a/source/a/gpm/gpm-1.20.1-nodebug.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- gpm-1.20.1/src/lib/liblow.c.orig 2004-03-31 15:06:45.000000000 -0500 -+++ gpm-1.20.1/src/lib/liblow.c 2004-03-31 15:09:32.000000000 -0500 -@@ -202,7 +202,9 @@ - - consolename = NULL; - -+#if 0 - gpm_report(GPM_PR_DEBUG,"VC: %d",flag); -+#endif - - /*....................................... First of all, check xterm */ - diff --git a/source/a/gpm/gpm-1.20.1-select-1.patch b/source/a/gpm/gpm-1.20.1-select-1.patch new file mode 100644 index 000000000..48dbed33c --- /dev/null +++ b/source/a/gpm/gpm-1.20.1-select-1.patch @@ -0,0 +1,30 @@ +Submitted By: Alexander E. Patrakov +Date: 2006-02-10 +Initial Package Version: 1.20.1 +Upstream Status: Dead +Origin: Alexander E. Patrakov +Description: Fixes lockups when signals arrive. +Details: the return value of -1 from select() that propagates into flag means +that it was interrupted by a signal. In this case, at least with glibc +from trunk (2.3.90), the return value from FD_ISSET is undefined. Thus, +GET(win) can be called when there's no actual input. This results in the +lockup until a key is pressed. + +--- gpm-1.20.1/src/lib/libcurses.c 2002-12-25 03:57:16.000000000 +0500 ++++ gpm-1.20.1/src/lib/libcurses.c 2006-02-10 09:45:11.000000000 +0500 +@@ -71,12 +71,12 @@ + } + while (!flag); + +- if (FD_ISSET(fd,&selSet)) +- return GET(win); +- + if (flag==-1) + continue; + ++ if (FD_ISSET(fd,&selSet)) ++ return GET(win); ++ + if (Gpm_GetEvent(&ev) && gpm_handler + && (result=(*gpm_handler)(&ev,gpm_data))) + { diff --git a/source/a/gpm/gpm-1.20.1-subscript.patch b/source/a/gpm/gpm-1.20.1-subscript.patch deleted file mode 100644 index bf4ca75b0..000000000 --- a/source/a/gpm/gpm-1.20.1-subscript.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- gpm-1.20.1/src/mice.c.lr 2004-02-15 09:19:48.000000000 +0100 -+++ gpm-1.20.1/src/mice.c 2004-02-15 09:22:18.000000000 +0100 -@@ -2112,7 +2112,7 @@ - for (i=0; i<4; i++) - if (gunze_calib[i] & ~1023) calibok = 0; - if (gunze_calib[0] == gunze_calib[2]) calibok = 0; -- if (gunze_calib[1] == gunze_calib[4]) calibok = 0; -+ if (gunze_calib[1] == gunze_calib[3]) calibok = 0; - fclose(f); - } - if (!calibok) { diff --git a/source/a/gpm/gpm-1.20.1-weak-wgetch.patch b/source/a/gpm/gpm-1.20.1-weak-wgetch.patch index 81e6a2b5b..2546e17f7 100644 --- a/source/a/gpm/gpm-1.20.1-weak-wgetch.patch +++ b/source/a/gpm/gpm-1.20.1-weak-wgetch.patch @@ -14,8 +14,8 @@ int Gpm_Wgetch(WINDOW *win) { ---- gpm-1.20.1/configure.in.weak-wgetch 2004-03-22 15:49:51.000000000 -0500 -+++ gpm-1.20.1/configure.in 2004-03-22 15:51:24.000000000 -0500 +--- gpm-1.20.1/configure.ac.weak-wgetch 2004-03-22 15:49:51.000000000 -0500 ++++ gpm-1.20.1/configure.ac 2004-03-22 15:51:24.000000000 -0500 @@ -115,7 +115,7 @@ AC_CHECK_LIB($i, wgetch,,,$TERMLIBS) else :; fi @@ -24,15 +24,3 @@ + SHARED_LIBS="-lc" LIBS=$SAVELIBS ;; esac - ---- gpm-1.20.1/configure.weak-wgetch 2004-03-22 15:49:55.000000000 -0500 -+++ gpm-1.20.1/configure 2004-03-22 15:51:24.000000000 -0500 -@@ -4295,7 +4295,7 @@ - - else :; fi - done -- SHARED_LIBS="$LIBS $TERMLIBS -lc" -+ SHARED_LIBS="-lc" - LIBS=$SAVELIBS ;; - esac - diff --git a/source/a/gpm/gpm-1.20.1.send-noise-to-syslogs.diff b/source/a/gpm/gpm-1.20.1.send-noise-to-syslogs.diff deleted file mode 100644 index 111e7843b..000000000 --- a/source/a/gpm/gpm-1.20.1.send-noise-to-syslogs.diff +++ /dev/null @@ -1,86 +0,0 @@ -diff -u -r gpm-1.20.1.orig/src/report.c gpm-1.20.1/src/report.c ---- gpm-1.20.1.orig/src/report.c 2006-08-20 14:34:30.000000000 -0500 -+++ gpm-1.20.1/src/report.c 2006-08-20 14:44:54.000000000 -0500 -@@ -48,15 +48,15 @@ - * - * Startup Mode: - * debug : - (ignore) -- * info : syslog/stdout -- * warn/err : syslog/stderr -+ * info : syslog -+ * warn/err : syslog - * oops : syslog/stderr [exit] - * - * Running Mode: (daemon) - * debug : - (ignore) - * info : syslog -- * warn : syslog+system console -- * err : syslog+system console+current console -+ * warn : syslog -+ * err : syslog - * oops : syslog/stderr [_exit] - * - * Debug Mode : -@@ -85,9 +85,6 @@ - syslog(LOG_INFO | LOG_USER, GPM_STRING_INFO); - vsyslog(LOG_INFO | LOG_USER, text, ap); - #endif -- fprintf(stderr,GPM_STRING_INFO); -- vfprintf(stderr,text,ap); -- fprintf(stderr,"\n"); - break; - - case GPM_STAT_WARN: -@@ -95,9 +92,6 @@ - syslog(LOG_DAEMON | LOG_WARNING, GPM_STRING_WARN); - vsyslog(LOG_DAEMON | LOG_WARNING, text, ap); - #endif -- fprintf(stderr,GPM_STRING_WARN); -- vfprintf(stderr,text,ap); -- fprintf(stderr,"\n"); - break; - - case GPM_STAT_ERR: -@@ -105,9 +99,6 @@ - syslog(LOG_DAEMON | LOG_ERR, GPM_STRING_ERR); - vsyslog(LOG_DAEMON | LOG_ERR, text, ap); - #endif -- fprintf(stderr,GPM_STRING_ERR); -- vfprintf(stderr,text,ap); -- fprintf(stderr,"\n"); - break; - - case GPM_STAT_OOPS: -@@ -139,12 +130,6 @@ - syslog(LOG_DAEMON | LOG_WARNING, GPM_STRING_WARN); - vsyslog(LOG_DAEMON | LOG_WARNING, text, ap); - #endif -- if ((f = fopen(GPM_SYS_CONSOLE, "a")) != NULL) { -- fprintf(f, GPM_STRING_WARN); -- vfprintf(f, text, ap); -- fprintf(f, "\n"); -- fclose(f); -- } - break; - - case GPM_STAT_ERR: -@@ -152,19 +137,6 @@ - syslog(LOG_DAEMON | LOG_ERR, GPM_STRING_ERR); - vsyslog(LOG_DAEMON | LOG_ERR, text, ap); - #endif -- if ((f = fopen(GPM_SYS_CONSOLE, "a")) != NULL) { -- fprintf(f, GPM_STRING_ERR); -- vfprintf(f, text, ap); -- fprintf(f, "\n"); -- fclose(f); -- } -- -- if ((f = fopen(console.device, "a")) != NULL) { -- fprintf(f, GPM_STRING_ERR); -- vfprintf(f, text, ap); -- fprintf(f, "\n"); -- fclose(f); -- } - break; - - case GPM_STAT_OOPS: diff --git a/source/a/gpm/gpm-1.20.5-close-fds.patch b/source/a/gpm/gpm-1.20.5-close-fds.patch new file mode 100644 index 000000000..f33f07c55 --- /dev/null +++ b/source/a/gpm/gpm-1.20.5-close-fds.patch @@ -0,0 +1,17 @@ +diff -up gpm-1.20.5/src/daemon/startup.c.close-fds gpm-1.20.5/src/daemon/startup.c +--- gpm-1.20.5/src/daemon/startup.c.close-fds 2008-06-13 10:08:19.000000000 +0200 ++++ gpm-1.20.5/src/daemon/startup.c 2008-12-02 10:11:12.000000000 +0100 +@@ -135,6 +135,13 @@ void startup(int argc, char **argv) + check_uniqueness(); + gpm_report(GPM_PR_INFO,GPM_MESS_STARTED); + ++ // close extra fds ++ if (option.run_status == GPM_RUN_STARTUP ) { ++ close(0); ++ close(1); ++ close(2); ++ } ++ + //return mouse_table[1].fd; /* the second is handled in the main() */ + + /****************** OLD CODE from gpn.c END ***********************/ diff --git a/source/a/gpm/gpm-evdev-cumulative.patch b/source/a/gpm/gpm-evdev-cumulative.patch deleted file mode 100644 index 2fd86d10c..000000000 --- a/source/a/gpm/gpm-evdev-cumulative.patch +++ /dev/null @@ -1,7023 +0,0 @@ -diff -urN gpm-1.20.1/configure.in gpm/configure.in ---- gpm-1.20.1/configure.in 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/configure.in 2003-10-02 01:22:42.000000000 -0500 -@@ -61,6 +61,13 @@ - - AC_CHECK_HEADERS(syslog.h linux/input.h linux/joystick.h ncurses.h ncurses/curses.h curses.h) - -+EVDEV_SRCS= -+if test ${ac_cv_header_linux_input_h} = yes ; then -+ EVDEV_SRCS=evdev.c ; -+ AC_CHECK_TYPE(struct input_absinfo,AC_DEFINE_UNQUOTED(HAVE_INPUT_ABSINFO, 1, [define if struct input_absinfo defined in linux/input.h]),,[#include <linux/input.h>]) -+ AC_CHECK_TYPE(struct input_id,AC_DEFINE_UNQUOTED(HAVE_INPUT_ID, 1, [define if struct input_id defined in linux/input.h]),,[#include <linux/input.h>]) -+fi -+ - AC_ARG_WITH(curses, - [ --without-curses disable curses support even if curses found]) - -@@ -124,6 +131,7 @@ - AC_SUBST(PICFLAGS) - AC_SUBST(SOLDFLAGS) - AC_SUBST(CURSES_OBJS) -+AC_SUBST(EVDEV_SRCS) - AC_SUBST(SHARED_LIBS) - AC_SUBST(lispdir) - -diff -urN gpm-1.20.1/src/client.c gpm/src/client.c ---- gpm-1.20.1/src/client.c 1969-12-31 19:00:00.000000000 -0500 -+++ gpm/src/client.c 2003-10-02 01:22:42.000000000 -0500 -@@ -0,0 +1,319 @@ -+/* -+ * client.c - GPM client handling (server side) -+ * -+ * Copyright (C) 1993 Andreq Haylett <ajh@gec-mrc.co.uk> -+ * Copyright (C) 1994-1999 Alessandro Rubini <rubini@linux.it> -+ * Copyright (C) 1998 Ian Zimmerman <itz@rahul.net> -+ * Copyright (c) 2001,2002 Nico Schottelius <nico@schottelius.org> -+ * Copyright (C) 2003 Dmitry Torokhov <dtor@mail.ru> -+ * -+ * This program 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 of the License, or -+ * (at your option) any later version. -+ * -+ * This program 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 this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ ********/ -+ -+#include <stdio.h> -+#include <stdlib.h> -+#include <string.h> /* strerror(); ?!? */ -+#include <errno.h> -+#include <unistd.h> /* select(); */ -+#include <signal.h> /* SIGPIPE */ -+#include <time.h> /* time() */ -+#include <sys/fcntl.h> /* O_RDONLY */ -+#include <sys/stat.h> /* mkdir() */ -+#include <sys/time.h> /* timeval */ -+#include <sys/types.h> /* socket() */ -+#include <sys/socket.h> /* socket() */ -+#include <sys/un.h> /* struct sockaddr_un */ -+ -+#include "headers/gpmInt.h" -+#include "headers/message.h" -+#include "headers/console.h" -+#include "headers/selection.h" -+#include "headers/client.h" -+ -+/* who the f*** runs gpm without glibc? doesn't have dietlibc __socklent_t? */ -+#if !defined(__GLIBC__) -+ typedef unsigned int __socklen_t; -+#endif /* __GLIBC__ */ -+ -+#ifndef max -+#define max(a,b) ((a)>(b) ? (a) : (b)) -+#endif -+ -+extern int errno; -+ -+struct client_info *cinfo[MAX_VC + 1]; -+ -+/*-------------------------------------------------------------------* -+ * This was inline, and incurred in a compiler bug (2.7.0) -+ *-------------------------------------------------------------------*/ -+static int get_data(int fd, Gpm_Connect *data) -+{ -+ static int len; -+ -+#ifdef GPM_USE_MAGIC -+ while ((len = read(whence, &check, sizeof(int))) == 4 && -+ check != GPM_MAGIC) -+ gpm_report(GPM_PR_INFO, GPM_MESS_NO_MAGIC); -+ -+ if (len == 0) return 0; -+ -+ if (check != GPM_MAGIC) { -+ gpm_report(GPM_PR_INFO, GPM_MESS_NOTHING_MORE); -+ return -1; -+ } -+#endif -+ -+ len = read(fd, data, sizeof(Gpm_Connect)); -+ -+ return len ? (len == sizeof(Gpm_Connect) ? 1 : -1) : 0; -+} -+ -+/*-------------------------------------------------------------------*/ -+int listen_for_clients(void) -+{ -+ struct sockaddr_un ctladdr; -+ int fd, len; -+ -+ unlink(GPM_NODE_CTL); -+ -+ if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_SOCKET_PROB); -+ -+ memset(&ctladdr, 0, sizeof(ctladdr)); -+ ctladdr.sun_family = AF_UNIX; -+ strcpy(ctladdr.sun_path, GPM_NODE_CTL); -+ len = sizeof(ctladdr.sun_family) + strlen(GPM_NODE_CTL); -+ -+ if (bind(fd, (struct sockaddr *)&ctladdr, len) == -1) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_BIND_PROB, ctladdr.sun_path); -+ -+ /* needs to be 0777, so all users can _try_ to access gpm */ -+ chmod(GPM_NODE_CTL, 0777); -+ listen(fd, 5); /* Queue up calls */ -+ -+ return fd; -+} -+ -+/*-------------------------------------------------------------------*/ -+struct client_info *accept_client_connection(int fd) -+{ -+ struct client_info *info; -+ Gpm_Connect *request; -+ int newfd; -+#if !defined(__GLIBC__) -+ int len; -+#else /* __GLIBC__ */ -+ size_t len; /* isn't that generally defined in C ??? -- nico */ -+#endif /* __GLIBC__ */ -+ struct sockaddr_un addr; /* reuse this each time */ -+#ifndef SO_PEERCRED -+ struct stat statbuf; -+ time_t staletime; -+#endif -+ uid_t uid; -+ -+ /*....................................... Accept */ -+ memset(&addr, 0, sizeof(addr)); -+ addr.sun_family = AF_UNIX; -+ -+ len = sizeof(addr); -+ if ((newfd = accept(fd, (struct sockaddr *)&addr, &len)) < 0) { -+ gpm_report(GPM_PR_ERR, GPM_MESS_ACCEPT_FAILED, strerror(errno)); -+ return NULL; -+ } -+ -+ gpm_report(GPM_PR_INFO, GPM_MESS_CONECT_AT, newfd); -+ -+ if (!(info = malloc(sizeof(struct client_info)))) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_NO_MEM); -+ -+ request = &info->data; -+ if (get_data(newfd, request) == -1) -+ goto err; -+ -+ if (request->vc > MAX_VC) { -+ gpm_report(GPM_PR_WARN,GPM_MESS_REQUEST_ON, request->vc, MAX_VC); -+ goto err; -+ } -+ -+#ifndef SO_PEERCRED -+ if (stat(addr.sun_path, &statbuf) == -1 || !S_ISSOCK(statbuf.st_mode)) { -+ gpm_report(GPM_PR_ERR,GPM_MESS_ADDRES_NSOCKET,addr.sun_path); -+ goto err; -+ } -+ -+ unlink(addr.sun_path); /* delete socket */ -+ -+ staletime = time(0) - 30; -+ if (statbuf.st_atime < staletime || -+ statbuf.st_ctime < staletime || -+ statbuf.st_mtime < staletime) { -+ gpm_report(GPM_PR_ERR, GPM_MESS_SOCKET_OLD); -+ goto err; -+ } -+ -+ uid = statbuf.st_uid; /* owner of socket */ -+#else -+ { -+ struct ucred sucred; -+ socklen_t credlen = sizeof(struct ucred); -+ -+ if (getsockopt(newfd, SOL_SOCKET, SO_PEERCRED, &sucred, &credlen) == -1) { -+ gpm_report(GPM_PR_ERR,GPM_MESS_GETSOCKOPT, strerror(errno)); -+ goto err; -+ } -+ uid = sucred.uid; -+ gpm_report(GPM_PR_DEBUG,GPM_MESS_PEER_SCK_UID, uid); -+ } -+#endif -+ -+ if (uid != 0 && !is_console_owner(request->vc, uid)) { -+ gpm_report(GPM_PR_WARN, GPM_MESS_FAILED_CONNECT, uid, request->vc); -+ goto err; -+ } -+ -+ /* register the connection information in the right place */ -+ info->next = cinfo[request->vc]; -+ info->fd = newfd; -+ cinfo[request->vc] = info; -+ gpm_report(GPM_PR_DEBUG, GPM_MESS_LONG_STATUS, -+ request->pid, request->vc, request->eventMask, request->defaultMask, -+ request->minMod, request->maxMod); -+ -+ return info; -+ -+err: -+ free(info); -+ close(newfd); -+ -+ return NULL; -+} -+ -+/*-------------------------------------------------------------------*/ -+void remove_client(struct client_info *ci, int vc) -+{ -+ struct client_info *p, *prev = NULL; -+ -+ for (p = cinfo[vc]; p; prev = p, p = p->next) { -+ if (p == ci) { -+ if (!prev) /* it is on top of the stack */ -+ cinfo[vc] = p->next; -+ else -+ prev->next = p->next; -+ break; -+ } -+ } -+ if (p) free(p); -+} -+ -+/*-------------------------------------------------------------------*/ -+void notify_clients_resize(void) -+{ -+ struct client_info *ci; -+ int i; -+ -+ for (i = 0; i < MAX_VC + 1; i++) -+ for (ci = cinfo[i]; ci; ci = ci->next) -+ kill(ci->data.pid, SIGWINCH); -+} -+ -+/*-------------------------------------------------------------------*/ -+/* returns 0 if the event has not been processed, and 1 if it has */ -+int do_client(struct client_info *cinfo, Gpm_Event *event) -+{ -+ Gpm_Connect *info = &cinfo->data; -+ /* value to return if event is not used */ -+ int res = !(info->defaultMask & event->type); -+ -+ /* instead of returning 0, scan the stack of clients */ -+ if ((info->minMod & event->modifiers) < info->minMod) -+ goto try_next; -+ if ((info->maxMod & event->modifiers) < event->modifiers) -+ goto try_next; -+ -+ /* if not managed, use default mask */ -+ if (!(info->eventMask & GPM_BARE_EVENTS(event->type))) { -+ if (res) return res; -+ else goto try_next; -+ } -+ -+ /* WARNING */ /* This can generate a SIGPIPE... I'd better catch it */ -+ MAGIC_P((write(cinfo->fd, &magic, sizeof(int)))); -+ write(cinfo->fd, event, sizeof(Gpm_Event)); -+ -+ return info->defaultMask & GPM_HARD ? res : 1; /* HARD forces pass-on */ -+ -+ try_next: -+ if (cinfo->next != 0) -+ return do_client(cinfo->next, event); /* try the next */ -+ -+ return 0; /* no next, not used */ -+} -+ -+/*-------------------------------------------------------------------*/ -+/* returns 0 if client disconnects, -1 - error, 1 -successs */ -+int process_client_request(struct client_info *ci, int vc, -+ int x, int y, int buttons, int clicks, -+ int three_button_mouse) -+{ -+ int rc; -+ Gpm_Connect conn; -+ static Gpm_Event event; -+ -+ gpm_report(GPM_PR_INFO, GPM_MESS_CON_REQUEST, ci->fd, vc); -+ if (vc > MAX_VC) return -1; -+ -+ /* itz 10-22-96 this shouldn't happen now */ -+ if (vc == -1) gpm_report(GPM_PR_OOPS, GPM_MESS_UNKNOWN_FD); -+ -+ rc = get_data(ci->fd, &conn); -+ -+ if (rc == 0) { /* no data */ -+ gpm_report(GPM_PR_INFO, GPM_MESS_CLOSE); -+ close(ci->fd); -+ return 0; -+ } -+ -+ if (rc == -1) return -1; /* too few bytes */ -+ -+ if (conn.pid != 0) { -+ ci->data = conn; -+ return 1; -+ } -+ -+ /* Aha, request for information (so-called snapshot) */ -+ switch (conn.vc) { -+ case GPM_REQ_SNAPSHOT: -+ event.vc = get_console_state(&event.modifiers); -+ event.x = x; event.y = y; -+ event.buttons = buttons; -+ event.clicks = clicks; -+ event.dx = console.max_x; event.dy = console.max_y; -+ /* fall through */ -+ -+ case GPM_REQ_BUTTONS: -+ event.type = (three_button_mouse == 1 ? 3 : 2); /* buttons */ -+ write(ci->fd, &event, sizeof(Gpm_Event)); -+ break; -+ -+ case GPM_REQ_NOPASTE: -+ selection_disable_paste(); -+ gpm_report(GPM_PR_INFO, GPM_MESS_DISABLE_PASTE, vc); -+ break; -+ } -+ -+ return 1; -+} -+ -diff -urN gpm-1.20.1/src/console.c gpm/src/console.c ---- gpm-1.20.1/src/console.c 1969-12-31 19:00:00.000000000 -0500 -+++ gpm/src/console.c 2003-10-02 01:22:42.000000000 -0500 -@@ -0,0 +1,257 @@ -+/* -+ * console.c - GPM console and selection/paste handling -+ * -+ * Copyright (C) 1993 Andreq Haylett <ajh@gec-mrc.co.uk> -+ * Copyright (C) 1994-1999 Alessandro Rubini <rubini@linux.it> -+ * Copyright (C) 1998 Ian Zimmerman <itz@rahul.net> -+ * Copyright (c) 2001,2002 Nico Schottelius <nico@schottelius.org> -+ * Copyright (c) 2003 Dmitry Torokhov <dtor@mail.ru> -+ * -+ * This program 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 of the License, or -+ * (at your option) any later version. -+ * -+ * This program 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 this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ ********/ -+ -+#include <stdio.h> -+#include <stdlib.h> -+#include <string.h> /* strerror(); ?!? */ -+#include <errno.h> -+#include <unistd.h> /* select(); */ -+#include <time.h> /* time() */ -+#include <sys/fcntl.h> /* O_RDONLY */ -+#include <sys/stat.h> /* mkdir() */ -+#include <asm/types.h> /* __u32 */ -+ -+#include <linux/vt.h> /* VT_GETSTATE */ -+#include <sys/kd.h> /* KDGETMODE */ -+#include <termios.h> /* winsize */ -+ -+#include "headers/gpmInt.h" -+#include "headers/console.h" -+#include "headers/message.h" -+ -+#ifndef HAVE___U32 -+# ifndef _I386_TYPES_H /* /usr/include/asm/types.h */ -+typedef unsigned int __u32; -+# endif -+#endif -+ -+struct gpm_console console = { 0, DEF_LUT, 0, 0 }; -+ -+/*-------------------------------------------------------------------*/ -+static int count_digits(int num) -+{ -+ int digits = 1; -+ -+ while ((num /= 10)) -+ digits++; -+ -+ return digits; -+} -+ -+/*-------------------------------------------------------------------*/ -+char *compose_vc_name(int vc) -+{ -+ char *tty; -+ -+ tty = malloc(strlen(console.device) + count_digits(vc) + sizeof(char)); -+ if (tty) { -+ /* console is /dev/vc/0 or /dev/tty0 and we trimming the ending 0 */ -+ strncpy(tty, console.device, strlen(console.device) - 1); -+ sprintf(&tty[strlen(console.device) - 1], "%d", vc); -+ } -+ -+ return tty; -+} -+ -+/*-------------------------------------------------------------------*/ -+int open_console(int mode) -+{ -+ int fd; -+ -+ if ((fd = open(console.device, mode)) < 0) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_OPEN_CON); -+ -+ return fd; -+} -+ -+/*-------------------------------------------------------------------*/ -+int is_text_console(void) -+{ -+ int fd; -+ int kd_mode; -+ -+ fd = open_console(O_RDONLY); -+ if (ioctl(fd, KDGETMODE, &kd_mode)<0) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_IOCTL_KDGETMODE); -+ close(fd); -+ -+ return kd_mode == KD_TEXT; -+} -+ -+/*-------------------------------------------------------------------*/ -+void wait_text_console(void) -+{ -+ do { -+ sleep(2); -+ } while (!is_text_console()); -+} -+ -+/*-------------------------------------------------------------------*/ -+void refresh_console_size(void) -+{ -+ struct winsize win; -+ int fd = open_console(O_RDONLY); -+ -+ ioctl(fd, TIOCGWINSZ, &win); -+ close(fd); -+ -+ if (!win.ws_col || !win.ws_row) { -+ gpm_report(GPM_PR_DEBUG, GPM_MESS_ZERO_SCREEN_DIM); -+ console.max_x = 80; console.max_y = 25; -+ } else { -+ console.max_x = win.ws_col; console.max_y = win.ws_row; -+ } -+ gpm_report(GPM_PR_DEBUG, GPM_MESS_SCREEN_SIZE, console.max_x, console.max_y); -+} -+ -+/*-------------------------------------------------------------------*/ -+int get_console_state(unsigned char *shift_state) -+{ -+ struct vt_stat stat; -+ int fd; -+ -+ fd = open_console(O_RDONLY); -+ -+ *shift_state = 6; /* code for the ioctl */ -+ if (ioctl(fd, TIOCLINUX, shift_state) < 0) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_GET_SHIFT_STATE); -+ -+ if (ioctl(fd, VT_GETSTATE, &stat) < 0) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_GET_CONSOLE_STAT); -+ -+ close(fd); -+ -+ return stat.v_active; -+} -+ -+/*-------------------------------------------------------------------*/ -+int is_console_owner(int vc, uid_t uid) -+{ -+ struct stat statbuf; -+ char *tty; -+ int rc; -+ -+ if ((tty = compose_vc_name(vc)) == NULL) -+ gpm_report(GPM_PR_OOPS,GPM_MESS_NO_MEM); -+ -+ if ((rc = stat(tty, &statbuf)) == -1) -+ gpm_report(GPM_PR_ERR, GPM_MESS_STAT_FAILS, tty); -+ -+ free(tty); -+ -+ return rc != -1 && uid == statbuf.st_uid; -+} -+ -+/*-------------------------------------------------------------------*/ -+/* octal digit */ -+static int isodigit(const unsigned char c) -+{ -+ return ((c & ~7) == '0'); -+} -+ -+/*-------------------------------------------------------------------*/ -+/* routine to convert digits from octal notation (Andries Brouwer) */ -+static int getsym(const unsigned char *p0, unsigned char *res) -+{ -+ const unsigned char *p = p0; -+ char c; -+ -+ c = *p++; -+ if (c == '\\' && *p) { -+ c = *p++; -+ if (isodigit(c)) { -+ c -= '0'; -+ if (isodigit(*p)) c = 8*c + (*p++ - '0'); -+ if (isodigit(*p)) c = 8*c + (*p++ - '0'); -+ } -+ } -+ *res = c; -+ return (p - p0); -+} -+ -+/*-------------------------------------------------------------------*/ -+/* description missing! FIXME */ -+void console_load_lut(void) -+{ -+ extern int errno; -+ int i, c, fd; -+ unsigned char this, next; -+ static __u32 long_array[9] = { -+ 0x05050505, /* ugly, but preserves alignment */ -+ 0x00000000, /* control chars */ -+ 0x00000000, /* digits */ -+ 0x00000000, /* uppercase and '_' */ -+ 0x00000000, /* lowercase */ -+ 0x00000000, /* Latin-1 control */ -+ 0x00000000, /* Latin-1 misc */ -+ 0x00000000, /* Latin-1 uppercase */ -+ 0x00000000 /* Latin-1 lowercase */ -+ }; -+ -+#define inwordLut (long_array+1) -+ -+ for (i = 0; console.charset[i]; ) { -+ i += getsym(console.charset + i, &this); -+ if (console.charset[i] == '-' && console.charset[i + 1] != '\0') -+ i += getsym(console.charset + i + 1, &next) + 1; -+ else -+ next = this; -+ for (c = this; c <= next; c++) -+ inwordLut[c >> 5] |= 1 << (c & 0x1F); -+ } -+ -+ fd = open_console(O_WRONLY); -+ -+ if (ioctl(fd, TIOCLINUX, &long_array) < 0) { /* fd <0 is checked */ -+ if (errno == EPERM && getuid()) -+ gpm_report(GPM_PR_WARN, GPM_MESS_ROOT); /* why do we still continue?*/ -+ else if (errno == EINVAL) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_CSELECT); -+ } -+ close(fd); -+} -+ -+/*-------------------------------------------------------------------*/ -+/* Returns the name of the console (/dev/tty0 or /dev/vc/0) */ -+/* Also fills console.device */ -+char *get_console_name() -+{ -+ struct stat buf; -+ -+ /* first try the devfs device, because in the next time this will be -+ * the preferred one. If that fails, take the old console */ -+ -+ /* Check for open new console */ -+ if (stat(GPM_DEVFS_CONSOLE, &buf) == 0) -+ console.device = GPM_DEVFS_CONSOLE; -+ -+ /* Failed, try OLD console */ -+ else if (stat(GPM_OLD_CONSOLE, &buf) == 0) -+ console.device = GPM_OLD_CONSOLE; -+ else -+ gpm_report(GPM_PR_OOPS, "Can't determine console device"); -+ -+ return console.device; -+} -+ -diff -urN gpm-1.20.1/src/evdev.c gpm/src/evdev.c ---- gpm-1.20.1/src/evdev.c 1969-12-31 19:00:00.000000000 -0500 -+++ gpm/src/evdev.c 2003-10-02 01:22:42.000000000 -0500 -@@ -0,0 +1,851 @@ -+/* -+ * evdev.c - support for event input devices in linux 2.4 & 2.6 -+ * -+ * Copyright (C) 2003 Dmitry Torokhov <dtor@mail.ru> -+ * Based on XFree86 driver by Stefan Gmeiner & Peter Osterlund -+ * -+ * This program 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 of the License, or -+ * (at your option) any later version. -+ * -+ * This program 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 this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ ********/ -+ -+ -+#include <stdio.h> -+#include <stdlib.h> -+#include <unistd.h> -+#include <string.h> -+#include <time.h> -+#include <sys/select.h> -+#include <sys/time.h> -+ -+#include <linux/input.h> -+#include "headers/input-defines.h" /* misisng bits in case <linux/input.h> is old */ -+ -+#include "headers/gpm.h" -+#include "headers/gpmInt.h" -+#include "headers/console.h" -+#include "headers/message.h" -+#include "headers/optparser.h" -+ -+enum evdev_type { -+ EVDEV_UNKNOWN, -+ EVDEV_RELATIVE, -+ EVDEV_ABSOLUTE, -+ EVDEV_TOUCHPAD, -+ EVDEV_SYNAPTICS -+}; -+ -+enum touch_type { -+ TOUCH_NONE, -+ TOUCH_FINGERS, -+ TOUCH_PALM -+}; -+ -+enum gesture_type { -+ GESTURE_NONE, -+ GESTURE_TAP_PENDING, -+ GESTURE_TAP, -+ GESTURE_DRAG_PENDING, -+ GESTURE_DRAG, -+ GESTURE_DOUBLE_TAP -+}; -+ -+enum edge_type { -+ BOTTOM_EDGE = 1, -+ TOP_EDGE = 2, -+ LEFT_EDGE = 4, -+ RIGHT_EDGE = 8, -+ LEFT_BOTTOM_EDGE = BOTTOM_EDGE | LEFT_EDGE, -+ RIGHT_BOTTOM_EDGE = BOTTOM_EDGE | RIGHT_EDGE, -+ RIGHT_TOP_EDGE = TOP_EDGE | RIGHT_EDGE, -+ LEFT_TOP_EDGE = TOP_EDGE | LEFT_EDGE -+}; -+ -+struct event_data { -+ int dx, dy; -+ int wdx, wdy; -+ int abs_x, abs_y; -+ int buttons; -+ int touch; /* dumb touchpad report touch events, smart ones - pressure */ -+ int pressure; -+ int w; -+ int finger_count; -+ int synced; -+}; -+ -+struct touch_data { -+ int touching; -+ int x, y; -+ int finger_count; -+ int buttons; -+ int clicks; -+ struct timeval start; -+ enum gesture_type gesture; -+}; -+ -+struct event_device { -+ enum evdev_type type; -+ int dont_sync; -+ -+ struct event_data pkt; -+ int pkt_count; -+ -+ int prev_x[4], prev_y[4]; -+ int prev_pressure, avg_w; -+ struct touch_data touch; -+ -+ int left_edge, right_edge; -+ int top_edge, bottom_edge; -+ int touch_high, touch_low; -+ int tap_time, tap_move; -+ int y_inverted; -+ -+ enum touch_type (*detect_touch)(struct event_device *evdev); -+ void (*update_finger_count)(struct event_device *evdev); -+}; -+ -+struct evdev_capabilities { -+ unsigned char evbits[EV_MAX/8 + 1]; -+ unsigned char keybits[KEY_MAX/8 + 1]; -+ unsigned char absbits[ABS_MAX/8 + 1]; -+ unsigned char mscbits[MSC_MAX/8 + 1]; -+}; -+ -+#ifndef max -+#define max(a,b) ((a)>(b) ? (a) : (b)) -+#endif -+ -+#define fx(i) (evdev->prev_x[(evdev->pkt_count - (i)) & 03]) -+#define fy(i) (evdev->prev_y[(evdev->pkt_count - (i)) & 03]) -+ -+#define toggle_btn(btn, val) do { if (val) data->buttons |= (btn);\ -+ else data->buttons &= ~(btn);\ -+ } while (0) -+#define GET_TIME(tv) (gettimeofday(&tv, (struct timezone *)NULL)) -+#define DIF_TIME(t1,t2) ((t2.tv_sec - t1.tv_sec) * 1000 + (t2.tv_usec - t1.tv_usec) / 1000) -+ -+#define test_bit(bit, array) (array[bit / 8] & (1 << (bit % 8))) -+ -+/* ------------- evdev protocol handling routines ---------------------*/ -+ -+static void parse_input_event(struct input_event *event, struct event_data *data) -+{ -+ switch (event->type) { -+ case EV_REL: -+ switch (event->code) { -+ case REL_X: -+ data->dx = (signed char)event->value; -+ break; -+ case REL_Y: -+ data->dy = (signed char)event->value; -+ break; -+ case REL_WHEEL: -+ data->wdy += event->value; -+ break; -+ case REL_HWHEEL: -+ data->wdx += event->value; -+ break; -+ } -+ break; -+ -+ case EV_ABS: -+ switch (event->code) { -+ case ABS_X: -+ data->abs_x = event->value; -+ break; -+ -+ case ABS_Y: -+ data->abs_y = event->value; -+ break; -+ -+ case ABS_PRESSURE: -+ data->pressure = event->value; -+ break; -+ -+ case ABS_TOOL_WIDTH: -+ data->w = event->value; -+ break; -+ } -+ break; -+ -+ case EV_MSC: -+ switch (event->code) { -+ case MSC_GESTURE: -+ data->w = event->value; -+ break; -+ } -+ break; -+ -+ -+ case EV_KEY: -+ switch(event->code) { -+ case BTN_0: -+ case BTN_LEFT: -+ toggle_btn(GPM_B_LEFT, event->value); -+ break; -+ -+ case BTN_2: -+ case BTN_STYLUS2: -+ case BTN_SIDE: -+ case BTN_MIDDLE: -+ toggle_btn(GPM_B_MIDDLE, event->value); -+ break; -+ -+ case BTN_STYLUS: -+ case BTN_1: -+ case BTN_RIGHT: -+ toggle_btn(GPM_B_RIGHT, event->value); -+ break; -+ -+ case BTN_TOUCH: -+ data->touch = event->value ? 1 : 0; -+ break; -+ -+ case BTN_TOOL_FINGER: -+ if (event->value) data->finger_count = 1; -+ break; -+ -+ case BTN_TOOL_DOUBLETAP: -+ if (event->value) data->finger_count = 2; -+ break; -+ -+ case BTN_TOOL_TRIPLETAP: -+ if (event->value) data->finger_count = 3; -+ break; -+ -+ } -+ break; -+ -+ case EV_SYNC: -+ switch(event->code) { -+ case SYN_REPORT: -+ data->synced = 1; -+ break; -+ } -+ break; -+ } -+} -+ -+static void tp_figure_deltas(struct event_device *evdev, struct Gpm_Event *state) -+{ -+ struct event_data *pkt = &evdev->pkt; -+ -+ state->dx = state->dy = 0; -+ if (evdev->touch.touching) { -+ fx(0) = pkt->abs_x; -+ fy(0) = pkt->abs_y; -+ if (evdev->pkt_count >= 2 && -+ evdev->touch.gesture != GESTURE_DRAG_PENDING) { -+ state->dx = ((fx(0) - fx(1)) / 2 + (fx(1) - fx(2)) / 2) / 8; //SYN_REL_DECEL_FACTOR; -+ state->dy = ((fy(0) - fy(1)) / 2 + (fy(1) - fy(2)) / 2) / 8; //SYN_REL_DECEL_FACTOR; -+ } -+ evdev->pkt_count++; -+ } else { -+ evdev->pkt_count = 0; -+ } -+} -+ -+static enum touch_type dumb_tp_detect_touch(struct event_device *evdev) -+{ -+ return evdev->pkt.touch ? TOUCH_FINGERS : TOUCH_NONE; -+} -+ -+static enum touch_type smart_tp_detect_touch(struct event_device *evdev) -+{ -+ if (evdev->touch.touching) -+ return evdev->pkt.pressure > evdev->touch_low ? TOUCH_FINGERS : TOUCH_NONE; -+ else -+ return evdev->pkt.pressure > evdev->touch_high ? TOUCH_FINGERS : TOUCH_NONE; -+} -+ -+static enum touch_type syn_detect_touch(struct event_device *evdev) -+{ -+ struct event_data *pkt = &evdev->pkt; -+ enum touch_type type = TOUCH_NONE; -+ -+ if (pkt->pressure > 200 || pkt->w > 10) -+ return TOUCH_PALM; -+ -+ if (pkt->abs_x == 0) -+ evdev->avg_w = 0; -+ else -+ evdev->avg_w = (pkt->w - evdev->avg_w + 1) / 2; -+ -+ if (evdev->touch.touching) { -+ type = pkt->pressure > evdev->touch_low ? TOUCH_FINGERS : TOUCH_NONE; -+ } else if (pkt->pressure > evdev->touch_high) { -+ int safe_w = max(pkt->w, evdev->avg_w); -+ -+ if (pkt->finger_count > 1) -+ type = TOUCH_FINGERS; -+ else if (pkt->w < 2) -+ type = TOUCH_FINGERS; /* more than one finger -> not a palm */ -+ else if (safe_w < 6 && evdev->prev_pressure < evdev->touch_high) -+ type = TOUCH_FINGERS; /* thin finger, distinct touch -> not a palm */ -+ else if (safe_w < 7 && evdev->prev_pressure < evdev->touch_high / 2) -+ type = TOUCH_FINGERS; /* thin finger, distinct touch -> not a palm */ -+ else if (pkt->pressure > evdev->prev_pressure + 1) -+ type = TOUCH_NONE; /* pressure not stable, may be a palm */ -+ else if (pkt->pressure < evdev->prev_pressure - 5) -+ type = TOUCH_NONE; /* pressure not stable, may be a palm */ -+ else -+ type = TOUCH_FINGERS; -+ } -+ -+ evdev->prev_pressure = pkt->pressure; -+ return type; -+} -+ -+static enum edge_type tp_detect_edges(struct event_device *evdev, int x, int y) -+{ -+ enum edge_type edge = 0; -+ -+ if (x > evdev->right_edge) -+ edge |= RIGHT_EDGE; -+ else if (x < evdev->left_edge) -+ edge |= LEFT_EDGE; -+ -+ if (y < evdev->top_edge) -+ edge |= TOP_EDGE; -+ else if (y > evdev->bottom_edge) -+ edge |= BOTTOM_EDGE; -+ -+ return edge; -+} -+ -+static int tp_touch_expired(struct event_device *evdev) -+{ -+ struct timeval now; -+ -+ GET_TIME(now); -+ return DIF_TIME(evdev->touch.start, now) > evdev->tap_time; -+} -+ -+static int tp_detect_tap(struct event_device *evdev) -+{ -+ return !tp_touch_expired(evdev) && -+ (evdev->touch.finger_count > 1 || -+ (abs(evdev->pkt.abs_x - evdev->touch.x) < evdev->tap_move && -+ abs(evdev->pkt.abs_y - evdev->touch.y) < evdev->tap_move)); -+} -+ -+static int tp_tap_to_buttons(struct event_device *evdev) -+{ -+ enum edge_type edge; -+ if (evdev->touch.finger_count < 2) { -+ edge = tp_detect_edges(evdev, evdev->pkt.abs_x, evdev->pkt.abs_y); -+ switch (edge) { -+ case RIGHT_TOP_EDGE: -+ return GPM_B_MIDDLE; -+ break; -+ case RIGHT_BOTTOM_EDGE: -+ return GPM_B_RIGHT; -+ break; -+ default: -+ return GPM_B_LEFT; -+ break; -+ } -+ } else { -+ switch (evdev->touch.finger_count) { -+ case 2: -+ return GPM_B_MIDDLE; -+ case 3: -+ return GPM_B_RIGHT; -+ default: -+ return GPM_B_LEFT; -+ } -+ } -+} -+ -+static void tp_detect_gesture(struct event_device *evdev, int timed_out, enum touch_type touch_type) -+{ -+ struct touch_data *touch = &evdev->touch; -+ int was_touching = touch->touching; -+ -+ touch->touching = touch_type == TOUCH_FINGERS; -+ -+ if (touch->touching) { -+ if (!was_touching) { -+ GET_TIME(touch->start); -+ touch->finger_count = 0; -+ if (touch->gesture == GESTURE_TAP_PENDING) { -+ touch->gesture = GESTURE_DRAG_PENDING; -+ } else { -+ touch->x = evdev->pkt.abs_x; -+ touch->y = evdev->pkt.abs_y; -+ touch->buttons = 0; -+ } -+ } else if (touch->gesture == GESTURE_DRAG_PENDING && tp_touch_expired(evdev)) { -+ touch->gesture = GESTURE_DRAG; -+ } -+ } else { -+ if (was_touching) { -+ if (tp_detect_tap(evdev)) { -+ if (touch->gesture == GESTURE_DRAG_PENDING) { -+ touch->gesture = GESTURE_DOUBLE_TAP; -+ touch->clicks = 4; -+ } else { -+ if ((touch->buttons = tp_tap_to_buttons(evdev)) == GPM_B_LEFT) { -+ touch->gesture = GESTURE_TAP_PENDING; -+ } else { -+ touch->gesture = GESTURE_TAP; -+ touch->clicks = 2; -+ } -+ } -+ } else { -+ touch->gesture = GESTURE_NONE; -+ } -+ } else { -+ if (touch->gesture == GESTURE_TAP_PENDING && tp_touch_expired(evdev)) { -+ touch->gesture = GESTURE_TAP; -+ touch->clicks = 2; -+ } -+ } -+ } -+} -+ -+static int tp_process_gesture(struct event_device *evdev, struct Gpm_Event *state) -+{ -+ int next_timeout = -1; -+ -+ switch(evdev->touch.gesture) { -+ case GESTURE_DOUBLE_TAP: -+ case GESTURE_TAP: -+ if (--evdev->touch.clicks == 0) -+ evdev->touch.gesture = GESTURE_NONE; -+ else -+ next_timeout = 0; -+ -+ if (evdev->touch.clicks % 2) -+ state->buttons |= evdev->touch.buttons; -+ else -+ state->buttons &= ~evdev->touch.buttons; -+ break; -+ -+ case GESTURE_DRAG: -+ state->buttons |= evdev->touch.buttons; -+ break; -+ -+ case GESTURE_DRAG_PENDING: -+ case GESTURE_TAP_PENDING: -+ next_timeout = evdev->tap_time; -+ break; -+ -+ default: -+ break; -+ } -+ return next_timeout; -+} -+ -+static void tp_update_finger_count(struct event_device *evdev) -+{ -+ evdev->touch.finger_count = max(evdev->pkt.finger_count, evdev->touch.finger_count); -+} -+ -+static void syn_update_finger_count(struct event_device *evdev) -+{ -+ if (evdev->pkt.w == 1) -+ evdev->touch.finger_count = 3; -+ else if (evdev->pkt.w == 0 && evdev->touch.finger_count != 3) -+ evdev->touch.finger_count = 2; -+ else -+ evdev->touch.finger_count = 1; -+} -+ -+static int compose_gpm_event(struct event_device *evdev, int timed_out, Gpm_Event *state) -+{ -+ struct event_data *pkt = &evdev->pkt; -+ enum touch_type touch_type; -+ int next_timeout = -1; -+ -+ if (!timed_out) { -+ state->buttons = pkt->buttons; -+ state->wdx = pkt->wdx; state->wdy = pkt->wdy; -+ } -+ -+ switch (evdev->type) { -+ case EVDEV_RELATIVE: -+ if (!timed_out) { -+ state->dx = pkt->dx; state->dy = pkt->dy; -+ if (evdev->pkt.touch) -+ state->buttons |= GPM_B_LEFT; -+ else -+ state->buttons &= ~GPM_B_LEFT; -+ } -+ break; -+ -+ case EVDEV_ABSOLUTE: -+ if (!timed_out) { -+ if (pkt->abs_x < evdev->left_edge) -+ pkt->abs_x = evdev->left_edge; -+ else if (pkt->abs_x > evdev->right_edge) -+ pkt->abs_x = evdev->right_edge; -+ -+ if (pkt->abs_y > evdev->bottom_edge) -+ pkt->abs_y = evdev->bottom_edge; -+ else if (pkt->abs_y < evdev->top_edge) -+ pkt->abs_y = evdev->top_edge; -+ -+ state->x = (pkt->abs_x - evdev->left_edge) * -+ console.max_x / (evdev->right_edge - evdev->left_edge); -+ state->y = (pkt->abs_y - evdev->top_edge) * -+ console.max_y / (evdev->bottom_edge - evdev->top_edge); -+ -+ if (evdev->y_inverted) state->y = console.max_y - state->y; -+ -+ if (evdev->pkt.touch) -+ state->buttons |= GPM_B_LEFT; -+ else -+ state->buttons &= ~GPM_B_LEFT; -+ } -+ break; -+ -+ case EVDEV_TOUCHPAD: -+ case EVDEV_SYNAPTICS: -+ touch_type = timed_out ? TOUCH_NONE : evdev->detect_touch(evdev); -+ -+ if (touch_type != TOUCH_PALM) { -+ tp_detect_gesture(evdev, timed_out, touch_type); -+ -+ if (evdev->touch.touching && !tp_touch_expired(evdev)) -+ evdev->update_finger_count(evdev); -+ -+ if (evdev->touch.finger_count < 2) -+ tp_figure_deltas(evdev, state); -+ -+ next_timeout = tp_process_gesture(evdev, state); -+ } -+ break; -+ -+ default: -+ /* should not happen */ -+ gpm_report(GPM_PR_OOPS, "Bad evdev type %d", evdev->type); -+ break; -+ } -+ -+ if (evdev->y_inverted) state->dy = -state->dy; -+ -+ return next_timeout; -+} -+ -+int M_evdev(struct micedev *dev, struct miceopt *opts, -+ unsigned char *data, struct Gpm_Event *state) -+{ -+ struct event_device *evdev = dev->private; -+ struct input_event *event = (struct input_event *)data; -+ int timed_out = data == NULL; -+ -+ if (!timed_out) -+ parse_input_event(event, &evdev->pkt); -+ -+ if (timed_out || evdev->pkt.synced || evdev->dont_sync) { -+ dev->timeout = compose_gpm_event(evdev, timed_out, state); -+ evdev->pkt.dx = evdev->pkt.dy = 0; -+ evdev->pkt.wdx = evdev->pkt.wdy = 0; -+ evdev->pkt.finger_count = 0; -+ evdev->pkt.synced = 0; -+ return 0; -+ } -+ -+ dev->timeout = -1; -+ return -1; -+} -+ -+/* ------------- evdev initialization routines ---------------------*/ -+ -+static int evdev_get_id(int fd, struct input_id *id) -+{ -+ if (ioctl(fd, EVIOCGID, id) < 0) { -+ gpm_report(GPM_PR_ERR, "evdev: cannot query device identification"); -+ return -1; -+ } -+ return 0; -+} -+ -+static int evdev_get_capabilities(int fd, struct evdev_capabilities *caps) -+{ -+ memset(caps, 0, sizeof(*caps)); -+ -+ if (ioctl(fd, EVIOCGBIT(0, EV_MAX), caps->evbits) < 0) { -+ gpm_report(GPM_PR_ERR, "evdev: cannot query device capabilities"); -+ return -1; -+ } -+ -+ if (test_bit(EV_ABS, caps->evbits) && -+ ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(caps->absbits)), caps->absbits) < 0) { -+ gpm_report(GPM_PR_ERR, "evdev: cannot query ABS device capabilities"); -+ return -1; -+ } -+ -+ if (test_bit(EV_KEY, caps->evbits) && -+ ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(caps->keybits)), caps->keybits) < 0) { -+ gpm_report(GPM_PR_ERR, "evdev: cannot query KEY device capabilities"); -+ return -1; -+ } -+ -+ if (test_bit(EV_MSC, caps->evbits) && -+ ioctl(fd, EVIOCGBIT(EV_MSC, sizeof(caps->mscbits)), caps->mscbits) < 0) { -+ /* don't complain as 2.4 kernels didnt have it -+ gpm_report(GPM_PR_ERR, "evdev: cannot query MSC device capabilities"); -+ return -1; -+ */ -+ } -+ return 0; -+} -+ -+static int evdev_query_axis(int fd, int axis, int *axis_min, int *axis_max) -+{ -+ struct input_absinfo axis_info; -+ -+ if (ioctl(fd, EVIOCGABS(axis), &axis_info) == -1) { -+ gpm_report(GPM_PR_ERR, "evdev: could not query axis data"); -+ return -1; -+ } -+ -+ *axis_min = axis_info.minimum; -+ *axis_max = axis_info.maximum; -+ return 0; -+} -+ -+static int evdev_get_limits(int fd, struct event_device *evdev, -+ struct evdev_capabilities *caps) -+{ -+ if (test_bit(ABS_X, caps->absbits) && -+ evdev_query_axis(fd, ABS_X, &evdev->left_edge, &evdev->right_edge) < 0) -+ return -1; -+ -+ if (test_bit(ABS_Y, caps->absbits) && -+ evdev_query_axis(fd, ABS_Y, &evdev->top_edge, &evdev->bottom_edge) < 0) -+ return -1; -+ -+ return 0; -+} -+ -+static int is_synaptics(struct input_id *id) -+{ -+ return id->bustype == BUS_I8042 && id->vendor == 0x0002 && id->product == PSMOUSE_SYNAPTICS; -+} -+ -+static enum evdev_type evdev_guess_type(struct input_id *id, struct evdev_capabilities *caps) -+{ -+ if (test_bit(EV_ABS, caps->evbits)) { -+ if (is_synaptics(id)) -+ return EVDEV_SYNAPTICS; -+ -+ if (test_bit(BTN_TOUCH, caps->keybits) && caps->keybits[BTN_MOUSE / 8]) -+ return EVDEV_TOUCHPAD; -+ -+ return EVDEV_ABSOLUTE; -+ } -+ -+ if (!test_bit(EV_REL, caps->evbits)) { -+ gpm_report(GPM_PR_ERR, -+ "evdev: device does not report neither absolute nor relative coordinates"); -+ return EVDEV_UNKNOWN; -+ } -+ -+ return EVDEV_RELATIVE; -+} -+ -+static enum evdev_type evdev_str_to_type(const char *type) -+{ -+ if (!strcmp(type, "relative")) { -+ return EVDEV_RELATIVE; -+ } else if (!strcmp(type, "absolute")) { -+ return EVDEV_ABSOLUTE; -+ } else if (!strcmp(type, "touchpad")) { -+ return EVDEV_TOUCHPAD; -+ } else if (!strcmp(type, "synaptics")) { -+ return EVDEV_SYNAPTICS; -+ } else { -+ gpm_report(GPM_PR_ERR, "evdev: unknown type '%s'", type); -+ return EVDEV_UNKNOWN; -+ } -+} -+ -+static void warn_if_present(struct option_helper *optinfo, const char *name, const char *type) -+{ -+ if (is_option_present(optinfo, name)) -+ gpm_report(GPM_PR_WARN, -+ "evdev: option '%s' is not valud for type '%s', ignored", -+ name, type); -+} -+ -+// -o type=(auto|synaptics|touchpad|relative|absolute),y_inverse, -+// left=1234,right=1234,top=1234,bottom=1234, -+// touch_high=30,touch_low=25,tap_time=30,tap_move=100 -+static int evdev_apply_options(struct event_device *evdev, char *optstring) -+{ -+ char *type = "auto"; -+ struct option_helper optinfo[] = { -+ { "type", OPT_STRING, u: { sptr: &type } }, -+ { "y_inverted", OPT_BOOL, u: { iptr: &evdev->y_inverted }, value: 1 }, -+ { "left", OPT_INT, u: { iptr: &evdev->left_edge } }, -+ { "right", OPT_INT, u: { iptr: &evdev->right_edge } }, -+ { "top", OPT_INT, u: { iptr: &evdev->top_edge } }, -+ { "bottom", OPT_INT, u: { iptr: &evdev->bottom_edge } }, -+ { "touch_high", OPT_INT, u: { iptr: &evdev->touch_high } }, -+ { "touch_low", OPT_INT, u: { iptr: &evdev->touch_low } }, -+ { "tap_time", OPT_INT, u: { iptr: &evdev->tap_time } }, -+ { "tap_move", OPT_INT, u: { iptr: &evdev->tap_move } }, -+ { "", OPT_END } -+ }; -+ -+ if (parse_options("evdev", optstring, ',', optinfo) < 0) -+ return -1; -+ -+ if (strcmp(type, "auto")) -+ evdev->type = evdev_str_to_type(type); -+ -+ switch (evdev->type) { -+ case EVDEV_RELATIVE: -+ warn_if_present(optinfo, "left", type); -+ warn_if_present(optinfo, "right", type); -+ warn_if_present(optinfo, "top", type); -+ warn_if_present(optinfo, "bottom", type); -+ warn_if_present(optinfo, "tap_move", type); -+ warn_if_present(optinfo, "tap_time", type); -+ warn_if_present(optinfo, "touch_high", type); -+ warn_if_present(optinfo, "touch_low", type); -+ break; -+ -+ case EVDEV_ABSOLUTE: -+ warn_if_present(optinfo, "tap_move", type); -+ warn_if_present(optinfo, "tap_time", type); -+ warn_if_present(optinfo, "touch_high", type); -+ warn_if_present(optinfo, "touch_low", type); -+ break; -+ -+ case EVDEV_TOUCHPAD: -+ break; -+ -+ case EVDEV_SYNAPTICS: -+ warn_if_present(optinfo, "y_inverted", type); -+ break; -+ -+ default: -+ return -1; -+ } -+ return 0; -+} -+ -+int I_evdev(struct micedev *dev, struct miceopt *opts, Gpm_Type *type) -+{ -+ struct input_id id; -+ struct evdev_capabilities caps; -+ struct event_device *evdev; -+ -+ if (!dev->private) { /* called first time, not re-init */ -+ if (!(dev->private = evdev = malloc(sizeof(*evdev)))) -+ gpm_report(GPM_PR_OOPS, "Can't allocate memory for event device"); -+ -+ memset(evdev, 0, sizeof(*evdev)); -+ -+ if (evdev_get_id(dev->fd, &id)) -+ goto init_fail; -+ -+ if (evdev_get_capabilities(dev->fd, &caps)) -+ goto init_fail; -+ -+ evdev->type = evdev_guess_type(&id, &caps); -+ -+ /* load default values - suitable for my synaptics ;P */ -+ evdev->left_edge = 1900; -+ evdev->right_edge = 5300; -+ evdev->top_edge = 2000; -+ evdev->bottom_edge = 3900; -+ evdev->tap_time = 180; -+ evdev->tap_move = 220; -+ evdev->touch_high = 30; -+ evdev->touch_low = 25; -+ -+ if (evdev->type == EVDEV_ABSOLUTE && evdev_get_limits(dev->fd, evdev, &caps) < 0) -+ goto init_fail; -+ -+ if (evdev_apply_options(evdev, opts->text) < 0) -+ goto init_fail; -+ -+ if (!test_bit(EV_SYNC, caps.evbits)) { -+ evdev->dont_sync = 1; -+ if (evdev->type == EVDEV_TOUCHPAD || evdev->type == EVDEV_SYNAPTICS) { -+ gpm_report(GPM_PR_ERR, -+ "evdev: The running kernel lacks EV_SYNC support which is required for touchpad/synaptics mode"); -+ goto init_fail; -+ } -+ } -+ -+ switch (evdev->type) { -+ case EVDEV_RELATIVE: -+ gpm_report(GPM_PR_INFO, "evdev: selected Relative mode"); -+ if (!test_bit(EV_REL, caps.evbits)) -+ gpm_report(GPM_PR_WARN, "evdev: selected relative mode but device does not report any relative events"); -+ break; -+ -+ case EVDEV_ABSOLUTE: -+ gpm_report(GPM_PR_INFO, "evdev: selected Absolute mode"); -+ if (evdev->right_edge <= evdev->left_edge) { -+ gpm_report(GPM_PR_ERR, "evdev: right edge value should be gerater than left"); -+ goto init_fail; -+ } -+ if (evdev->bottom_edge <= evdev->top_edge) { -+ gpm_report(GPM_PR_ERR, "evdev: bottom edge value should be gerater than top"); -+ goto init_fail; -+ } -+ if (!test_bit(EV_ABS, caps.evbits)) -+ gpm_report(GPM_PR_WARN, "evdev: selected absolute mode but device does not report any absolute events"); -+ opts->absolute = 1; -+ break; -+ -+ case EVDEV_TOUCHPAD: -+ gpm_report(GPM_PR_INFO, "evdev: selected Touchpad mode"); -+ if (!test_bit(EV_ABS, caps.evbits)) -+ gpm_report(GPM_PR_WARN, "evdev: selected touchpad mode but device does not report any absolute events"); -+ if (test_bit(ABS_PRESSURE, caps.absbits)) -+ evdev->detect_touch = smart_tp_detect_touch; -+ else if (test_bit(BTN_TOUCH, caps.keybits)) -+ evdev->detect_touch = dumb_tp_detect_touch; -+ else -+ gpm_report(GPM_PR_WARN, "evdev: selected touchpad mode but device does not report pressure not touch events"); -+ evdev->update_finger_count = tp_update_finger_count; -+ break; -+ -+ case EVDEV_SYNAPTICS: -+ gpm_report(GPM_PR_INFO, "evdev: selected Synaptics mode"); -+ if (!is_synaptics(&id)) -+ gpm_report(GPM_PR_WARN, "evdev: idevice isn't identified as Synaptics"); -+ if (!test_bit(EV_ABS, caps.evbits)) -+ gpm_report(GPM_PR_WARN, "evdev: selected synaptics mode but device does not report any absolute events"); -+ if (!test_bit(ABS_PRESSURE, caps.absbits)) -+ gpm_report(GPM_PR_WARN, "evdev: selected synaptics mode but device does not report pressure"); -+ if (test_bit(EV_MSC, caps.evbits) && test_bit(MSC_GESTURE, caps.mscbits)) { -+ /* this is compatibility mode with pre 2.6-test6 kernels */ -+ evdev->update_finger_count = syn_update_finger_count; -+ evdev->y_inverted = 1; -+ } else { -+ evdev->update_finger_count = tp_update_finger_count; -+ } -+ evdev->detect_touch = syn_detect_touch; -+ break; -+ -+ default: -+ break; -+ } -+ } -+ -+ return 0; -+ -+init_fail: -+ free(dev->private); -+ return -1; -+} -+ -diff -urN gpm-1.20.1/src/gpm.c gpm/src/gpm.c ---- gpm-1.20.1/src/gpm.c 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/gpm.c 2003-10-02 01:22:42.000000000 -0500 -@@ -24,1108 +24,607 @@ - #include <stdio.h> - #include <stdlib.h> - #include <string.h> /* strerror(); ?!? */ -+#include <limits.h> - #include <errno.h> - #include <unistd.h> /* select(); */ - #include <signal.h> /* SIGPIPE */ - #include <time.h> /* time() */ --#include <sys/param.h> - #include <sys/fcntl.h> /* O_RDONLY */ - #include <sys/wait.h> /* wait() */ --#include <sys/stat.h> /* mkdir() */ - #include <sys/time.h> /* timeval */ --#include <sys/types.h> /* socket() */ --#include <sys/socket.h> /* socket() */ --#include <sys/un.h> /* struct sockaddr_un */ -- --#include <linux/vt.h> /* VT_GETSTATE */ --#include <sys/kd.h> /* KDGETMODE */ --#include <termios.h> /* winsize */ - - #include "headers/gpmInt.h" - #include "headers/message.h" -- --/* who the f*** runs gpm without glibc? doesn't have dietlibc __socklent_t? */ --#if !defined(__GLIBC__) -- typedef unsigned int __socklen_t; --#endif /* __GLIBC__ */ -+#include "headers/console.h" -+#include "headers/selection.h" -+#include "headers/client.h" - - #ifndef max - #define max(a,b) ((a)>(b) ? (a) : (b)) - #endif - --extern int errno; -- --static void gpm_killed(int); -- --/* -- * all the values duplicated for dual-mouse operation are -- * now in this structure (see gpmInt.h) -- * mouse_table[0] is single mouse, mouse_table[1] and mouse_table[2] -- * are copied data from mouse_table[0] for dual mouse operation. -- */ -- --struct mouse_features mouse_table[3] = { -- { -- DEF_TYPE, DEF_DEV, DEF_SEQUENCE, -- DEF_BAUD, DEF_SAMPLE, DEF_DELTA, DEF_ACCEL, DEF_SCALE, 0 /* scaley */, -- DEF_TIME, DEF_CLUSTER, DEF_THREE, DEF_GLIDEPOINT_TAP, -- (char *)NULL /* extra */, -- (Gpm_Type *)NULL, -- -1 -- } --}; --struct mouse_features *which_mouse; -- --/* These are only the 'global' options */ -- --char *opt_lut=DEF_LUT; --int opt_test=DEF_TEST; --int opt_ptrdrag=DEF_PTRDRAG; --int opt_double=0; --int opt_aged = 0; --char *opt_special=NULL; /* special commands, like reboot or such */ --int opt_rawrep=0; --Gpm_Type *repeated_type=0; -- --static int opt_resize=0; /* not really an option */ --struct winsize win; --int maxx, maxy; --int fifofd=-1; -- --int eventFlag=0; --Gpm_Cinfo *cinfo[MAX_VC+1]; --fd_set selSet, readySet, connSet; -- --time_t last_selection_time; --time_t opt_age_limit = 0; -- --/* BRAINDEAD..ok not really, but got to leave anyway... FIXME */ --/* argc and argv for mice initialization */ --static int mouse_argc[3]; /* 0 for default (unused) and two mice */ --static char **mouse_argv[3]; /* 0 for default (unused) and two mice */ -- --/*===================================================================*/ --/* -- * first, all the stuff that used to be in gpn.c (i.e., not main-loop) -- */ --/*-------------------------------------------------------------------*/ -+#ifndef min -+#define min(a,b) ((a)<(b) ? (a) : (b)) -+#endif - --/* build_argv is used for mouse initialization routines */ --static char **build_argv(char *argv0, char *str, int *argcptr, char sep) --{ -- int argc = 1; -- char **argv; -- char *s; -- -- /* argv0 is never NULL, but the extra string may well be */ -- if (str) -- for (s=str; sep && (s = strchr(s, sep)); argc++) s++; -- -- argv = calloc(argc+2, sizeof(char **)); -- if (!argv) gpm_report(GPM_PR_OOPS,GPM_MESS_ALLOC_FAILED); -- argv[0] = argv0; -- -- if (!str) { -- *argcptr = argc; /* 1 */ -- return argv; -- } -- /* else, add arguments */ -- s = argv[1] = strdup(str); -- argc = 2; /* first to fill */ -- -- /* ok, now split: the first one is in place, and s is the whole string */ -- for ( ; sep && (s = strchr(s, sep)) ; argc++) { -- *s = '\0'; -- s++; -- argv[argc] = s; -- } -- *argcptr = argc; -- return argv; --} -+#define NULL_SET ((fd_set *)NULL) -+#define GET_TIME(tv) (gettimeofday(&tv, (struct timezone *)NULL)) -+#define DIF_TIME(t1,t2) ((t2.tv_sec - t1.tv_sec)*1000 + (t2.tv_usec - t1.tv_usec)/1000) - --/*-------------------------------------------------------------------*/ --/* The old console option is removed. We are taking stderr now -- * In the next update there should also be support for syslog -- ********************************************************************/ - --static inline int open_console(const int mode) --{ -- int fd; -+enum mouse_rslt { MOUSE_NO_DATA, MOUSE_DATA_OK, MOUSE_MORE_DATA }; - -- if ((fd=open(option.consolename, mode)) < 0) -- gpm_report(GPM_PR_OOPS,GPM_MESS_OPEN_CON); -- return fd; --} -+extern int errno; - --/*-------------------------------------------------------------------*/ --static inline int wait_text(int *fdptr) --{ -- int fd; -- int kd_mode; -+char *opt_special=NULL; /* special commands, like reboot or such */ -+struct repeater repeater; - -- close(*fdptr); -- do -- { -- sleep(2); -- fd = open_console(O_RDONLY); -- if (ioctl(fd, KDGETMODE, &kd_mode)<0) -- gpm_report(GPM_PR_OOPS,GPM_MESS_IOCTL_KDGETMODE); -- close(fd); -- } -- while (kd_mode != KD_TEXT) ; -- -- /* reopen, reinit (the function is only used if we have one mouse device) */ -- if ((*fdptr=open(opt_dev,O_RDWR))<0) -- gpm_report(GPM_PR_OOPS,GPM_MESS_OPEN,opt_dev); -- if (m_type->init) -- m_type=(m_type->init)(*fdptr, m_type->flags, m_type, mouse_argc[1], -- mouse_argv[1]); -- return (1); --} -+static int console_resized; /* not really an option */ - - /*-------------------------------------------------------------------*/ --static inline void selection_copy(int x1, int y1, int x2, int y2, int mode) -+static void gpm_killed(int signo) - { --/* -- * The approach in "selection" causes a bus error when run under SunOS 4.1 -- * due to alignment problems... -- */ -- unsigned char buf[6*sizeof(short)]; -- unsigned short *arg = (unsigned short *)buf + 1; -- int fd; -- -- buf[sizeof(short)-1] = 2; /* set selection */ -- -- arg[0]=(unsigned short)x1; -- arg[1]=(unsigned short)y1; -- arg[2]=(unsigned short)x2; -- arg[3]=(unsigned short)y2; -- arg[4]=(unsigned short)mode; -- -- if ((fd=open_console(O_WRONLY))<0) -- gpm_report(GPM_PR_OOPS,GPM_MESS_OPEN_CON); -- /* FIXME: should be replaced with string constant (headers/message.h) */ -- gpm_report(GPM_PR_DEBUG,"ctl %i, mode %i",(int)*buf, arg[4]); -- if (ioctl(fd, TIOCLINUX, buf+sizeof(short)-1) < 0) -- gpm_report(GPM_PR_OOPS,GPM_MESS_IOCTL_TIOCLINUX); -- close(fd); -- -- if (mode < 3) { -- opt_aged = 0; -- last_selection_time = time(0); -+ if (signo == SIGWINCH) { -+ gpm_report(GPM_PR_WARN, GPM_MESS_RESIZING, option.progname, getpid()); -+ console_resized = 1; -+ } else { -+ if (signo == SIGUSR1) -+ gpm_report(GPM_PR_WARN, GPM_MESS_KILLED_BY, option.progname, getpid(), option.progname); -+ exit(0); - } - } - -- --/*-------------------------------------------------------------------*/ --/* comment missing; FIXME */ --/*-------------------------------------------------------------------*/ --static inline void selection_paste(void) --{ -- char c=3; -- int fd; -- -- if (!opt_aged && (0 != opt_age_limit) && -- (last_selection_time + opt_age_limit < time(0))) { -- opt_aged = 1; -- } -- -- if (opt_aged) { -- gpm_report(GPM_PR_DEBUG,GPM_MESS_SKIP_PASTE); -- return; -- } -- -- fd=open_console(O_WRONLY); -- if(ioctl(fd, TIOCLINUX, &c) < 0) -- gpm_report(GPM_PR_OOPS,GPM_MESS_IOCTL_TIOCLINUX); -- close(fd); --} -- --/*-------------------------------------------------------------------*/ --static inline int do_selection(Gpm_Event *event) /* returns 0, always */ --{ -- static int x1=1, y1=1, x2, y2; --#define UNPOINTER() 0 -- -- x2=event->x; y2=event->y; -- switch(GPM_BARE_EVENTS(event->type)) { -- case GPM_MOVE: -- if (x2<1) x2++; else if (x2>maxx) x2--; -- if (y2<1) y2++; else if (y2>maxy) y2--; -- selection_copy(x2,y2,x2,y2,3); /* just highlight pointer */ -- return 0; -- -- case GPM_DRAG: -- if (event->buttons==GPM_B_LEFT) { -- if (event->margin) /* fix margins */ -- switch(event->margin) { -- case GPM_TOP: x2=1; y2++; break; -- case GPM_BOT: x2=maxx; y2--; break; -- case GPM_RGT: x2--; break; -- case GPM_LFT: y2<=y1 ? x2++ : (x2=maxx, y2--); break; -- } -- selection_copy(x1,y1,x2,y2,event->clicks); -- if (event->clicks>=opt_ptrdrag && !event->margin) /* pointer */ -- selection_copy(x2,y2,x2,y2,3); -- } /* if */ -- return 0; -- -- case GPM_DOWN: -- switch (event->buttons) { -- case GPM_B_LEFT: -- x1=x2; y1=y2; -- selection_copy(x1,y1,x2,y2,event->clicks); /* start selection */ -- return 0; -- -- case GPM_B_MIDDLE: -- selection_paste(); -- return 0; -- -- case GPM_B_RIGHT: -- if (opt_three==1) -- selection_copy(x1,y1,x2,y2,event->clicks); -- else -- selection_paste(); -- return 0; -- } -- } /* switch above */ -- return 0; --} -- --/*-------------------------------------------------------------------*/ --/* returns 0 if the event has not been processed, and 1 if it has */ --static inline int do_client(Gpm_Cinfo *cinfo, Gpm_Event *event) --{ -- Gpm_Connect info=cinfo->data; -- int fd=cinfo->fd; -- /* value to return if event is not used */ -- int res = !(info.defaultMask & event->type); -- -- /* instead of returning 0, scan the stack of clients */ -- if ((info.minMod & event->modifiers) < info.minMod) -- goto scan; -- if ((info.maxMod & event->modifiers) < event->modifiers) -- goto scan; -- -- /* if not managed, use default mask */ -- if (!(info.eventMask & GPM_BARE_EVENTS(event->type))) { -- if (res) return res; -- else goto scan; -- } -- -- /* WARNING */ /* This can generate a SIGPIPE... I'd better catch it */ -- MAGIC_P((write(fd,&magic, sizeof(int)))); -- write(fd,event, sizeof(Gpm_Event)); -- -- return info.defaultMask & GPM_HARD ? res : 1; /* HARD forces pass-on */ -- -- scan: -- if (cinfo->next != 0) -- return do_client (cinfo->next, event); /* try the next */ -- return 0; /* no next, not used */ --} -- - /*------------------------------------------------------------------- - * fetch the actual device data from the mouse device, dependent on - * what Gpm_Type is being passed. - *-------------------------------------------------------------------*/ --static inline char *getMouseData(int fd, Gpm_Type *type, int kd_mode) -+static char *getMouseData(int fd, Gpm_Type *type, int text_mode) - { - static unsigned char data[32]; /* quite a big margin :) */ -- char *edata=data+type->packetlen; -- int howmany=type->howmany; -- int i,j; -+ unsigned char *pdata; -+ int len, togo; - --/*....................................... read and identify one byte */ -- -- if (read(fd, data, howmany)!=howmany) { -- if (opt_test) exit(0); -+ /*....................................... read and identify one byte */ -+ if (read(fd, data, type->howmany) != type->howmany) { - gpm_report(GPM_PR_ERR,GPM_MESS_READ_FIRST, strerror(errno)); - return NULL; - } - -- if (kd_mode!=KD_TEXT && fifofd != -1 && opt_rawrep) -- write(fifofd, data, howmany); -+ if (!text_mode && repeater.fd != -1 && repeater.raw) -+ write(repeater.fd, data, type->howmany); - -- if ((data[0]&(m_type->proto)[0]) != (m_type->proto)[1]) { -- if (m_type->getextra == 1) { -- data[1]=GPM_EXTRA_MAGIC_1; data[2]=GPM_EXTRA_MAGIC_2; -- gpm_report(GPM_PR_DEBUG,GPM_EXTRA_DATA,data[0]); -+ if ((data[0] & type->proto[0]) != type->proto[1]) { -+ if (type->getextra == 1) { -+ data[1] = GPM_EXTRA_MAGIC_1; data[2] = GPM_EXTRA_MAGIC_2; -+ gpm_report(GPM_PR_DEBUG, GPM_EXTRA_DATA, data[0]); - return data; - } -- gpm_report(GPM_PR_DEBUG,GPM_MESS_PROT_ERR); -+ gpm_report(GPM_PR_DEBUG, GPM_MESS_PROT_ERR); - return NULL; - } - --/*....................................... read the rest */ -+ /*....................................... read the rest */ - - /* - * well, this seems to work almost right with ps2 mice. However, I've never - * tried ps2 with the original selection package, which called usleep() - */ -- -- if((i=m_type->packetlen-howmany)) /* still to get */ -+ if ((togo = type->packetlen - type->howmany)) { /* still to get */ -+ pdata = &data[type->howmany]; - do { -- j = read(fd,edata-i,i); /* edata is pointer just after data */ -- if (kd_mode!=KD_TEXT && fifofd != -1 && opt_rawrep && j > 0) -- write(fifofd, edata-i, j); -- i -= j; -- } while (i && j); -- -- if (i) { -- gpm_report(GPM_PR_ERR,GPM_MESS_READ_REST, strerror(errno)); -+ if ((len = read(fd, pdata, togo)) == 0) -+ break; -+ if (!text_mode && repeater.fd != -1 && repeater.raw && len > 0) -+ write(repeater.fd, pdata, len); -+ pdata += len; -+ togo -= len; -+ } while (togo); -+ } -+ -+ if (togo) { -+ gpm_report(GPM_PR_ERR, GPM_MESS_READ_REST, strerror(errno)); - return NULL; - } - -- if ((data[1]&(m_type->proto)[2]) != (m_type->proto)[3]) { -- gpm_report(GPM_PR_INFO,GPM_MESS_SKIP_DATA); -+ if ((data[1] & type->proto[2]) != type->proto[3]) { -+ gpm_report(GPM_PR_INFO, GPM_MESS_SKIP_DATA); - return NULL; - } -- gpm_report(GPM_PR_DEBUG,GPM_MESS_DATA_4,data[0],data[1],data[2],data[3]); -+ gpm_report(GPM_PR_DEBUG, GPM_MESS_DATA_4, data[0], data[1], data[2], data[3]); - return data; - } - -- --static int statusX,statusY,statusB; /* to return info */ --static int statusC=0; /* clicks */ --void get_console_size(Gpm_Event *ePtr); -- --/*------------------------------------------------------------------- -- * call getMouseData to get hardware device data, call mouse device's fun() -- * to retrieve the hardware independent event data, then optionally repeat -- * the data via repeat_fun() to the repeater device -- *-------------------------------------------------------------------*/ --static inline int processMouse(int fd, Gpm_Event *event, Gpm_Type *type, -- int kd_mode) -+/*-------------------------------------------------------------------*/ -+void handle_console_resize(Gpm_Event *event) - { -- char *data; -- static int fine_dx, fine_dy; -- static int i, j, m; -- static Gpm_Event nEvent; -- static struct vt_stat stat; -- static struct timeval tv1={0,0}, tv2; /* tv1==0: first click is single */ -- static struct timeval timeout={0,0}; -- fd_set fdSet; -- static int newB=0, oldB=0, oldT=0; /* old buttons and Type to chain events */ -- /* static int buttonlock, buttonlockflag; */ -- --#define GET_TIME(tv) (gettimeofday(&tv, (struct timezone *)NULL)) --#define DIF_TIME(t1,t2) ((t2.tv_sec -t1.tv_sec) *1000+ \ -- (t2.tv_usec-t1.tv_usec)/1000) -- -- -- oldT=event->type; -- -- if (eventFlag) { -- eventFlag=0; -- -- if (m_type->absolute) { /* a pen or other absolute device */ -- event->x=nEvent.x; -- event->y=nEvent.y; -- } -- event->dx=nEvent.dx; -- event->dy=nEvent.dy; -- event->buttons=nEvent.buttons; -- } else { -- event->dx=event->dy=0; -- event->wdx=event->wdy=0; -- nEvent.modifiers = 0; /* some mice set them */ -- FD_ZERO(&fdSet); FD_SET(fd,&fdSet); i=0; -- -- do { /* cluster loop */ -- if(((data=getMouseData(fd,m_type,kd_mode))==NULL) -- || ((*(m_type->fun))(&nEvent,data)==-1) ) { -- if (!i) return 0; -- else break; -- } -- -- event->modifiers = nEvent.modifiers; /* propagate modifiers */ -- -- /* propagate buttons */ -- nEvent.buttons = (opt_sequence[nEvent.buttons&7]&7) | -- (nEvent.buttons & ~7); /* change the order */ -- oldB=newB; newB=nEvent.buttons; -- if (!i) event->buttons=nEvent.buttons; -- -- if (oldB!=newB) { -- eventFlag = (i!=0)*(which_mouse-mouse_table); /* 1 or 2 */ -- break; -- } -- -- /* propagate movement */ -- if (!(m_type->absolute)) { /* mouse */ -- if (abs(nEvent.dx)+abs(nEvent.dy) > opt_delta) -- nEvent.dx*=opt_accel, nEvent.dy*=opt_accel; -- -- /* increment the reported dx,dy */ -- event->dx+=nEvent.dx; -- event->dy+=nEvent.dy; -- } else { /* a pen */ -- /* get dx,dy to check if there has been movement */ -- event->dx = (nEvent.x) - (event->x); -- event->dy = (nEvent.y) - (event->y); -- } -- -- /* propagate wheel */ -- event->wdx += nEvent.wdx; -- event->wdy += nEvent.wdy; -- -- select(fd+1,&fdSet,(fd_set *)NULL,(fd_set *)NULL,&timeout/* zero */); -- -- } while (i++ <opt_cluster && nEvent.buttons==oldB && FD_ISSET(fd,&fdSet)); -- -- } /* if(eventFlag) */ -- --/*....................................... update the button number */ -+ int old_x, old_y; -+ struct micetab *mouse; - -- if ((event->buttons&GPM_B_MIDDLE) && !opt_three) opt_three++; -+ old_x = console.max_x; old_y = console.max_y; -+ refresh_console_size(); -+ if (!old_x) { /* first invocation, place the pointer in the middle */ -+ event->x = console.max_x / 2; -+ event->y = console.max_y / 2; -+ } else { /* keep the pointer in the same position where it was */ -+ event->x = event->x * console.max_x / old_x; -+ event->y = event->y * console.max_y / old_y; -+ } - --/*....................................... we're a repeater, aren't we? */ -+ for (mouse = micelist; mouse; mouse = mouse->next) { -+ /* -+ * the following operation is based on the observation that 80x50 -+ * has square cells. (An author-centric observation ;-) -+ */ -+ mouse->options.scaley = mouse->options.scalex * 50 * console.max_x / 80 / console.max_y; -+ gpm_report(GPM_PR_DEBUG, GPM_MESS_X_Y_VAL, -+ mouse->options.scalex, mouse->options.scaley); -+ } -+} - -- if (kd_mode!=KD_TEXT) { -- if (fifofd != -1 && ! opt_rawrep) { -- if (m_type->absolute) { /* hof Wed Feb 3 21:43:28 MET 1999 */ -- /* prepare the values from a absolute device for repeater mode */ -- static struct timeval rept1,rept2; -- gettimeofday(&rept2, (struct timezone *)NULL); -- if (((rept2.tv_sec -rept1.tv_sec) -- *1000+(rept2.tv_usec-rept1.tv_usec)/1000)>250) { -- event->dx=0; -- event->dy=0; -- } -- rept1=rept2; -- -- event->dy=event->dy*((win.ws_col/win.ws_row)+1); -- event->x=nEvent.x; -- event->y=nEvent.y; -- } -- repeated_type->repeat_fun(event, fifofd); /* itz Jan 11 1999 */ -+static void handle_repeater(int absolute_dev, Gpm_Event *new_event, Gpm_Event *event) -+{ -+ static struct timeval last; -+ struct timeval now; -+ -+ if (absolute_dev) { -+ /* prepare the values from a absolute device for repeater mode */ -+ GET_TIME(now); -+ if (((now.tv_sec - last.tv_sec) * 1000 + -+ (now.tv_usec - last.tv_usec) / 1000) > 250) { -+ event->dx = 0; -+ event->dy = 0; - } -- return 0; /* no events nor information for clients */ -- } /* first if of these three */ -- --/*....................................... no, we arent a repeater, go on */ -+ last = now; - -- /* use fine delta values now, if delta is the information */ -- if (!(m_type)->absolute) { -- fine_dx+=event->dx; fine_dy+=event->dy; -- event->dx=fine_dx/opt_scale; event->dy=fine_dy/opt_scaley; -- fine_dx %= opt_scale; fine_dy %= opt_scaley; -+ event->dy = event->dy * ((console.max_x / console.max_y) + 1); -+ event->x = new_event->x; -+ event->y = new_event->y; - } -+ repeater.type->repeat_fun(event, repeater.fd); -+} - -- /* up and down, up and down, ... who does a do..while(0) loop ??? -- and then makes a break into it... argh ! */ -- -- if (!event->dx && !event->dy && (event->buttons==oldB)) -- do { /* so to break */ -- static long awaketime; -- /* -- * Ret information also if never happens, but enough time has elapsed. -- * Note: return 1 will segfault due to missing event->vc; FIXME! -- */ -- if (time(NULL)<=awaketime) return 0; -- awaketime=time(NULL)+1; -- break; -- } while (0); -- --/*....................................... fill missing fields */ -- -- event->x+=event->dx, event->y+=event->dy; -- statusB=event->buttons; -- -- i=open_console(O_RDONLY); -- /* modifiers */ -- j = event->modifiers; /* save them */ -- event->modifiers=6; /* code for the ioctl */ -- if (ioctl(i,TIOCLINUX,&(event->modifiers))<0) -- gpm_report(GPM_PR_OOPS,GPM_MESS_GET_SHIFT_STATE); -- event->modifiers |= j; /* add mouse-specific bits */ -- -- /* status */ -- j = stat.v_active; -- if (ioctl(i,VT_GETSTATE,&stat)<0) gpm_report(GPM_PR_OOPS,GPM_MESS_GET_CONSOLE_STAT); -- -- /* -- * if we changed console, request the current console size, -- * as different consoles can be of different size -- */ -- if (stat.v_active != j) -- get_console_size(event); -- close(i); -- -- event->vc = stat.v_active; -- -- if (oldB==event->buttons) -- event->type = (event->buttons ? GPM_DRAG : GPM_MOVE); -- else -- event->type = (event->buttons > oldB ? GPM_DOWN : GPM_UP); -- -+static void calculate_clicks(Gpm_Event *event, int click_tmo) -+{ -+ static struct timeval release; -+ struct timeval now; -+ - switch(event->type) { /* now provide the cooked bits */ - case GPM_DOWN: -- GET_TIME(tv2); -- if (tv1.tv_sec && (DIF_TIME(tv1,tv2)<opt_time)) /* check first click */ -- statusC++, statusC%=3; /* 0, 1 or 2 */ -+ GET_TIME(now); -+ if (release.tv_sec && (DIF_TIME(release, now) < click_tmo)) /* check first click */ -+ event->clicks++, event->clicks %= 3; /* 0, 1 or 2 */ - else -- statusC=0; -- event->type|=(GPM_SINGLE<<statusC); -+ event->clicks = 0; -+ event->type |= GPM_SINGLE << event->clicks; - break; - - case GPM_UP: -- GET_TIME(tv1); -- event->buttons^=oldB; /* for button-up, tell which one */ -- event->type|= (oldT&GPM_MFLAG); -- event->type|=(GPM_SINGLE<<statusC); -+ GET_TIME(release); -+ event->type |= GPM_SINGLE << event->clicks; - break; - - case GPM_DRAG: -- event->type |= GPM_MFLAG; -- event->type|=(GPM_SINGLE<<statusC); -+ event->type |= GPM_SINGLE << event->clicks; - break; - - case GPM_MOVE: -- statusC=0; -+ event->clicks = 0; -+ - default: - break; - } -- event->clicks=statusC; -+} -+ -+static void snap_to_screen_limits(Gpm_Event *event) -+{ -+ int extent; - --/* UGLY - FIXME! */ --/* The current policy is to force the following behaviour: -- * - At buttons up, must fit inside the screen, though flags are set. -- * - At button down, allow going outside by one single step -- */ -+ /* The current policy is to force the following behaviour: -+ * - At buttons up, must fit inside the screen, though flags are set. -+ * - At button down, allow going outside by one single step -+ * DTOR: Midnight Commander seems to want the opposite... -+ */ - -+ extent = (event->type & (GPM_DRAG|GPM_UP)) ? 1 : 0; - - /* selection used 1-based coordinates, so do I */ -- - /* - * 1.05: only one margin is current. Y takes priority over X. -- * The i variable is how much margin is allowed. "m" is which one is there. - */ - -- m = 0; -- i = ((event->type&(GPM_DRAG|GPM_UP))!=0); /* i is boolean */ -- -- if (event->y>win.ws_row) {event->y=win.ws_row+1-!i; i=0; m = GPM_BOT;} -- else if (event->y<=0) {event->y=1-i; i=0; m = GPM_TOP;} -- -- if (event->x>win.ws_col) {event->x=win.ws_col+1-!i; if (!m) m = GPM_RGT;} -- else if (event->x<=0) {event->x=1-i; if (!m) m = GPM_LFT;} -+ event->margin = 0; - -- event->margin=m; -+ if (event->y > console.max_y) { -+ event->y = console.max_y + extent; -+ extent = 0; -+ event->margin = GPM_BOT; -+ } else if (event->y <= 0) { -+ event->y = 1 - extent; -+ extent = 0; -+ event->margin = GPM_TOP; -+ } - -- gpm_report(GPM_PR_DEBUG,"M: %3i %3i (%3i %3i) - butt=%i vc=%i cl=%i", -- event->dx,event->dy, -- event->x,event->y, -- event->buttons, event->vc, -- event->clicks); -+ if (event->x > console.max_x) { -+ event->x = console.max_x + extent; -+ if (!event->margin) event->margin = GPM_RGT; -+ } else if (event->x <= 0) { -+ event->x = 1 - extent; -+ if (!event->margin) event->margin = GPM_LFT; -+ } -+} - -- /* update the global state */ -- statusX=event->x; statusY=event->y; -+static int more_data_waiting(int fd) -+{ -+ static struct timeval timeout = {0, 0}; -+ fd_set fdSet; - -- if (opt_special && event->type & GPM_DOWN) -- return processSpecial(event); -+ FD_ZERO(&fdSet); -+ FD_SET(fd, &fdSet); -+ select(fd + 1, &fdSet, NULL_SET, NULL_SET, &timeout/* zero */); - -- return 1; -+ return FD_ISSET(fd, &fdSet); - } - --/*-------------------------------------------------------------------* -- * This was inline, and incurred in a compiler bug (2.7.0) -- *-------------------------------------------------------------------*/ --static int get_data(Gpm_Connect *where, int whence) -+static int multiplex_buttons(struct micetab *mouse, int new_buttons) - { -- static int i; -+ static int left_btn_clicks, mid_btn_clicks, right_btn_clicks; -+ int mask; -+ int muxed_buttons = 0; -+ -+ new_buttons = -+ (mouse->options.sequence[new_buttons & 7] & 7) | (new_buttons & ~7); -+ mask = new_buttons ^ mouse->buttons; -+ mouse->buttons = new_buttons; - --#ifdef GPM_USE_MAGIC -- while ((i=read(whence,&check,sizeof(int)))==4 && check!=GPM_MAGIC) -- gpm_report(GPM_PR_INFO,GPM_MESS_NO_MAGIC); -- -- if (!i) return 0; -- if (check!=GPM_MAGIC) { -- gpm_report(GPM_PR_INFO,GPM_MESS_NOTHING_MORE); -- return -1; -+ if (mask & GPM_B_LEFT) { -+ if (new_buttons & GPM_B_LEFT) left_btn_clicks++; -+ else left_btn_clicks--; - } --#endif -+ if (left_btn_clicks) muxed_buttons |= GPM_B_LEFT; - -- if ((i=read(whence, where, sizeof(Gpm_Connect)))!=sizeof(Gpm_Connect)) { -- return i ? -1 : 0; -+ if (mask & GPM_B_MIDDLE) { -+ if (new_buttons & GPM_B_MIDDLE) mid_btn_clicks++; -+ else mid_btn_clicks--; - } -+ if (mid_btn_clicks) muxed_buttons |= GPM_B_MIDDLE; - -- return 1; --} -+ if (mask & GPM_B_RIGHT) { -+ if (new_buttons & GPM_B_RIGHT) right_btn_clicks++; -+ else right_btn_clicks--; -+ } -+ if (right_btn_clicks) muxed_buttons |= GPM_B_RIGHT; - --static void disable_paste(int vc) --{ -- opt_aged++; -- gpm_report(GPM_PR_INFO,GPM_MESS_DISABLE_PASTE,vc); -+ return muxed_buttons; - } - --/*-------------------------------------------------------------------*/ -- /* returns -1 if closing connection */ --static inline int processRequest(Gpm_Cinfo *ci, int vc) -+/*------------------------------------------------------------------- -+ * call getMouseData to get hardware device data, call mouse device's fun() -+ * to retrieve the hardware independent event data, then optionally repeat -+ * the data via repeat_fun() to the repeater device -+ *-------------------------------------------------------------------*/ -+static enum mouse_rslt processMouse(struct micetab *mouse, int timeout, int attempt, -+ Gpm_Event *event, int text_mode) - { -+ static int last_active; -+ static int fine_dx, fine_dy; -+ static int oldB; -+ -+ static Gpm_Event nEvent; -+ struct Gpm_Type *type = mouse->type; -+ struct miceopt *opt = &mouse->options; -+ enum mouse_rslt rslt = MOUSE_DATA_OK; -+ unsigned char shift_state; -+ char *data = NULL; - int i; -- Gpm_Cinfo *cinfoPtr, *next; -- Gpm_Connect conn; -- static Gpm_Event event; -- static struct vt_stat stat; -- -- gpm_report(GPM_PR_INFO,GPM_MESS_CON_REQUEST, ci->fd, vc); -- if (vc>MAX_VC) return -1; -- -- /* itz 10-22-96 this shouldn't happen now */ -- if (vc==-1) gpm_report(GPM_PR_OOPS,GPM_MESS_UNKNOWN_FD); -- -- i=get_data(&conn,ci->fd); -- -- if (!i) { /* no data */ -- gpm_report(GPM_PR_INFO,GPM_MESS_CLOSE); -- close(ci->fd); -- FD_CLR(ci->fd,&connSet); -- FD_CLR(ci->fd,&readySet); -- if (cinfo[vc]->fd == ci->fd) { /* it was on top of the stack */ -- cinfoPtr = cinfo[vc]; -- cinfo[vc]=cinfo[vc]->next; /* pop the stack */ -- free(cinfoPtr); -- return -1; -- } -- /* somewhere inside the stack, have to walk it */ -- cinfoPtr = cinfo[vc]; -- while (cinfoPtr && cinfoPtr->next) { -- if (cinfoPtr->next->fd == ci->fd) { -- next = cinfoPtr->next; -- cinfoPtr->next = next->next; -- free (next); -+ -+ if (attempt > 1) { /* continue interrupted cluster loop */ -+ if (opt->absolute) { -+ event->x = nEvent.x; -+ event->y = nEvent.y; -+ } -+ event->dx = nEvent.dx; -+ event->dy = nEvent.dy; -+ event->buttons = nEvent.buttons; -+ } else { -+ event->dx = event->dy = 0; -+ event->wdx = event->wdy = 0; -+ nEvent.modifiers = 0; /* some mice set them */ -+ i = 0; -+ -+ do { /* cluster loop */ -+ if (!timeout && (data = getMouseData(mouse->dev.fd, type, text_mode)) != NULL) { -+ GET_TIME(mouse->timestamp); -+ } -+ -+ /* in case of timeout data passed to typr->fun() is NULL */ -+ if ((!timeout && data == NULL) || -+ type->fun(&mouse->dev, &mouse->options, data, &nEvent) == -1) { -+ if (!i) return MOUSE_NO_DATA; -+ else break; -+ } -+ -+ event->modifiers = nEvent.modifiers; /* propagate modifiers */ -+ -+ /* propagate buttons */ -+ nEvent.buttons = multiplex_buttons(mouse, nEvent.buttons); -+ -+ if (!i) event->buttons = nEvent.buttons; -+ -+ if (oldB != nEvent.buttons) { -+ rslt = MOUSE_MORE_DATA; - break; - } -- cinfoPtr = cinfoPtr->next; -- } -- return -1; -- } /* not data */ -- -- if (i == -1) return -1; /* too few bytes */ - -- if (conn.pid!=0) { -- ci->data = conn; -- return 0; -- } -- -- /* Aha, request for information (so-called snapshot) */ -- switch(conn.vc) { -- case GPM_REQ_SNAPSHOT: -- i=open_console(O_RDONLY); -- ioctl(i,VT_GETSTATE,&stat); -- event.modifiers=6; /* code for the ioctl */ -- if (ioctl(i,TIOCLINUX,&(event.modifiers))<0) -- gpm_report(GPM_PR_OOPS,GPM_MESS_GET_SHIFT_STATE); -- close(i); -- event.vc = stat.v_active; -- event.x=statusX; event.y=statusY; -- event.dx=maxx; event.dy=maxy; -- event.buttons= statusB; -- event.clicks=statusC; -- /* fall through */ -- /* missing break or do you want this ??? */ -- -- case GPM_REQ_BUTTONS: -- event.type= (opt_three==1 ? 3 : 2); /* buttons */ -- write(ci->fd,&event,sizeof(Gpm_Event)); -- break; -+ /* propagate movement */ -+ if (!opt->absolute) { /* mouse */ -+ if (abs(nEvent.dx) + abs(nEvent.dy) > opt->delta) -+ nEvent.dx *= opt->accel, nEvent.dy *= opt->accel; - -- case GPM_REQ_NOPASTE: -- disable_paste(vc); -- break; -+ /* increment the reported dx,dy */ -+ event->dx += nEvent.dx; -+ event->dy += nEvent.dy; -+ } else { /* a pen */ -+ /* get dx,dy to check if there has been movement */ -+ event->dx = nEvent.x - event->x; -+ event->dy = nEvent.y - event->y; -+ } -+ -+ /* propagate wheel */ -+ event->wdx += nEvent.wdx; -+ event->wdy += nEvent.wdy; -+ -+ } while (i++ < opt->cluster && more_data_waiting(mouse->dev.fd)); -+ } /* if(eventFlag) */ -+ -+ /*....................................... update the button number */ -+ -+ if ((event->buttons & GPM_B_MIDDLE) && !opt->three_button) opt->three_button++; -+ -+ /*....................................... we're a repeater, aren't we? */ -+ -+ if (!text_mode) { -+ if (repeater.fd != -1 && !repeater.raw) -+ handle_repeater(opt->absolute, &nEvent, event); -+ oldB = nEvent.buttons; -+ return MOUSE_NO_DATA; /* no events nor information for clients */ - } - -- return 0; --} -+/*....................................... no, we arent a repeater, go on */ - --/*-------------------------------------------------------------------*/ --static inline int processConn(int fd) /* returns newfd or -1 */ --{ -- Gpm_Cinfo *info; -- Gpm_Connect *request; -- Gpm_Cinfo *next; -- int vc, newfd; --#if !defined(__GLIBC__) -- int len; --#else /* __GLIBC__ */ -- size_t len; /* isn't that generally defined in C ??? -- nico */ --#endif /* __GLIBC__ */ -- struct sockaddr_un addr; /* reuse this each time */ -- struct stat statbuf; -- uid_t uid; -- char *tty = NULL; -- --/*....................................... Accept */ -- -- bzero((char *)&addr,sizeof(addr)); -- addr.sun_family=AF_UNIX; -- -- len=sizeof(addr); -- if ((newfd=accept(fd,(struct sockaddr *)&addr, &len))<0) { -- gpm_report(GPM_PR_ERR,GPM_MESS_ACCEPT_FAILED,strerror(errno)); -- return -1; -- } -- -- gpm_report(GPM_PR_INFO,GPM_MESS_CONECT_AT,newfd); -- -- info=malloc(sizeof(Gpm_Cinfo)); -- if (!info) gpm_report(GPM_PR_OOPS,GPM_MESS_NO_MEM); -- request=&(info->data); -- -- if(get_data(request,newfd)==-1) { -- free(info); -- close(newfd); -- return -1; -- } -- -- if ((vc=request->vc)>MAX_VC) { -- gpm_report(GPM_PR_WARN,GPM_MESS_REQUEST_ON, vc, MAX_VC); -- free(info); -- close(newfd); -- return -1; -- } -- --#ifndef SO_PEERCRED -- if (stat (addr.sun_path, &statbuf) == -1 || !S_ISSOCK(statbuf.st_mode)) { -- gpm_report(GPM_PR_ERR,GPM_MESS_ADDRES_NSOCKET,addr.sun_path); -- free(info); /* itz 10-12-95 verify client's right */ -- close(newfd); -- return -1; /* to read requested tty */ -+ /* use fine delta values now, if delta is the information */ -+ if (!opt->absolute) { -+ fine_dx += event->dx; -+ fine_dy += event->dy; -+ event->dx = fine_dx / opt->scalex; -+ event->dy = fine_dy / opt->scaley; -+ fine_dx %= opt->scalex; -+ fine_dy %= opt->scaley; - } -- -- unlink(addr.sun_path); /* delete socket */ - -- staletime = time(0) - 30; -- if (statbuf.st_atime < staletime -- || statbuf.st_ctime < staletime -- || statbuf.st_mtime < staletime) { -- gpm_report(GPM_PR_ERR,GPM_MESS_SOCKET_OLD); -- free (info); -- close(newfd); -- return -1; /* socket is ancient */ -+ /* up and down, up and down, ... who does a do..while(0) loop ??? -+ and then makes a break into it... argh ! */ -+ -+ if (!event->dx && !event->dy && event->buttons == oldB) { -+ static time_t awaketime; -+ /* -+ * Ret information also if never happens, but enough time has elapsed. -+ * Note: return 1 will segfault due to missing event->vc; FIXME! -+ */ -+ if (time(NULL) <= awaketime) return MOUSE_NO_DATA; -+ awaketime = time(NULL) + 1; - } - -- uid = statbuf.st_uid; /* owner of socket */ --#else -- { -- struct ucred sucred; -- socklen_t credlen = sizeof(struct ucred); -- -- if(getsockopt(newfd, SOL_SOCKET, SO_PEERCRED, &sucred, &credlen) == -1) { -- gpm_report(GPM_PR_ERR,GPM_MESS_GETSOCKOPT, strerror(errno)); -- free(info); -- close(newfd); -- return -1; -- } -- uid = sucred.uid; -- gpm_report(GPM_PR_DEBUG,GPM_MESS_PEER_SCK_UID, uid); -- } --#endif -- if (uid != 0) { -- if(( tty = -- malloc(strlen(option.consolename)+Gpm_cnt_digits(vc) + sizeof(char))) == NULL) -- gpm_report(GPM_PR_OOPS,GPM_MESS_NO_MEM); -- -- strncpy(tty,option.consolename,strlen(option.consolename)-1); -- sprintf(&tty[strlen(option.consolename)-1],"%d",vc); -+ /*....................................... fill missing fields */ -+ event->x += event->dx; event->y += event->dy; - -- if(stat(tty, &statbuf) == -1) { -- gpm_report(GPM_PR_ERR,GPM_MESS_STAT_FAILS,tty); -- free(info); -- free(tty); -- close(newfd); -- return -1; -- } -- if (uid != statbuf.st_uid) { -- gpm_report(GPM_PR_WARN,GPM_MESS_FAILED_CONNECT, uid, tty); /*SUSPECT!*/ -- free(info); -- free(tty); -- close(newfd); -- return -1; -+ event->vc = get_console_state(&shift_state); -+ if (event->vc != last_active) { -+ handle_console_resize(event); -+ last_active = event->vc; -+ } -+ event->modifiers |= shift_state; -+ -+ if (oldB == event->buttons) -+ event->type = (event->buttons ? (GPM_DRAG | GPM_MFLAG) : GPM_MOVE); -+ else { -+ if (event->buttons > oldB) -+ event->type = GPM_DOWN; -+ else { -+ event->type &= GPM_MFLAG; -+ event->type |= GPM_UP; -+ event->buttons ^= oldB; /* for button-up, tell which one */ - } -- free(tty); /* at least here it's not needed anymore */ - } -+ calculate_clicks(event, opt->time); -+ snap_to_screen_limits(event); -+ -+ gpm_report(GPM_PR_DEBUG,"M: %3i %3i (%3i %3i) - butt=%i vc=%i cl=%i", -+ event->dx, event->dy, event->x, event->y, -+ event->buttons, event->vc, event->clicks); - -- /* register the connection information in the right place */ -- info->next=next=cinfo[vc]; -- info->fd=newfd; -- cinfo[vc]=info; -- gpm_report(GPM_PR_DEBUG,GPM_MESS_LONG_STATUS, -- request->pid, request->vc, request->eventMask, request->defaultMask, -- request->minMod, request->maxMod); -- -- /* if the client gets motions, give it the current position */ -- if(request->eventMask & GPM_MOVE) { -- Gpm_Event event={0,0,vc,0,0,statusX,statusY,GPM_MOVE,0,0}; -- do_client(info, &event); -- } -+ oldB = nEvent.buttons; - -- return newfd; -+ if (opt_special && (event->type & GPM_DOWN) && !processSpecial(event)) -+ rslt = MOUSE_NO_DATA; -+ -+ return rslt; - } - --/*-------------------------------------------------------------------*/ --void get_console_size(Gpm_Event *ePtr) -+static int wait_for_data(fd_set *connSet, int maxfd, fd_set *selSet) - { -- int i, prevmaxx, prevmaxy; -- struct mouse_features *which_mouse; /* local */ -+ struct micetab *mouse; -+ struct timeval now, timeout = { 0, 0 }; -+ int mouse_tmo, tmo = INT_MAX; - -- /* before asking the new console size, save the previous values */ -- prevmaxx = maxx; prevmaxy = maxy; -+ GET_TIME(now); - -- i=open_console(O_RDONLY); -- ioctl(i, TIOCGWINSZ, &win); -- close(i); -- if (!win.ws_col || !win.ws_row) { -- gpm_report(GPM_PR_DEBUG,GPM_MESS_ZERO_SCREEN_DIM); -- win.ws_col=80; win.ws_row=25; -- } -- maxx=win.ws_col; maxy=win.ws_row; -- gpm_report(GPM_PR_DEBUG,GPM_MESS_SCREEN_SIZE,maxx,maxy); -- -- if (!prevmaxx) { /* first invocation, place the pointer in the middle */ -- statusX = ePtr->x = maxx/2; -- statusY = ePtr->y = maxy/2; -- } else { /* keep the pointer in the same position where it was */ -- statusX = ePtr->x = ePtr->x * maxx / prevmaxx; -- statusY = ePtr->y = ePtr->y * maxy / prevmaxy; -- } -- -- for (i=1; i <= 1+opt_double; i++) { -- which_mouse=mouse_table+i; /* used to access options */ -- /* -- * the following operation is based on the observation that 80x50 -- * has square cells. (An author-centric observation ;-) -- */ -- opt_scaley=opt_scale*50*maxx/80/maxy; -- gpm_report(GPM_PR_DEBUG,GPM_MESS_X_Y_VAL,opt_scale,opt_scaley); -+ *selSet = *connSet; -+ for (mouse = micelist; mouse; mouse = mouse->next) { -+ FD_SET(mouse->dev.fd, selSet); -+ maxfd = max(maxfd, mouse->dev.fd); -+ if (mouse->dev.timeout >= 0) { -+ mouse_tmo = mouse->dev.timeout - DIF_TIME(mouse->timestamp, now); -+ tmo = min(tmo, mouse_tmo); -+ } - } -+ -+ if (tmo == INT_MAX) -+ timeout.tv_sec = SELECT_TIME; -+ else if (tmo > 0) { -+ timeout.tv_sec = tmo / 1000; -+ timeout.tv_usec = (tmo % 1000) * 1000; -+ } -+ -+ return select(maxfd + 1, selSet, NULL_SET, NULL_SET, &timeout); - } - --/*-------------------------------------------------------------------*/ --static void gpm_killed(int signo) --{ -- if(signo==SIGWINCH) { -- gpm_report(GPM_PR_WARN,GPM_MESS_RESIZING, option.progname, getpid()); -- opt_resize++; -- return; -- } -- if (signo==SIGUSR1) -- gpm_report(GPM_PR_WARN,GPM_MESS_KILLED_BY,option.progname, getpid(),option.progname); -- exit(0); --} -+ - - /*-------------------------------------------------------------------*/ - int old_main() - { -- int ctlfd, newfd; -- struct sockaddr_un ctladdr; -- int i, len, kd_mode, fd; -- struct timeval timeout; -- int maxfd=-1; -- int pending; -+ int ctlfd; -+ int i, text_mode; -+ struct timeval now; -+ int maxfd = -1; -+ int pending, attempt; -+ int timed_out; - Gpm_Event event; -+ struct micetab *mouse; -+ struct client_info *ci; -+ fd_set selSet, connSet; -+ enum mouse_rslt rslt; - -- for (i = 1; i <= 1+opt_double; i++) { -- which_mouse=mouse_table+i; /* used to access options */ -- -- if (!opt_dev) gpm_report(GPM_PR_OOPS,GPM_MESS_NEED_MDEV); -- -- if(!strcmp(opt_dev,"-")) fd=0; /* use stdin */ -- else if( (fd=open(opt_dev,O_RDWR | O_NDELAY)) < 0) -- gpm_report(GPM_PR_OOPS,GPM_MESS_OPEN,opt_dev); -- -- /* and then reset the flag */ -- fcntl(fd,F_SETFL,fcntl(fd,F_GETFL) & ~O_NDELAY); -- -- /* create argc and argv for this device */ -- mouse_argv[i] = build_argv(opt_type, opt_options, &mouse_argc[i], ','); -- -- /* init the device, and use the return value as new mouse type */ -- if (m_type->init) -- m_type=(m_type->init)(fd, m_type->flags, m_type, mouse_argc[i], -- mouse_argv[i]); -- if (!m_type) gpm_report(GPM_PR_OOPS,GPM_MESS_MOUSE_INIT); -- -- which_mouse->fd=fd; -- maxfd=max(fd, maxfd); -- } -- --/*....................................... catch interesting signals */ -- -+ /*....................................... catch interesting signals */ - signal(SIGTERM, gpm_killed); - signal(SIGINT, gpm_killed); - signal(SIGUSR1, gpm_killed); /* usr1 is used by a new gpm killing the old */ - signal(SIGWINCH,gpm_killed); /* winch can be sent if console is resized */ -+ signal(SIGPIPE, SIG_IGN); /* WARN */ - --/*....................................... create your nodes */ -- -- /* control node */ -- -- if((ctlfd=socket(AF_UNIX,SOCK_STREAM,0))==-1) gpm_report(GPM_PR_OOPS,GPM_MESS_SOCKET_PROB); -- bzero((char *)&ctladdr,sizeof(ctladdr)); -- ctladdr.sun_family=AF_UNIX; -- strcpy(ctladdr.sun_path,GPM_NODE_CTL); -- unlink(GPM_NODE_CTL); -- -- len=sizeof(ctladdr.sun_family)+strlen(GPM_NODE_CTL); -- if(bind(ctlfd,(struct sockaddr *)(&ctladdr),len) == -1) -- gpm_report(GPM_PR_OOPS,GPM_MESS_BIND_PROB,ctladdr.sun_path); -- maxfd=max(maxfd,ctlfd); -- -- /* needs to be 0777, so all users can _try_ to access gpm */ -- chmod(GPM_NODE_CTL,0777); -- -- get_console_size(&event); /* get screen dimensions */ -- --/*....................................... wait for mouse and connections */ -- -- listen(ctlfd, 5); /* Queue up calls */ -- --#define NULL_SET ((fd_set *)NULL) --#define resetTimeout() (timeout.tv_sec=SELECT_TIME,timeout.tv_usec=0) -+ init_mice(); -+ handle_console_resize(&event); /* get screen dimensions */ -+ ctlfd = listen_for_clients(); - -+ /*....................................... wait for mouse and connections */ - FD_ZERO(&connSet); -- FD_SET(ctlfd,&connSet); -- -- if (opt_double) FD_SET(mouse_table[2].fd,&connSet); -- -- readySet=connSet; -- FD_SET(mouse_table[1].fd,&readySet); -- -- signal(SIGPIPE,SIG_IGN); /* WARN */ -- --/*--------------------------------------- main loop begins here */ -+ FD_SET(ctlfd, &connSet); -+ maxfd = max(maxfd, ctlfd); -+ -+ /*--------------------------------------- main loop begins here */ - -- while(1) { -- selSet=readySet; -- resetTimeout(); -- if (opt_test) timeout.tv_sec=0; -+ while (1) { - -- if (eventFlag) { /* an event left over by clustering */ -- pending=1; -- FD_ZERO(&selSet); -- FD_SET(mouse_table[eventFlag].fd,&selSet); -- } -- else -- while((pending=select(maxfd+1,&selSet,NULL_SET,NULL_SET,&timeout))==0){ -- selSet=readySet; -- resetTimeout(); -- } /* go on */ -- -- if(opt_resize) { /* did the console resize? */ -- get_console_size(&event); -- opt_resize--; -- signal(SIGWINCH,gpm_killed); /* reinstall handler */ -- -- /* and notify clients */ -- for(i=0; i<MAX_VC+1; i++) { -- Gpm_Cinfo *ci; -- for (ci = cinfo[i]; ci; ci = ci->next) kill(ci->data.pid,SIGWINCH); -- } -+ pending = wait_for_data(&connSet, maxfd, &selSet); -+ -+ if (console_resized) { /* did the console resize? */ -+ handle_console_resize(&event); -+ console_resized = 0; -+ signal(SIGWINCH, gpm_killed); /* reinstall handler */ -+ notify_clients_resize(); - } - - if (pending < 0) { -- if (errno==EBADF) gpm_report(GPM_PR_OOPS,GPM_MESS_SELECT_PROB); -- gpm_report(GPM_PR_ERR,GPM_MESS_SELECT_STRING,strerror(errno)); -- selSet=readySet; -- resetTimeout(); -+ if (errno == EBADF) gpm_report(GPM_PR_OOPS,GPM_MESS_SELECT_PROB); -+ gpm_report(GPM_PR_ERR, GPM_MESS_SELECT_STRING, strerror(errno)); - continue; - } - -- gpm_report(GPM_PR_DEBUG,GPM_MESS_SELECT_TIMES,pending); -+ gpm_report(GPM_PR_DEBUG, GPM_MESS_SELECT_TIMES, pending); - --/*....................................... manage graphic mode */ -+ /*....................................... manage graphic mode */ - -- /* -- * Be sure to be in text mode. This used to be before select, -- * but actually it only matters if you have events. -- */ -- { -- int fd = open_console(O_RDONLY); -- if (ioctl(fd, KDGETMODE, &kd_mode) < 0) -- gpm_report(GPM_PR_OOPS,GPM_MESS_IOCTL_KDGETMODE); -- close(fd); -- if(kd_mode != KD_TEXT && !option.repeater) { -- wait_text(&mouse_table[1].fd); -- maxfd=max(maxfd,mouse_table[1].fd); -- readySet=connSet; -- FD_SET(mouse_table[1].fd,&readySet); -+ /* -+ * Be sure to be in text mode. This used to be before select, -+ * but actually it only matters if you have events. -+ */ -+ text_mode = is_text_console(); -+ if (!text_mode && !repeater.type && !repeater.raw) { -+ /* if we don;t have repeater then there is only one mouse so -+ * we can safely use micelist -+ */ -+ close(micelist->dev.fd); -+ wait_text_console(); -+ /* reopen, reinit (the function is only used if we have one mouse device) */ -+ if ((micelist->dev.fd = open(micelist->device, O_RDWR)) < 0) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_OPEN, micelist->device); -+ if (micelist->type->init) -+ micelist->type->init(&micelist->dev, &micelist->options, micelist->type); - continue; /* reselect */ - } -- } - --/*....................................... got mouse, process event */ --/* -- * Well, actually, run a loop to maintain inlining of functions without -- * lenghtening the file. This is not too clean a code, but it works.... -- */ -- -- for (i=1; i <= 1+opt_double; i++) { -- which_mouse=mouse_table+i; /* used to access options */ -- if (FD_ISSET(which_mouse->fd,&selSet)) { -- FD_CLR(which_mouse->fd,&selSet); pending--; -- if (processMouse(which_mouse->fd, &event, m_type, kd_mode)) -- /* pass it to the client, if any -- * or to the default handler, if any -- * or to the selection handler -- */ /* FIXME -- check event.vc */ -- /* can't we please rewrite the following a bit nicer?*/ -- (cinfo[event.vc] && do_client(cinfo[event.vc], &event)) -- || (cinfo[0] && do_client(cinfo[0], &event)) -- || do_selection(&event); -+ /*....................................... got mouse, process event */ -+ /* -+ * Well, actually, run a loop to maintain inlining of functions without -+ * lenghtening the file. This is not too clean a code, but it works.... -+ */ -+ GET_TIME(now); -+ for (mouse = micelist; mouse; mouse = mouse->next) { -+ timed_out = mouse->dev.timeout >= 0 && -+ DIF_TIME(mouse->timestamp, now) >= mouse->dev.timeout; -+ if (timed_out || FD_ISSET(mouse->dev.fd, &selSet)) { -+ if (FD_ISSET(mouse->dev.fd, &selSet)) { -+ FD_CLR(mouse->dev.fd, &selSet); -+ pending--; - } -+ attempt = 0; -+ do { -+ rslt = processMouse(mouse, timed_out, ++attempt, &event, text_mode); -+ if (rslt != MOUSE_NO_DATA) { -+ /* pass it to the client or to the default handler, -+ * or to the selection handler -+ */ -+ if (event.vc > MAX_VC) event.vc = 0; -+ if (event.vc == 0 || !cinfo[event.vc] || !do_client(cinfo[event.vc], &event)) -+ if (!cinfo[0] || !do_client(cinfo[0], &event)) -+ do_selection(&event, mouse->options.three_button); -+ } -+ } while (rslt == MOUSE_MORE_DATA); -+ } - } - - /*..................... got connection, process it */ -- -- if (pending && FD_ISSET(ctlfd,&selSet)) { -- FD_CLR(ctlfd,&selSet); pending--; -- newfd=processConn(ctlfd); -- if (newfd>=0) { -- FD_SET(newfd,&connSet); -- FD_SET(newfd,&readySet); -- maxfd=max(maxfd,newfd); -+ if (pending && FD_ISSET(ctlfd, &selSet)) { -+ FD_CLR(ctlfd, &selSet); -+ pending--; -+ if ((ci = accept_client_connection(ctlfd))) { -+ if (ci->data.eventMask & GPM_MOVE) { -+ Gpm_Event e = { 0, 0, ci->data.vc, 0, 0, -+ event.x, event.y, GPM_MOVE, 0, 0 }; -+ do_client(ci, &e); -+ } -+ FD_SET(ci->fd, &connSet); -+ maxfd = max(maxfd, ci->fd); - } - } - - /*........................ got request */ -- -- /* itz 10-22-96 check _all_ clients, not just those on top! */ -- for (i=0; pending && (i<=MAX_VC); i++) { -- Gpm_Cinfo* ci; -+ /* itz 10-22-96 check _all_ clients, not just those on top! */ -+ for (i = 0; pending && i <= MAX_VC; i++) { - for (ci = cinfo[i]; pending && ci; ci = ci->next) { -- if (FD_ISSET(ci->fd,&selSet)) { -- FD_CLR(ci->fd,&selSet); pending--; -- /* itz Sat Sep 12 21:10:22 PDT 1998 */ -- /* this code is clearly incorrect; the next highest -- descriptor after the one we're closing is not necessarily -- being used. Fortunately, it doesn't hurt simply to leave this -- out. */ -- --#ifdef NOTDEF -- if ((processRequest(ci,i)==-1) && maxfd==ci->fd) maxfd--; --#else -- (void)processRequest(ci,i); --#endif -+ if (FD_ISSET(ci->fd, &selSet)) { -+ FD_CLR(ci->fd, &selSet); -+ pending--; -+ if (!process_client_request(ci, i, event.x, event.y, event.clicks, -+ event.buttons, micelist->options.three_button)) { -+ FD_CLR(ci->fd, &connSet); -+ remove_client(ci, i); -+ } - } - } - } - - /*.................. look for a spare fd */ -- - /* itz 10-22-96 this shouldn't happen now! */ -- for (i=0; pending && i<=maxfd; i++) { -- if (FD_ISSET(i,&selSet)) { -- FD_CLR(i,&selSet); -+ for (i = 0; pending && i <= maxfd; i++) { -+ if (FD_ISSET(i, &selSet)) { -+ FD_CLR(i, &selSet); - pending--; -- gpm_report(GPM_PR_WARN,GPM_MESS_STRANGE_DATA,i); -+ gpm_report(GPM_PR_WARN, GPM_MESS_STRANGE_DATA,i); - } - } - - /*................... all done. */ -- -- if(pending) gpm_report(GPM_PR_OOPS,GPM_MESS_SELECT_PROB); -+ if (pending) gpm_report(GPM_PR_OOPS, GPM_MESS_SELECT_PROB); - } /* while(1) */ - } -diff -urN gpm-1.20.1/src/gpn.c gpm/src/gpn.c ---- gpm-1.20.1/src/gpn.c 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/gpn.c 2003-10-02 01:22:42.000000000 -0500 -@@ -28,201 +28,104 @@ - #include <stdlib.h> - #include <string.h> /* strerror(); ?!? memcpy() */ - #include <ctype.h> /* isdigit */ --#include <signal.h> --#include <stdarg.h> /* Log uses it */ --#include <errno.h> - #include <unistd.h> /* getopt(),symlink() */ --#include <sys/stat.h> /* mkdir() */ --#include <sys/param.h> --#include <sys/time.h> /* timeval */ --#include <sys/wait.h> /* wait() */ --#include <sys/types.h> /* socket() */ --#include <sys/socket.h> /* socket() */ --#include <sys/un.h> /* struct sockaddr_un */ --#include <asm/types.h> /* __u32 */ -- --#ifdef SIGTSTP /* true if BSD system */ --#include <sys/file.h> --#include <sys/ioctl.h> --#endif -- --#ifndef HAVE___U32 --# ifndef _I386_TYPES_H /* /usr/include/asm/types.h */ --typedef unsigned int __u32; --# endif --#endif - - #include "headers/message.h" - #include "headers/gpmInt.h" - #include "headers/gpm.h" -+#include "headers/console.h" -+#include "headers/selection.h" - --extern int errno; -- --/*===================================================================*/ --/* octal digit */ --static int isodigit(const unsigned char c) -+/* usage: display for usage informations */ -+int usage(char *whofailed) - { -- return ((c & ~7) == '0'); -+ if (whofailed) { -+ gpm_report(GPM_PR_ERR, GPM_MESS_SPEC_ERR, whofailed, option.progname); -+ return 1; -+ } -+ printf(GPM_MESS_USAGE, option.progname, DEF_ACCEL, DEF_BAUD, DEF_SEQUENCE, -+ DEF_DELTA, DEF_TIME, DEF_LUT, DEF_SCALE, DEF_SAMPLE, DEF_TYPE); -+ return 1; - } - --/* routine to convert digits from octal notation (Andries Brouwer) */ --static int getsym(const unsigned char *p0, unsigned char *res) -+/***************************************************************************** -+ * the function returns a valid type pointer or NULL if not found -+ *****************************************************************************/ -+static struct Gpm_Type *find_mouse_by_name(char *name) - { -- const unsigned char *p = p0; -- char c; -+ Gpm_Type *type; -+ char *s; -+ int len = strlen(name); - -- c = *p++; -- if (c == '\\' && *p) { -- c = *p++; -- if (isodigit(c)) { -- c -= '0'; -- if (isodigit(*p)) c = 8*c + (*p++ - '0'); -- if (isodigit(*p)) c = 8*c + (*p++ - '0'); -+ for (type = mice; type->fun; type++) { -+ if (!strcasecmp(name, type->name)) break; -+ /* otherwise, look in the synonym list */ -+ for (s = type->synonyms; s; s = strchr(s, ' ')) { -+ while (*s && isspace(*s)) s++; /* skip spaces */ -+ if (!strncasecmp(name, s, len) && !isprint(*(s + len))) break;/*found*/ - } -+ if (s) break; /* found a synonym */ - } -- *res = c; -- return (p - p0); -+ return type->fun ? type : NULL; - } - --/* description missing! FIXME */ --int loadlut(char *charset) -+static void init_button_sequence(struct miceopt *opt, char *arg) - { -- int i, c, fd; -- unsigned char this, next; -- static __u32 long_array[9]={ -- 0x05050505, /* ugly, but preserves alignment */ -- 0x00000000, /* control chars */ -- 0x00000000, /* digits */ -- 0x00000000, /* uppercase and '_' */ -- 0x00000000, /* lowercase */ -- 0x00000000, /* Latin-1 control */ -- 0x00000000, /* Latin-1 misc */ -- 0x00000000, /* Latin-1 uppercase */ -- 0x00000000 /* Latin-1 lowercase */ -+ int i; -+ static struct { -+ char *in; -+ char *out; -+ } seq[] = { -+ {"123", "01234567"}, -+ {"132", "02134657"}, -+ {"213", "01452367"}, /* warning: these must be readable as integers... */ -+ {"231", "02461357"}, -+ {"312", "04152637"}, -+ {"321", "04261537"}, -+ {NULL, NULL} - }; - -+ if (strlen(arg) != 3 || atoi(arg) < 100) -+ exit(usage("sequence")); - --#define inwordLut (long_array+1) -- -- for (i=0; charset[i]; ) { -- i += getsym(charset+i, &this); -- if (charset[i] == '-' && charset[i + 1] != '\0') -- i += getsym(charset+i+1, &next) + 1; -- else -- next = this; -- for (c = this; c <= next; c++) -- inwordLut[c>>5] |= 1 << (c&0x1F); -- } -- -- if ((fd=open(option.consolename, O_WRONLY)) < 0) { -- /* try /dev/console, if /dev/tty0 failed -- is that really senseful ??? */ -- free(option.consolename); /* allocated by main */ -- if((option.consolename=malloc(strlen(GPM_SYS_CONSOLE)+1)) == NULL) -- gpm_report(GPM_PR_OOPS,GPM_MESS_NO_MEM); -- strcpy(option.consolename,GPM_SYS_CONSOLE); -- -- if ((fd=open(option.consolename, O_WRONLY)) < 0) gpm_report(GPM_PR_OOPS,GPM_MESS_OPEN_CON); -- } -- if (ioctl(fd, TIOCLINUX, &long_array) < 0) { /* fd <0 is checked */ -- if (errno==EPERM && getuid()) -- gpm_report(GPM_PR_WARN,GPM_MESS_ROOT); /* why do we still continue?*/ -- else if (errno==EINVAL) -- gpm_report(GPM_PR_OOPS,GPM_MESS_CSELECT); -- } -- close(fd); -- -- return 0; -+ for (i = 0; seq[i].in && strcmp(seq[i].in, arg); i++); -+ if (!seq[i].in) -+ exit(usage("button sequence")); -+ opt->sequence = strdup(seq[i].out); /* I can rewrite on it */ - } - --/* usage: display for usage informations */ --int usage(char *whofailed) -+static void validate_mouse(struct micetab *mouse, int mouse_no) - { -- if (whofailed) { -- gpm_report(GPM_PR_ERR,GPM_MESS_SPEC_ERR,whofailed,option.progname); -- return 1; -- } -- printf(GPM_MESS_USAGE,option.progname, DEF_ACCEL, DEF_BAUD, DEF_SEQUENCE, -- DEF_DELTA, DEF_TIME, DEF_LUT,DEF_SCALE, DEF_SAMPLE, DEF_TYPE); -- return 1; --} -- --/* itz Sat Sep 12 10:55:51 PDT 1998 Added this as replacement for the -- unwanted functionality in check_uniqueness. */ -- --void check_kill(void) --{ -- int old_pid; -- FILE* fp = fopen(GPM_NODE_PID, "r"); -- -- /* if we cannot find the old pid file, leave */ -- if (fp == NULL) gpm_report(GPM_PR_OOPS,GPM_MESS_OPEN, GPM_NODE_PID); -- -- /* else read the pid */ -- if (fscanf(fp,"%d",&old_pid) != 1) -- gpm_report(GPM_PR_OOPS,GPM_MESS_READ_PROB,GPM_NODE_PID); -- fclose(fp); -- -- gpm_report(GPM_PR_DEBUG,GPM_MESS_KILLING,old_pid); -- -- /* first check if we run */ -- if (kill(old_pid,0) == -1) { -- gpm_report(GPM_PR_INFO,GPM_MESS_STALE_PID, GPM_NODE_PID); -- unlink(GPM_NODE_PID); -+ if (!mouse->device) { -+ if (!mouse->type && mouse_no > 1) -+ gpm_report(GPM_PR_OOPS, -+ "No device/protocol specified for mouse #%d, probably extra -M option?", mouse_no); -+ else -+ gpm_report(GPM_PR_OOPS, "No device specified for mouse #%d", mouse_no); - } -- /* then kill us (not directly, but the other instance ... ) */ -- if (kill(old_pid,SIGTERM) == -1) -- gpm_report(GPM_PR_OOPS,GPM_MESS_CANT_KILL, old_pid); - -- gpm_report(GPM_PR_INFO,GPM_MESS_KILLED,old_pid); -- exit(0); --} -+ if (!mouse->type) -+ mouse->type = find_mouse_by_name(DEF_TYPE); - --/* itz Sat Sep 12 10:30:05 PDT 1998 this function used to mix two -- completely different things; opening a socket to a running daemon -- and checking that a running daemon existed. Ugly. */ --/* rewritten mostly on 20th of February 2002 - nico */ --void check_uniqueness(void) --{ -- FILE *fp = 0; -- int old_pid = -1; -+ mouse->options.absolute = mouse->type->absolute; - -- if((fp = fopen(GPM_NODE_PID, "r")) != NULL) { -- fscanf(fp, "%d", &old_pid); -- if (kill(old_pid,0) == -1) { -- gpm_report(GPM_PR_INFO,GPM_MESS_STALE_PID, GPM_NODE_PID); -- unlink(GPM_NODE_PID); -- } else /* we are really running, exit asap! */ -- gpm_report(GPM_PR_OOPS,GPM_MESS_ALREADY_RUN, old_pid); -- } -- /* now try to sign ourself */ -- if ((fp = fopen(GPM_NODE_PID,"w")) != NULL) { -- fprintf(fp,"%d\n",getpid()); -- fclose(fp); -- } else { -- gpm_report(GPM_PR_OOPS,GPM_MESS_NOTWRITE,GPM_NODE_PID); -- } -+ if (!mouse->options.sequence) -+ init_button_sequence(&mouse->options, DEF_SEQUENCE); - } - --/***************************************************************************** -- * the function returns a valid type pointer or NULL if not found -- *****************************************************************************/ --struct Gpm_Type *find_mouse_by_name(char *name) -+static void validate_repeater(char *type) - { -- Gpm_Type *type; -- char *s; -- int len = strlen(name); -- -- for (type=mice; type->fun; type++) { -- if (!strcasecmp(name, type->name)) break; -- /* otherwise, look in the synonym list */ -- for (s = type->synonyms; s; s = strchr(s, ' ')) { -- while (*s && isspace(*s)) s++; /* skip spaces */ -- if(!strncasecmp(name, s, len) && !isprint(*(s + len))) break;/*found*/ -- } -- if(s) break; /* found a synonym */ -+ if (strcmp(type, "raw") == 0) -+ repeater.raw = 1; -+ else { -+ repeater.raw = 0; -+ -+ if (!(repeater.type = find_mouse_by_name(type))) -+ exit(M_listTypes()); /* not found */ -+ -+ if (!repeater.type->repeat_fun) /* unsupported translation */ -+ gpm_report(GPM_PR_OOPS, GPM_MESS_NO_REPEAT, type); - } -- if (!type->fun) return NULL; -- return type; - } - - /***************************************************************************** -@@ -230,60 +133,86 @@ - * Can't believe it, today cmdline() really does what the name tries to say - *****************************************************************************/ - void cmdline(int argc, char **argv) --{ -- extern struct options option; -+{ -+ struct micetab *mouse; -+ struct miceopt *opt; - char options[]="a:A::b:B:d:Dg:hi:kl:m:Mo:pr:R::s:S:t:TuvV::23"; -- int opt; -+ int opt_char, tmp; -+ int mouse_no = 1; -+ -+ mouse = add_mouse(); -+ opt = &mouse->options; - -- /* initialize for the dual mouse */ -- mouse_table[2]=mouse_table[1]=mouse_table[0]; /* copy defaults */ -- which_mouse=mouse_table+1; /* use the first */ -- -- while ((opt = getopt(argc, argv, options)) != -1) { -- switch (opt) { -- case 'a': opt_accel = atoi(optarg); break; -- case 'A': opt_aged++; -- if (optarg) -- opt_age_limit = atoi(optarg); break; -- case 'b': opt_baud = atoi(optarg); break; -- case 'B': opt_sequence = optarg; break; -- case 'd': opt_delta = atoi(optarg); break; -- case 'D': option.run_status = GPM_RUN_DEBUG; break; -- case 'g': opt_glidepoint_tap=atoi(optarg); break; -- case 'h': exit(usage(NULL)); -- case 'i': opt_time=atoi(optarg); break; -- case 'k': check_kill(); break; -- case 'l': opt_lut = optarg; break; -- case 'm': add_mouse(GPM_ADD_DEVICE,optarg); -- opt_dev = optarg; break; /* GO AWAY!*/ -- case 'M': opt_double++; option.repeater++; -- if (option.repeater_type == 0) -- option.repeater_type = "msc"; -- which_mouse=mouse_table+2; break; -- case 'o': add_mouse(GPM_ADD_OPTIONS,optarg); -- gpm_report(GPM_PR_DEBUG,"options: %s",optarg); -- opt_options = optarg; break; /* GO AWAY */ -- case 'p': opt_ptrdrag = 0; break; -- case 'r': -- /* being called responsiveness, I must take the inverse */ -- opt_scale=atoi(optarg); -- if(!opt_scale || opt_scale > 100) opt_scale=100; /* the maximum */ -- else opt_scale=100/opt_scale; break; -- case 'R': -- option.repeater++; -- if (optarg) option.repeater_type = optarg; -- else option.repeater_type = "msc"; break; -- case 's': opt_sample = atoi(optarg); break; -- case 'S': if (optarg) opt_special = optarg; -- else opt_special=""; break; -- case 't': add_mouse(GPM_ADD_TYPE,optarg); -- opt_type = optarg; break; /* GO AWAY */ -- case 'u': option.autodetect = 1; break; -- case 'T': opt_test++; break; -- case 'v': printf(GPM_MESS_VERSION "\n"); exit(0); -- case '2': opt_three = -1; break; -- case '3': opt_three = 1; break; -- default: exit(usage("commandline")); -+ while ((opt_char = getopt(argc, argv, options)) != -1) { -+ switch (opt_char) { -+ case 'a': if ((opt->accel = atoi(optarg)) < 1) -+ exit(usage("acceleration")); -+ break; -+ case 'A': sel_opts.aged = 1; -+ if (optarg) -+ sel_opts.age_limit = atoi(optarg); -+ break; -+ case 'b': opt->baud = atoi(optarg); -+ break; -+ case 'B': init_button_sequence(opt, optarg); -+ break; -+ case 'd': if ((opt->delta = atoi(optarg)) < 2) -+ exit(usage("delta")); -+ break; -+ case 'D': option.run_status = GPM_RUN_DEBUG; -+ break; -+ case 'g': if (atoi(optarg) > 3) -+ exit(usage("glidepoint tap button")); -+ opt->glidepoint_tap = GPM_B_LEFT >> (atoi(optarg) - 1); -+ break; -+ case 'h': exit(usage(NULL)); -+ case 'i': opt->time = atoi(optarg); -+ break; -+ case 'k': kill_gpm(); -+ break; -+ case 'l': console.charset = optarg; -+ break; -+ case 'm': mouse->device = optarg; -+ break; -+ case 'M': validate_mouse(mouse, mouse_no); -+ mouse = add_mouse(); -+ opt = &mouse->options; -+ mouse_no++; -+ if (!repeater.type && !repeater.raw) -+ repeater.type = find_mouse_by_name(DEF_REP_TYPE); -+ break; -+ case 'o': gpm_report(GPM_PR_DEBUG,"options: %s", optarg); -+ opt->text = optarg; -+ break; -+ case 'p': sel_opts.ptrdrag = 0; -+ break; -+ case 'r': /* being called responsiveness, I must take the inverse */ -+ tmp = atoi(optarg); -+ if (!tmp || tmp > 100) tmp = 1; -+ opt->scalex = 100 / tmp; -+ break; -+ case 'R': validate_repeater((optarg) ? optarg : DEF_REP_TYPE); -+ break; -+ case 's': opt->sample = atoi(optarg); -+ break; -+ case 'S': if (optarg) opt_special = optarg; -+ else opt_special=""; -+ break; -+ case 't': mouse->type = find_mouse_by_name(optarg); -+ if (!mouse->type) -+ exit(M_listTypes()); -+ break; -+ case 'u': option.autodetect = 1; -+ break; -+ case 'v': printf(GPM_MESS_VERSION "\n"); -+ exit(0); -+ case '2': opt->three_button = -1; -+ break; -+ case '3': opt->three_button = 1; -+ break; -+ default: exit(usage("commandline")); - } - } -+ -+ validate_mouse(micelist, mouse_no); - } -diff -urN gpm-1.20.1/src/headers/client.h gpm/src/headers/client.h ---- gpm-1.20.1/src/headers/client.h 1969-12-31 19:00:00.000000000 -0500 -+++ gpm/src/headers/client.h 2003-10-02 01:22:42.000000000 -0500 -@@ -0,0 +1,57 @@ -+/* -*-mode:C;tab-width:3-*- -+ * client.h - GPM client handling (server side) -+ * -+ * Copyright (C) 2003 Dmitry Torokhov <dtor@mail.ru> -+ * -+ * This program 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 of the License, or -+ * (at your option) any later version. -+ * -+ * This program 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 this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ ********/ -+ -+#ifndef __GPM_CLIENT_H -+#define __GPM_CLIENT_H_ -+ -+#ifdef HAVE_LINUX_TTY_H -+#include <linux/tty.h> -+#endif -+ -+#include "headers/gpm.h" -+ -+/* FIXME: still needed ?? */ -+/* How many virtual consoles are managed? */ -+#ifndef MAX_NR_CONSOLES -+# define MAX_NR_CONSOLES 64 /* this is always sure */ -+#endif -+ -+#define MAX_VC MAX_NR_CONSOLES /* doesn't work before 1.3.77 */ -+ -+struct client_info { -+ Gpm_Connect data; -+ int fd; -+ struct client_info *next; -+}; -+ -+struct Gpm_Event; -+ -+extern struct client_info *cinfo[MAX_VC + 1]; -+ -+int listen_for_clients(void); -+struct client_info *accept_client_connection(int fd); -+void remove_client(struct client_info *ci, int vc); -+void notify_clients_resize(void); -+int do_client(struct client_info *cinfo, struct Gpm_Event *event); -+int process_client_request(struct client_info *ci, int vc, -+ int x, int y, int buttons, int clicks, -+ int three_button_mouse); -+ -+#endif /* __GPM_CLIENT_H_ */ -diff -urN gpm-1.20.1/src/headers/console.h gpm/src/headers/console.h ---- gpm-1.20.1/src/headers/console.h 1969-12-31 19:00:00.000000000 -0500 -+++ gpm/src/headers/console.h 2003-10-02 01:22:42.000000000 -0500 -@@ -0,0 +1,42 @@ -+/* -*-mode:C;tab-width:3-*- -+ * console.h - GPM console and selection/paste handling -+ * -+ * Copyright (C) 2003 Dmitry Torokhov <dtor@mail.ru> -+ * -+ * This program 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 of the License, or -+ * (at your option) any later version. -+ * -+ * This program 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 this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ ********/ -+ -+#ifndef __GPM_CONSOLE_H_ -+#define __GPM_CONSOLE_H_ -+ -+struct gpm_console { -+ char *device; -+ char *charset; -+ int max_x, max_y; -+}; -+ -+extern struct gpm_console console; -+ -+int open_console(int mode); -+char *get_console_name(); -+char *compose_vc_name(int vc); -+int is_text_console(void); -+void wait_text_console(void); -+void refresh_console_size(void); -+int is_console_owner(int vc, uid_t uid); -+int get_console_state(unsigned char *shift_state); -+void console_load_lut(void); -+ -+#endif /* __GPM_CONSOLE_H_ */ -diff -urN gpm-1.20.1/src/headers/gpmInt.h gpm/src/headers/gpmInt.h ---- gpm-1.20.1/src/headers/gpmInt.h 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/headers/gpmInt.h 2003-10-02 01:22:42.000000000 -0500 -@@ -23,8 +23,7 @@ - #ifndef _GPMINT_INCLUDED - #define _GPMINT_INCLUDED - --#include <sys/types.h> /* time_t */ /* for whom ???? FIXME */ -- -+#include <sys/time.h> /* timeval */ - #include "gpm.h" - - #if !defined(__GNUC__) -@@ -35,23 +34,12 @@ - /* timeout for the select() syscall */ - #define SELECT_TIME 86400 /* one day */ - --#ifdef HAVE_LINUX_TTY_H --#include <linux/tty.h> --#endif -- --/* FIXME: still needed ?? */ --/* How many virtual consoles are managed? */ --#ifndef MAX_NR_CONSOLES --# define MAX_NR_CONSOLES 64 /* this is always sure */ --#endif -- --#define MAX_VC MAX_NR_CONSOLES /* doesn't work before 1.3.77 */ -- - /* How many buttons may the mouse have? */ - /* #define MAX_BUTTONS 3 ===> not used, it is hardwired :-( */ - - /* all the default values */ - #define DEF_TYPE "ms" -+#define DEF_REP_TYPE "msc" - #define DEF_DEV NULL /* use the type-related one */ - #define DEF_LUT "-a-zA-Z0-9_./\300-\326\330-\366\370-\377" - #define DEF_SEQUENCE "123" /* how buttons are reordered */ -@@ -62,12 +50,10 @@ - #define DEF_SCALE 10 - #define DEF_TIME 250 /* time interval (ms) for multiple clicks */ - #define DEF_THREE 0 /* have three buttons? */ --#define DEF_KERNEL 0 /* no kernel module, by default */ - - /* 10 on old computers (<=386), 0 on current machines */ - #define DEF_CLUSTER 0 /* maximum number of clustered events */ - --#define DEF_TEST 0 - #define DEF_PTRDRAG 1 /* double or triple click */ - #define DEF_GLIDEPOINT_TAP 0 /* tapping emulates no buttons by default */ - -@@ -84,11 +70,6 @@ - #define GPM_DEVFS_CONSOLE "/dev/vc/0" - #define GPM_OLD_CONSOLE "/dev/tty0" - --/* for adding a mouse; add_mouse */ --#define GPM_ADD_DEVICE 0 --#define GPM_ADD_TYPE 1 --#define GPM_ADD_OPTIONS 2 -- - /*** mouse commands ***/ - - #define GPM_AUX_SEND_ID 0xF2 -@@ -117,126 +98,95 @@ - - /*....................................... Structures */ - -+struct micedev { -+ int fd; -+ int timeout; /* the protocol driver wants to be called -+ after X msec even if there is no new data -+ arrived (-1 to disable/default) */ -+ void *private; /* private data maintained by protocol driver */ -+}; -+ -+struct miceopt { -+ char *sequence; -+ int baud; -+ int sample; -+ int delta; -+ int accel; -+ int scalex, scaley; -+ int time; -+ int cluster; -+ int three_button; -+ int glidepoint_tap; -+ int absolute; /* device reports absolute coordinates - initially copied -+ from Gpm_Type; allows same protocol (type) control devices -+ in absolute and relative mode */ -+ char *text; /* extra textual options supplied via '-o text' */ -+}; -+ - /* - * and this is the entry in the mouse-type table - */ - typedef struct Gpm_Type { -- char *name; -- char *desc; /* a descriptive line */ -- char *synonyms; /* extra names (the XFree name etc) as a list */ -- int (*fun)(Gpm_Event *state, unsigned char *data); -- struct Gpm_Type *(*init)(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv); -- unsigned short flags; -- unsigned char proto[4]; -- int packetlen; -- int howmany; /* how many bytes to read at a time */ -- int getextra; /* does it get an extra byte? (only mouseman) */ -- int absolute; /* flag indicating absolute pointing device */ -+ char *name; -+ char *desc; /* a descriptive line */ -+ char *synonyms; /* extra names (the XFree name etc) as a list */ -+ int (*fun)(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state); -+ int (*init)(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type); -+ unsigned short flags; -+ unsigned char proto[4]; -+ int packetlen; -+ int howmany; /* how many bytes to read at a time */ -+ int getextra; /* does it get an extra byte? (only mouseman) */ -+ int absolute; /* flag indicating absolute pointing device */ - -- int (*repeat_fun)(Gpm_Event *state, int fd); /* repeat this event into fd */ -+ int (*repeat_fun)(Gpm_Event *state, int fd); /* repeat this event into fd */ - /* itz Mon Jan 11 23:27:54 PST 1999 */ - } Gpm_Type; - - #define GPM_EXTRA_MAGIC_1 0xAA - #define GPM_EXTRA_MAGIC_2 0x55 - --typedef struct Gpm_Cinfo { -- Gpm_Connect data; -- int fd; -- struct Gpm_Cinfo *next; --} Gpm_Cinfo; -- -- --/*....................................... Global variables */ -- --/* this structure is used to hide the dual-mouse stuff */ -- --struct mouse_features { -- char *opt_type, *opt_dev, *opt_sequence; -- int opt_baud,opt_sample,opt_delta, opt_accel, opt_scale, opt_scaley; -- int opt_time, opt_cluster, opt_three, opt_glidepoint_tap; -- char *opt_options; /* extra textual configuration */ -- Gpm_Type *m_type; -- int fd; --}; -- --extern struct mouse_features mouse_table[3], *which_mouse; /*the current one*/ -- --// looks unused; delete --//typedef struct Opt_struct_type {int a,B,d,i,p,r,V,A;} Opt_struct_type; -- --/* this is not very clean, actually, but it works fine */ --#define opt_type (which_mouse->opt_type) --#define opt_dev (which_mouse->opt_dev) --#define opt_sequence (which_mouse->opt_sequence) --#define opt_baud (which_mouse->opt_baud) --#define opt_sample (which_mouse->opt_sample) --#define opt_delta (which_mouse->opt_delta) --#define opt_accel (which_mouse->opt_accel) --#define opt_scale (which_mouse->opt_scale) --#define opt_scaley (which_mouse->opt_scaley) --#define opt_time (which_mouse->opt_time) --#define opt_cluster (which_mouse->opt_cluster) --#define opt_three (which_mouse->opt_three) --#define opt_glidepoint_tap (which_mouse->opt_glidepoint_tap) --#define opt_options (which_mouse->opt_options) -- --#define m_type (which_mouse->m_type) -- --/* the other variables */ -- --extern char *opt_lut; --extern int opt_test, opt_ptrdrag; --extern int opt_kill; --extern int opt_kernel, opt_explicittype; --extern int opt_aged; --extern time_t opt_age_limit; - extern char *opt_special; --extern int opt_rawrep; --extern int fifofd; --extern int opt_double; -- --extern Gpm_Type *repeated_type; - extern Gpm_Type mice[]; /* where the hell are the descriptions...*/ --extern struct winsize win; --extern int maxx, maxy; --extern Gpm_Cinfo *cinfo[MAX_VC+1]; - - /* new variables <CLEAN> */ - - /* structure prototypes */ -+struct repeater { -+ int fd; -+ int raw; -+ Gpm_Type *type; -+}; - - /* contains all mice */ - struct micetab { - struct micetab *next; -- char *device; -- char *protocol; -- char *options; -+ struct micedev dev; -+ struct miceopt options; -+ Gpm_Type *type; -+ char *device; -+ int buttons; /* mouse's button state from last read */ -+ struct timeval timestamp; /* last time mouse data arrived */ - }; - - struct options { - int autodetect; /* -u [aUtodetect..'A' is not available] */ -- int no_mice; /* number of mice */ -- int repeater; /* repeat data */ -- char *repeater_type; /* repeat data as which mouse type */ - int run_status; /* startup/daemon/debug */ - char *progname; /* hopefully gpm ;) */ -- struct micetab *micelist; /* mice and their options */ -- char *consolename; /* /dev/tty0 || /dev/vc/0 */ - }; - - /* global variables */ - struct options option; /* one should be enough for us */ -+extern struct repeater repeater; /* again, only one */ -+extern struct micetab *micelist; - - /* new variables </CLEAN> */ - -- - /*....................................... Prototypes */ - /* server_tools.c */ --void add_mouse (int type, char *value); --int init_mice (struct micetab *micelist); --int reset_mice(struct micetab *micelist); -+struct micetab *add_mouse(void); -+void init_mice(void); -+void cleanup_mice(void); - - /* startup.c */ - void startup(int argc, char **argv); -@@ -246,17 +196,15 @@ - - /* gpn.c */ - void cmdline(int argc, char **argv); --int giveInfo(int request, int fd); --int loadlut(char *charset); --int usage(char *whofailed); --struct Gpm_Type *find_mouse_by_name(char *name); -+int giveInfo(int request, int fd); -+int usage(char *whofailed); - void check_uniqueness(void); --void check_kill(void); -- -+void kill_gpm(void); - - /* mice.c */ - extern int M_listTypes(void); -- /* special.c */ -+ -+ /* special.c */ - int processSpecial(Gpm_Event *event); - int twiddler_key(unsigned long message); - int twiddler_key_init(void); -diff -urN gpm-1.20.1/src/headers/input-defines.h gpm/src/headers/input-defines.h ---- gpm-1.20.1/src/headers/input-defines.h 1969-12-31 19:00:00.000000000 -0500 -+++ gpm/src/headers/input-defines.h 2003-10-02 01:22:42.000000000 -0500 -@@ -0,0 +1,81 @@ -+/* -+ * input-defines.h - complements <linux/input.h> adding missing bits -+ * -+ * Copyright (C) 2003 Dmitry Torokhov <dtor@mail.ru> -+ * -+ * This program 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 of the License, or -+ * (at your option) any later version. -+ * -+ * This program 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 this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ ********/ -+#ifndef __GPM_INPUT_DEFINES_H -+#define __GPM_INPUT_DEFINES_H -+ -+#include <linux/input.h> -+#include "headers/config.h" -+ -+#ifndef ABS_TOOL_WIDTH -+#define ABS_TOOL_WIDTH 0x1c -+#endif -+ -+#ifndef BTN_TOOL_FINGER -+#define BTN_TOOL_FINGER 0x145 -+#endif -+ -+#ifndef BTN_TOUCH -+#define BTN_TOUCH 0x14a -+#endif -+ -+#ifndef BTN_TOOL_DOUBLETAP -+#define BTN_TOOL_DOUBLETAP 0x14d -+#endif -+ -+#ifndef BTN_TOOL_TRIPLETAP -+#define BTN_TOOL_TRIPLETAP 0x14e -+#endif -+ -+#ifndef MSC_GESTURE -+#define MSC_GESTURE 2 -+#endif -+ -+#ifndef EV_SYNC -+#define EV_SYNC 0 -+#endif -+ -+#ifndef SYN_REPORT -+#define SYN_REPORT 0 -+#endif -+ -+#ifndef PSMOUSE_SYNAPTICS -+#define PSMOUSE_SYNAPTICS 7 -+#endif -+ -+#ifndef HAVE_INPUT_ID -+struct input_id { -+ unsigned short bustype; -+ unsigned short vendor; -+ unsigned short product; -+ unsigned short version; -+}; -+#endif -+ -+#ifndef HAVE_INPUT_ABSINFO -+struct input_absinfo { -+ int value; -+ int minimum; -+ int maximum; -+ int fuzz; -+ int flat; -+}; -+#endif -+ -+#endif -diff -urN gpm-1.20.1/src/headers/message.h gpm/src/headers/message.h ---- gpm-1.20.1/src/headers/message.h 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/headers/message.h 2003-10-02 01:22:42.000000000 -0500 -@@ -96,7 +96,6 @@ - " -S [commands] enable special commands (see man page)\n" \ - " -t mouse-type sets mouse type (default '%s')\n" \ - " Use a non-existent type (e.g. \"help\") to get a list\n" \ -- " -T test: read mouse, no clients\n" \ - " -v print version and exit\n" \ - " -V verbosity increase number of logged messages\n\n\n" \ - " Examples:\n\n" \ -@@ -168,7 +167,8 @@ - #define GPM_MESS_SELECT_TIMES "selected %i times" - - #define GPM_MESS_OPTION_NO_ARG "%s: Option \"%s\" takes no argument: ignoring \"%s\"" --#define GPM_MESS_INVALID_ARG "%s: Invalid arg. \"%s\" to \"%s\"" -+#define GPM_MESS_INVALID_ARG "%s: Invalid argument \"%s\" for option \"%s\"" -+#define GPM_MESS_MISSING_ARG "%s: Option \"%s\" requires an argument" - #define GPM_MESS_CONT_WITH_ERR "%s: Continuing despite errors in option parsing" - #define GPM_MESS_TOO_MANY_OPTS "%s: Too many options for \"-t %s\"" - -@@ -196,7 +196,7 @@ - - /* warnings */ - #define GPM_MESS_REQUEST_ON "Request on vc %i > %i" --#define GPM_MESS_FAILED_CONNECT "Failed gpm connect attempt by uid %d for vc %s" -+#define GPM_MESS_FAILED_CONNECT "Failed gpm connect attempt by uid %d for vc %d" - #define GPM_MESS_ZERO_SCREEN_DIM "zero screen dimension, assuming 80x25" - #define GPM_MESS_STRANGE_DATA "Data on strange file descriptor %d" - #define GPM_MESS_RESIZING "%s pid %i is resizing :-)" -diff -urN gpm-1.20.1/src/headers/optparser.h gpm/src/headers/optparser.h ---- gpm-1.20.1/src/headers/optparser.h 1969-12-31 19:00:00.000000000 -0500 -+++ gpm/src/headers/optparser.h 2003-10-02 01:22:42.000000000 -0500 -@@ -0,0 +1,50 @@ -+/* -+ * optparser.h - GPM mouse options parser -+ * -+ * Copyright (C) 1993 Andrew Haylett <ajh@gec-mrc.co.uk> -+ * Copyright (C) 1994-2000 Alessandro Rubini <rubini@linux.it> -+ * Copyright (C) 1998,1999 Ian Zimmerman <itz@rahul.net> -+ * Copyright (C) 2001,2002 Nico Schottelius <nicos@pcsystems.de> -+ * Copyright (C) 2003 Dmitry Torokhov <dtor@mail.ru> -+ * -+ * This program 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 of the License, or -+ * (at your option) any later version. -+ * -+ * This program 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 this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ ********/ -+#ifndef __GPM_OPTPARSER_H_ -+#define __GPM_OPTPARSER_H_ -+ -+enum option_type { -+ OPT_BOOL = 1, -+ OPT_INT, /* "%i" */ -+ OPT_DEC, /* "%d" */ -+ OPT_STRING, -+ /* other types must be added */ -+ OPT_END = 0 -+}; -+ -+struct option_helper { -+ char *name; -+ enum option_type type; -+ union u { -+ int *iptr; /* used for int and bool arguments */ -+ char **sptr; /* used for string arguments, by strdup()ing the value */ -+ } u; -+ int value; /* used for boolean arguments */ -+ int present; -+}; -+ -+int parse_options(const char *who, const char *opt, char sep, struct option_helper *info); -+int check_no_options(const char *proto, const char *opts, char sep); -+int is_option_present(struct option_helper *info, const char *name); -+#endif -diff -urN gpm-1.20.1/src/headers/selection.h gpm/src/headers/selection.h ---- gpm-1.20.1/src/headers/selection.h 1969-12-31 19:00:00.000000000 -0500 -+++ gpm/src/headers/selection.h 2003-10-02 01:22:42.000000000 -0500 -@@ -0,0 +1,37 @@ -+/* -+ * console.h - GPM selection/paste handling -+ * -+ * Copyright (C) 2003 Dmitry Torokhov <dtor@mail.ru> -+ * -+ * This program 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 of the License, or -+ * (at your option) any later version. -+ * -+ * This program 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 this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ ********/ -+ -+#ifndef __GPM_SELECTION_H_ -+#define __GPM_SELECTION_H_ -+ -+struct sel_options { -+ int aged; -+ int age_limit; -+ int ptrdrag; -+}; -+ -+struct Gpm_Event; -+ -+extern struct sel_options sel_opts; /* only one exists */ -+ -+void do_selection(struct Gpm_Event *event, int three_button_mode); -+void selection_disable_paste(void); -+ -+#endif /* __GPM_CONSOLE_H_ */ -diff -urN gpm-1.20.1/src/headers/synaptics.h gpm/src/headers/synaptics.h ---- gpm-1.20.1/src/headers/synaptics.h 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/headers/synaptics.h 2003-10-02 01:22:42.000000000 -0500 -@@ -62,7 +62,7 @@ - ** - ** Process the touchpad 6/7/8 byte data. - */ --void syn_process_serial_data (Gpm_Event *state, -+void syn_process_serial_data (int fd, Gpm_Event *state, - unsigned char *data); - - -@@ -72,7 +72,7 @@ - ** - ** Process the touchpad 6 byte data. - */ --void syn_process_ps2_data (Gpm_Event *state, -+void syn_process_ps2_data (int fd, Gpm_Event *state, - unsigned char *data); - - -diff -urN gpm-1.20.1/src/lib/liblow.c gpm/src/lib/liblow.c ---- gpm-1.20.1/src/lib/liblow.c 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/lib/liblow.c 2003-10-02 01:22:42.000000000 -0500 -@@ -80,6 +80,8 @@ - int gpm_consolefd=-1; /* used to invoke ioctl() */ - int gpm_morekeys=0; - -+static char *consolename; -+ - int gpm_convert_event(unsigned char *mdata, Gpm_Event *ePtr); - - /*----------------------------------------------------------------------------* -@@ -192,14 +194,13 @@ - char *tty = NULL; - char *term = NULL; - int i; -- extern struct options option; - static int checked_con = 0; - struct sockaddr_un addr; - struct winsize win; - Gpm_Stst *new = NULL; - char* sock_name = 0; - -- option.consolename = NULL; -+ consolename = NULL; - - gpm_report(GPM_PR_DEBUG,"VC: %d",flag); - -@@ -216,7 +217,7 @@ - - /* check whether we know what name the console is: what's with the lib??? */ - if(checked_con == 0) { -- option.consolename = Gpm_get_console(); -+ consolename = Gpm_get_console(); - checked_con++; - } - -@@ -245,10 +246,10 @@ - conn->vc=0; /* default handler */ - if (flag > 0) { /* forced vc number */ - conn->vc=flag; -- if((tty = malloc(strlen(option.consolename)+Gpm_cnt_digits(flag))) == NULL) -+ if((tty = malloc(strlen(consolename)+Gpm_cnt_digits(flag))) == NULL) - gpm_report(GPM_PR_OOPS,GPM_MESS_NO_MEM); -- memcpy(tty,option.consolename,strlen(option.consolename)-1); -- sprintf(&tty[strlen(option.consolename)-1],"%i",flag); -+ memcpy(tty,consolename,strlen(consolename)-1); -+ sprintf(&tty[strlen(consolename)-1],"%i",flag); - } else { /* use your current vc */ - if (isatty(0)) tty = ttyname(0); /* stdin */ - if (!tty && isatty(1)) tty = ttyname(1); /* stdout */ -@@ -258,13 +259,13 @@ - goto err; - } - /* do we really need this check ? */ -- if(strncmp(tty,option.consolename,strlen(option.consolename)-1) -- || !isdigit(tty[strlen(option.consolename)-1])) { -- gpm_report(GPM_PR_ERR,"strncmp/isdigit/option.consolename failed"); -+ if(strncmp(tty,consolename,strlen(consolename)-1) -+ || !isdigit(tty[strlen(consolename)-1])) { -+ gpm_report(GPM_PR_ERR,"strncmp/isdigit/consolename failed"); - goto err; - } - -- conn->vc=atoi(&tty[strlen(option.consolename)-1]); -+ conn->vc=atoi(&tty[strlen(consolename)-1]); - } - - if (gpm_consolefd == -1) -@@ -272,6 +273,8 @@ - gpm_report(GPM_PR_ERR,GPM_MESS_DOUBLE_S,tty,strerror(errno)); - goto err; - } -+ -+ if (flag > 0) free(tty); - } - - new->info=*conn; -diff -urN gpm-1.20.1/src/lib/tools.c gpm/src/lib/tools.c ---- gpm-1.20.1/src/lib/tools.c 1969-12-31 19:00:00.000000000 -0500 -+++ gpm/src/lib/tools.c 2003-10-02 01:22:42.000000000 -0500 -@@ -0,0 +1,93 @@ -+/* -+ * tools.c - tools which are needed by client and server -+ * -+ * Copyright (c) 2001 Nico Schottelius <nico@schottelius.org> -+ * -+ * This program 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 of the License, or -+ * (at your option) any later version. -+ * -+ * This program 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 this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ ********/ -+ -+#include <stdio.h> /* NULL */ -+#include <string.h> -+#include <stdlib.h> -+#include <sys/types.h> /* these three are */ -+#include <sys/stat.h> /* needed for */ -+#include <unistd.h> /* stat() */ -+ -+#include "headers/gpmInt.h" /* only used for some defines */ -+#include "headers/message.h" -+ -+/***************************************************************************** -+ * check, whether devfs is used or not. -+ * See /usr/src/linux/Documentation/filesystems/devfs/ for details. -+ * Returns: the name of the console (/dev/tty0 or /dev/vc/0) -+ *****************************************************************************/ -+char *Gpm_get_console( void ) -+{ -+ -+ char *back = NULL, *tmp = NULL; -+ struct stat buf; -+ -+ /* first try the devfs device, because in the next time this will be -+ * the preferred one. If that fails, take the old console */ -+ -+ /* Check for open new console */ -+ if (stat(GPM_DEVFS_CONSOLE,&buf) == 0) -+ tmp = GPM_DEVFS_CONSOLE; -+ -+ /* Failed, try OLD console */ -+ else if(stat(GPM_OLD_CONSOLE,&buf) == 0) -+ tmp = GPM_OLD_CONSOLE; -+ -+ if(tmp != NULL) -+ if((back = malloc(strlen(tmp) + sizeof(char)) ) != NULL) -+ strcpy(back,tmp); -+ -+ return(back); -+} -+ -+/* what's the english name for potenz ? */ -+int Gpm_x_high_y(int base, int pot_y) -+{ -+ int val = 1; -+ -+ if(pot_y == 0) val = 1; -+ else if(pot_y < 0) val = 0; /* ugly hack ;) */ -+ else while(pot_y > 0) { -+ val = val * base; -+ pot_y--; -+ } -+ return val; -+} -+ -+/* return characters needed to display int */ -+int Gpm_cnt_digits(int number) -+{ -+ /* 0-9 = 1 10^0 <-> (10^1)-1 -+ * 10 - 99 = 2 10^1 <-> (10^2)-1 -+ * 100 - 999 = 3 10^2 <-> (10^3)-1 -+ * 1000 - 9999 = 4 ... */ -+ -+ int ret = 0, num = 0; -+ -+ /* non negative, please */ -+ if(number < 0) number *= -1; -+ else if(number == 0) ret = 1; -+ else while(number > num) { -+ ret++; -+ num = (Gpm_x_high_y(10,ret) - 1); -+ } -+ -+ return(ret); -+} -diff -urN gpm-1.20.1/src/Makefile.in gpm/src/Makefile.in ---- gpm-1.20.1/src/Makefile.in 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/Makefile.in 2003-10-02 01:22:42.000000000 -0500 -@@ -12,15 +12,16 @@ - include $(top_builddir)/Makefile.include - - # Main portion: regular build rules -+MICESRC = mice.c twiddler.c synaptics.c @EVDEV_SRCS@ - --GSRC = main.c gpm.c gpn.c mice.c special.c twiddler.c synaptics.c \ -- startup.c server_tools.c -+GSRC = main.c gpm.c gpn.c special.c startup.c server_tools.c console.c \ -+ selection.c client.c optparser.c $(MICESRC) - --GOBJ = $(GSRC:.c=.o) report.o tools.o -+GOBJ = $(GSRC:.c=.o) report.o - --LSRC = lib/liblow.c lib/libhigh.c lib/libxtra.c lib/report-lib.c -+LSRC = lib/liblow.c lib/libhigh.c lib/libxtra.c lib/report-lib.c lib/tools.c - --LOBJ = $(LSRC:.c=.o) tools.o @CURSES_OBJS@ -+LOBJ = $(LSRC:.c=.o) @CURSES_OBJS@ - - PICS = $(LOBJ:.o=.lo) - -@@ -143,7 +144,7 @@ - $(CC) -I. @CPPFLAGS@ $(CPPFLAGS) @CFLAGS@ $(CFLAGS) -c -o $@.o $< - $(CC) @LDFLAGS@ $(LDFLAGS) -o $@ $@.o @LIBS@ $(LIBS) lib/libgpm.a - --prog/mouse-test: mice.o twiddler.o synaptics.o -+prog/mouse-test: $(MICESRC:.c=.o) console.o optparser.o - - $(PROG): lib/libgpm.so lib/@SHLIB@ lib/libgpm.a - -diff -urN gpm-1.20.1/src/mice.c gpm/src/mice.c ---- gpm-1.20.1/src/mice.c 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/mice.c 2003-10-02 01:22:42.000000000 -0500 -@@ -46,15 +46,11 @@ - #include <string.h> - #include <stdlib.h> - #include <termios.h> --#include <fcntl.h> --#include <termios.h> - #include <errno.h> - #include <unistd.h> - #include <ctype.h> - --#include <sys/types.h> - #include <sys/stat.h> /* stat() */ --#include <sys/time.h> /* select() */ - - #include <linux/kdev_t.h> /* MAJOR */ - #include <linux/keyboard.h> -@@ -72,135 +68,40 @@ - - - #include "headers/gpmInt.h" -+#include "headers/console.h" - #include "headers/twiddler.h" - #include "headers/synaptics.h" - #include "headers/message.h" -- --/*========================================================================*/ --/* Parsing argv: helper dats struct function (should they get elsewhere?) */ --/*========================================================================*/ -- --enum argv_type { -- ARGV_BOOL = 1, -- ARGV_INT, /* "%i" */ -- ARGV_DEC, /* "%d" */ -- ARGV_STRING, -- /* other types must be added */ -- ARGV_END = 0 --}; -- --typedef struct argv_helper { -- char *name; -- enum argv_type type; -- union u { -- int *iptr; /* used for int and bool arguments */ -- char **sptr; /* used for string arguments, by strdup()ing the value */ -- } u; -- int value; /* used for boolean arguments */ --} argv_helper; -- --static int parse_argv(argv_helper *info, int argc, char **argv) --{ -- int i, j = 0, errors = 0; -- long l; -- argv_helper *p; -- char *s, *t; -- int base = 0; /* for strtol */ -- -- -- for (i=1; i<argc; i++) { -- for (p = info; p->type != ARGV_END; p++) { -- j = strlen(p->name); -- if (strncmp(p->name, argv[i], j)) -- continue; -- if (isalnum(argv[i][j])) -- continue; -- break; -- } -- if (p->type == ARGV_END) { /* not found */ -- fprintf(stderr, "%s: Uknown option \"%s\" for pointer \"%s\"\n", -- option.progname, argv[i], argv[0]); -- errors++; -- continue; -- } -- /* Found. Look for trailing stuff, if any */ -- s = argv[i]+j; -- while (*s && isspace(*s)) s++; /* skip spaces */ -- if (*s == '=') s++; /* skip equal */ -- while (*s && isspace(*s)) s++; /* skip other spaces */ -- -- /* Now parse what s is */ -- switch(p->type) { -- case ARGV_BOOL: -- if (*s) { -- gpm_report(GPM_PR_ERR,GPM_MESS_OPTION_NO_ARG,option.progname,p->name,s); -- errors++; -- } -- *(p->u.iptr) = p->value; -- break; -- -- case ARGV_DEC: -- base = 10; /* and fall through */ -- case ARGV_INT: -- l = strtol(s, &t, base); -- if (*t) { -- gpm_report(GPM_PR_ERR,GPM_MESS_INVALID_ARG, option.progname, s, p->name); -- errors++; -- break; -- } -- *(p->u.iptr) = (int)l; -- break; -- -- case ARGV_STRING: -- *(p->u.sptr) = strdup(s); -- break; -- -- case ARGV_END: /* let's please "-Wall" */ -- break; -- } -- } /* for i in argc */ -- if (errors) gpm_report(GPM_PR_ERR,GPM_MESS_CONT_WITH_ERR, option.progname); -- return errors; --} -- --/*========================================================================*/ --/* Provide a common error engine by parsing with an empty option-set */ --/*========================================================================*/ --static volatile int check_no_argv(int argc, char **argv) --{ -- static argv_helper optioninfo[] = { -- {"", ARGV_END} -- }; -- return parse_argv(optioninfo, argc, argv); --} -+#include "headers/optparser.h" - - /*========================================================================*/ - /* Parse the "old" -o options */ - /*========================================================================*/ --static int option_modem_lines(int fd, int argc, char **argv) -+static int option_modem_lines(int fd, char *proto, char *opts) - { -- static unsigned int err, lines, reallines; -+ static unsigned int lines, reallines; -+ static struct option_helper optioninfo[] = { -+ {"dtr", OPT_BOOL, u: {iptr: &lines}, value: TIOCM_DTR}, -+ {"rts", OPT_BOOL, u: {iptr: &lines}, value: TIOCM_RTS}, -+ {"both", OPT_BOOL, u: {iptr: &lines}, value: TIOCM_DTR | TIOCM_RTS}, -+ {"", OPT_END} -+ }; - -- static argv_helper optioninfo[] = { -- {"dtr", ARGV_BOOL, u: {iptr: &lines}, value: TIOCM_DTR}, -- {"rts", ARGV_BOOL, u: {iptr: &lines}, value: TIOCM_RTS}, -- {"both", ARGV_BOOL, u: {iptr: &lines}, value: TIOCM_DTR | TIOCM_RTS}, -- {"", ARGV_END} -- }; -+ int rslt = parse_options(proto, opts, ',', optioninfo); - -- if (argc<2) return 0; -- if (argc > 2) { -- gpm_report(GPM_PR_ERR,GPM_MESS_TOO_MANY_OPTS,option.progname, argv[0]); -+ if (rslt < 0) { -+ errno = EINVAL; -+ return -1; -+ } else if (rslt > 1) { -+ gpm_report(GPM_PR_ERR, GPM_MESS_TOO_MANY_OPTS, option.progname, proto); - errno = EINVAL; /* used by gpm_oops(), if the caller reports failure */ - return -1; -+ } else if (rslt == 1) { -+ /* ok, move the lines */ -+ ioctl(fd, TIOCMGET, &reallines); -+ reallines &= ~lines; -+ ioctl(fd, TIOCMSET, &reallines); - } -- err = parse_argv(optioninfo, argc, argv); -- if(err) return 0; /* a message has been printed, but go on as good */ -- -- /* ok, move the lines */ -- ioctl(fd, TIOCMGET, &reallines); -- reallines &= ~lines; -- ioctl(fd, TIOCMSET, &reallines); - return 0; - } - -@@ -233,28 +134,12 @@ - /*========================================================================*/ - - #ifdef HAVE_LINUX_INPUT_H --static int M_evdev (Gpm_Event * state, unsigned char *data) --{ -- struct input_event thisevent; -- (void) memcpy (&thisevent, data, sizeof (struct input_event)); -- if (thisevent.type == EV_REL) { -- if (thisevent.code == REL_X) -- state->dx = (signed char) thisevent.value; -- else if (thisevent.code == REL_Y) -- state->dy = (signed char) thisevent.value; -- } else if (thisevent.type == EV_KEY) { -- switch(thisevent.code) { -- case BTN_LEFT: state->buttons ^= GPM_B_LEFT; break; -- case BTN_MIDDLE: state->buttons ^= GPM_B_MIDDLE; break; -- case BTN_RIGHT: state->buttons ^= GPM_B_RIGHT; break; -- case BTN_SIDE: state->buttons ^= GPM_B_MIDDLE; break; -- } -- } -- return 0; --} -+/* defined in evdev.c */ -+extern int M_evdev(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state); -+extern int I_evdev(struct micedev *dev, struct miceopt *opt, Gpm_Type *type); - #endif /* HAVE_LINUX_INPUT_H */ - --static int M_ms(Gpm_Event *state, unsigned char *data) -+static int M_ms(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - /* - * some devices report a change of middle-button state by -@@ -273,7 +158,7 @@ - return 0; - } - --static int M_ms_plus(Gpm_Event *state, unsigned char *data) -+static int M_ms_plus(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - static unsigned char prev=0; - -@@ -293,7 +178,7 @@ - return 0; - } - --static int M_ms_plus_lr(Gpm_Event *state, unsigned char *data) -+static int M_ms_plus_lr(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - /* - * Same as M_ms_plus but with an addition by Edmund GRIMLEY EVANS -@@ -329,19 +214,19 @@ - int SUMMA_BORDER=100; - int summamaxx,summamaxy; - char summaid=-1; --static int M_summa(Gpm_Event *state, unsigned char *data) -+static int M_summa(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - int x, y; - - x = ((data[2]<<7) | data[1])-SUMMA_BORDER; - if (x<0) x=0; - if (x>summamaxx) x=summamaxx; -- state->x = (x * win.ws_col / summamaxx); -+ state->x = (x * console.max_x / summamaxx); - realposx = (x * 16383 / summamaxx); - - y = ((data[4]<<7) | data[3])-SUMMA_BORDER; - if (y<0) y=0; if (y>summamaxy) y=summamaxy; -- state->y = 1 + y * (win.ws_row-1)/summamaxy; -+ state->y = 1 + y * (console.max_y-1)/summamaxy; - realposy = y * 16383 / summamaxy; - - state->buttons= -@@ -396,7 +281,7 @@ - - - /* 'Genitizer' (kw@dtek.chalmers.se 11/12/97) */ --static int M_geni(Gpm_Event *state, unsigned char *data) -+static int M_geni(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - /* this is a little confusing. If we use the stylus, we - * have three buttons (tip, lower, upper), and if -@@ -419,7 +304,7 @@ - - - /* m$ 'Intellimouse' (steveb 20/7/97) */ --static int M_ms3(Gpm_Event *state, unsigned char *data) -+static int M_ms3(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - state->wdx = state->wdy = 0; - state->buttons= ((data[0] & 0x20) >> 3) /* left */ -@@ -470,7 +355,7 @@ - } - - /* M_brw is a variant of m$ 'Intellimouse' the middle button is different */ --static int M_brw(Gpm_Event *state, unsigned char *data) -+static int M_brw(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - state->buttons= ((data[0] & 0x20) >> 3) /* left */ - | ((data[3] & 0x20) >> 4) /* middle */ -@@ -491,7 +376,7 @@ - return 0; - } - --static int M_bare(Gpm_Event *state, unsigned char *data) -+static int M_bare(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - /* a bare ms protocol */ - state->buttons= ((data[0] & 0x20) >> 3) | ((data[0] & 0x10) >> 4); -@@ -500,7 +385,7 @@ - return 0; - } - --static int M_sun(Gpm_Event *state, unsigned char *data) -+static int M_sun(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - state->buttons= (~data[0]) & 0x07; - state->dx= (signed char)(data[1]); -@@ -508,7 +393,7 @@ - return 0; - } - --static int M_msc(Gpm_Event *state, unsigned char *data) -+static int M_msc(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - state->buttons= (~data[0]) & 0x07; - state->dx= (signed char)(data[1]) + (signed char)(data[3]); -@@ -558,7 +443,7 @@ - - } - --static int M_logimsc(Gpm_Event *state, unsigned char *data) /* same as msc */ -+static int M_logimsc(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - state->buttons= (~data[0]) & 0x07; - state->dx= (signed char)(data[1]) + (signed char)(data[3]); -@@ -566,7 +451,7 @@ - return 0; - } - --static int M_mm(Gpm_Event *state, unsigned char *data) -+static int M_mm(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - state->buttons= data[0] & 0x07; - state->dx= (data[0] & 0x10) ? data[1] : - data[1]; -@@ -574,7 +459,7 @@ - return 0; - } - --static int M_logi(Gpm_Event *state, unsigned char *data) /* equal to mm */ -+static int M_logi(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - state->buttons= data[0] & 0x07; - state->dx= (data[0] & 0x10) ? data[1] : - data[1]; -@@ -582,7 +467,7 @@ - return 0; - } - --static int M_bm(Gpm_Event *state, unsigned char *data) /* equal to sun */ -+static int M_bm(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - state->buttons= (~data[0]) & 0x07; - state->dx= (signed char)data[1]; -@@ -590,7 +475,7 @@ - return 0; - } - --static int M_ps2(Gpm_Event *state, unsigned char *data) -+static int M_ps2(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - static int tap_active=0; /* there exist glidepoint ps2 mice */ - -@@ -599,8 +484,8 @@ - !!(data[0]&2) * GPM_B_RIGHT + - !!(data[0]&4) * GPM_B_MIDDLE; - -- if (data[0]==0 && opt_glidepoint_tap) /* by default this is false */ -- state->buttons = tap_active = opt_glidepoint_tap; -+ if (data[0]==0 && opt->glidepoint_tap) /* by default this is false */ -+ state->buttons = tap_active = opt->glidepoint_tap; - else if (tap_active) { - if (data[0]==8) - state->buttons = tap_active = 0; -@@ -623,10 +508,11 @@ - state->dy= -((data[0] & 0x20) ? data[2]-256 : data[2]); - else - state->dy = 0; -+ - return 0; - } - --static int M_imps2(Gpm_Event *state, unsigned char *data) -+static int M_imps2(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - - static int tap_active=0; /* there exist glidepoint ps2 mice */ -@@ -636,8 +522,8 @@ - state->buttons= ((data[0] & 1) << 2) /* left */ - | ((data[0] & 6) >> 1); /* middle and right */ - -- if (data[0]==0 && opt_glidepoint_tap) // by default this is false -- state->buttons = tap_active = opt_glidepoint_tap; -+ if (data[0]==0 && opt->glidepoint_tap) // by default this is false -+ state->buttons = tap_active = opt->glidepoint_tap; - else if (tap_active) { - if (data[0]==8) - state->buttons = tap_active = 0; -@@ -667,7 +553,7 @@ - - } - --static int M_netmouse(Gpm_Event *state, unsigned char *data) -+static int M_netmouse(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - /* Avoid these beasts if you can. They connect to normal PS/2 port, - * but their protocol is one byte longer... So if you have notebook -@@ -706,47 +592,45 @@ - } - - /* standard ps2 */ --static Gpm_Type *I_ps2(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+int I_ps2(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - static unsigned char s[] = { 246, 230, 244, 243, 100, 232, 3, }; -- write (fd, s, sizeof (s)); -+ write(dev->fd, s, sizeof (s)); - usleep (30000); -- tcflush (fd, TCIFLUSH); -- return type; -+ tcflush (dev->fd, TCIFLUSH); -+ return 0; - } - --static Gpm_Type *I_netmouse(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_netmouse(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - unsigned char magic[6] = { 0xe8, 0x03, 0xe6, 0xe6, 0xe6, 0xe9 }; - int i; - -- if (check_no_argv(argc, argv)) return NULL; -+ if (!check_no_options(type->name, opt->text, ',')) return -1; - for (i=0; i<6; i++) { - unsigned char c = 0; -- write( fd, magic+i, 1 ); -- read( fd, &c, 1 ); -+ write(dev->fd, magic+i, 1 ); -+ read(dev->fd, &c, 1 ); - if (c != 0xfa) { - gpm_report(GPM_PR_ERR,GPM_MESS_NETM_NO_ACK,c); -- return NULL; -+ return -1; - } - } - { - unsigned char rep[3] = { 0, 0, 0 }; -- read( fd, rep, 1 ); -- read( fd, rep+1, 1 ); -- read( fd, rep+2, 1 ); -+ read( dev->fd, rep, 1 ); -+ read( dev->fd, rep+1, 1 ); -+ read( dev->fd, rep+2, 1 ); - if (rep[0] || (rep[1] != 0x33) || (rep[2] != 0x55)) { - gpm_report(GPM_PR_ERR,GPM_MESS_NETM_INV_MAGIC, rep[0], rep[1], rep[2]); -- return NULL; -+ return -1; - } - } -- return type; -+ return 0; - } - - #define GPM_B_BOTH (GPM_B_LEFT|GPM_B_RIGHT) --static int M_mman(Gpm_Event *state, unsigned char *data) -+static int M_mman(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - /* - * the damned MouseMan has 3/4 bytes packets. The extra byte -@@ -784,7 +668,7 @@ - mytype->getextra=1; - } else { - if (b & 0x2) prev |= GPM_B_MIDDLE; -- if (b & 0x1) prev |= opt_glidepoint_tap; -+ if (b & 0x1) prev |= opt->glidepoint_tap; - } - } - state->buttons=prev; -@@ -828,7 +712,7 @@ - - #define IsA(m) ((WacomModell==(-1))? 0:!strcmp(#m,wcmodell[WacomModell].name)) - --static int M_wacom(Gpm_Event *state, unsigned char *data) -+static int M_wacom(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - static int ox=-1, oy; - int x, y; -@@ -878,8 +762,8 @@ - if (WacomAbsoluteWanted) { /* Absolute Mode */ - if (x>wmaxx) x=wmaxx; if (x<0) x=0; - if (y>wmaxy) y=wmaxy; if (y<0) y=0; -- state->x = (x * win.ws_col / wmaxx); -- state->y = (y * win.ws_row / wmaxy); -+ state->x = (x * console.max_x / wmaxx); -+ state->y = (y * console.max_y / wmaxy); - - realposx = (x / wmaxx); /* this two lines come from the summa driver. */ - realposy = (y / wmaxy); /* they seem to be buggy (always give zero). */ -@@ -889,8 +773,8 @@ - if( abs(x-ox)>(wmaxx/wcmodell[WacomModell].treshold) - || abs(y-oy)>(wmaxy/wcmodell[WacomModell].treshold) ) ox=x; oy=y; - -- state->dx= (x-ox) / (wmaxx / win.ws_col / wcmodell[WacomModell].treshold); -- state->dy= (y-oy) / (wmaxy / win.ws_row / wcmodell[WacomModell].treshold); -+ state->dx= (x-ox) / (wmaxx / console.max_x / wcmodell[WacomModell].treshold); -+ state->dy= (y-oy) / (wmaxy / console.max_y / wcmodell[WacomModell].treshold); - } - - ox=x; oy=y; -@@ -918,7 +802,7 @@ - #define CAL_Y_MAX 0xF40 - #define CAL_Y_SIZE (CAL_Y_MAX - CAL_Y_MIN) - --static int M_calus(Gpm_Event *state, unsigned char *data) -+static int M_calus(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - int x, y; - -@@ -932,12 +816,12 @@ - state->dx = 0; state->dy = 0; - - state->x = x < CAL_X_MIN ? 0 -- : x > CAL_X_MAX ? win.ws_col+1 -- : (long)(x-CAL_X_MIN) * (long)(win.ws_col-1) / CAL_X_SIZE+2; -+ : x > CAL_X_MAX ? console.max_x+1 -+ : (long)(x-CAL_X_MIN) * (long)(console.max_x-1) / CAL_X_SIZE+2; - -- state->y = y < CAL_Y_MIN ? win.ws_row + 1 -+ state->y = y < CAL_Y_MIN ? console.max_y + 1 - : y > CAL_Y_MAX ? 0 -- : (long)(CAL_Y_MAX-y) * (long)win.ws_row / CAL_Y_SIZE + 1; -+ : (long)(CAL_Y_MAX-y) * (long)console.max_y / CAL_Y_SIZE + 1; - - realposx = x < CAL_X_MIN ? 0 - : x > CAL_X_MAX ? 16384 -@@ -950,7 +834,7 @@ - return 0; - } - --static int M_calus_rel(Gpm_Event *state, unsigned char *data) -+static int M_calus_rel(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - static int ox=-1, oy; - int x, y; -@@ -984,7 +868,7 @@ - #define NCR_DELTA_X (NCR_RIGHT_X - NCR_LEFT_X) - #define NCR_DELTA_Y (NCR_TOP_Y - NCR_BOTTOM_Y) - --static int M_ncr(Gpm_Event *state, unsigned char *data) -+static int M_ncr(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - int x,y; - -@@ -1002,14 +886,14 @@ - state->x = x < NCR_LEFT_X - ? 0 - : x > NCR_RIGHT_X -- ? win.ws_col+1 -- : (long)(x-NCR_LEFT_X) * (long)(win.ws_col-1) / NCR_DELTA_X+2; -+ ? console.max_x+1 -+ : (long)(x-NCR_LEFT_X) * (long)(console.max_x-1) / NCR_DELTA_X+2; - - state->y = y < NCR_BOTTOM_Y -- ? win.ws_row + 1 -+ ? console.max_y + 1 - : y > NCR_TOP_Y - ? 0 -- : (long)(NCR_TOP_Y-y) * (long)win.ws_row / NCR_DELTA_Y + 1; -+ : (long)(NCR_TOP_Y-y) * (long)console.max_y / NCR_DELTA_Y + 1; - - realposx = x < NCR_LEFT_X - ? 0 -@@ -1026,7 +910,7 @@ - return 0; - } - --static int M_twid(Gpm_Event *state, unsigned char *data) -+static int M_twid(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - unsigned long message=0UL; int i,h,v; - static int lasth, lastv, lastkey, key, lock=0, autorepeat=0; -@@ -1144,7 +1028,7 @@ - #ifdef HAVE_LINUX_JOYSTICK_H - /* Joystick mouse emulation (David Given) */ - --static int M_js(Gpm_Event *state, unsigned char *data) -+static int M_js(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - struct JS_DATA_TYPE *jdata = (void*)data; - static int centerx = 0; -@@ -1193,21 +1077,21 @@ - #endif /* have joystick.h */ - - /* Synaptics TouchPad mouse emulation (Henry Davies) */ --static int M_synaptics_serial(Gpm_Event *state, unsigned char *data) -+static int M_synaptics_serial(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { -- syn_process_serial_data (state, data); -+ syn_process_serial_data(dev->fd, state, data); - return 0; - } - - - /* Synaptics TouchPad mouse emulation (Henry Davies) */ --static int M_synaptics_ps2(Gpm_Event *state, unsigned char *data) -+static int M_synaptics_ps2(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { -- syn_process_ps2_data(state, data); -+ syn_process_ps2_data(dev->fd, state, data); - return 0; - } - --static int M_mtouch(Gpm_Event *state, unsigned char *data) -+static int M_mtouch(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - /* - * This is a simple decoder for the MicroTouch touch screen -@@ -1219,8 +1103,8 @@ - static int upx, upy; /* keep track of last finger-up place */ - static struct timeval uptv, tv; /* time of last up, and down events */ - -- #define REAL_TO_XCELL(x) (x * win.ws_col / 0x3FFF) -- #define REAL_TO_YCELL(y) (y * win.ws_row / 0x3FFF) -+ #define REAL_TO_XCELL(x) (x * console.max_x / 0x3FFF) -+ #define REAL_TO_YCELL(y) (y * console.max_y / 0x3FFF) - - #define GET_TIME(tv) (gettimeofday(&tv, (struct timezone *)NULL)) - #define DIF_TIME(t1,t2) ((t2.tv_sec -t1.tv_sec) *1000+ \ -@@ -1245,7 +1129,7 @@ - - if (avgx < 0) { /* press event */ - GET_TIME(tv); -- if (DIF_TIME(uptv, tv) < opt_time) { -+ if (DIF_TIME(uptv, tv) < opt->time) { - /* count as button press placed at finger-up pixel */ - state->buttons = GPM_B_LEFT; - realposx = avgx = upx; state->x = REAL_TO_XCELL(realposx); -@@ -1287,7 +1171,7 @@ - static int gunze_calib[4]; /* x0,y0 x1,y1 (measured at 1/8 and 7/8) */ - static int gunze_debounce = 100; /* milliseconds: ignore shorter taps */ - --static int M_gunze(Gpm_Event *state, unsigned char *data) -+static int M_gunze(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - /* - * This generates button-1 events, by now. -@@ -1300,8 +1184,8 @@ - static struct timeval uptv, tv; /* time of last up, and down events */ - int timediff; - -- #define REAL_TO_XCELL(x) (x * win.ws_col / 0x3FFF) -- #define REAL_TO_YCELL(y) (y * win.ws_row / 0x3FFF) -+ #define REAL_TO_XCELL(x) (x * console.max_x / 0x3FFF) -+ #define REAL_TO_YCELL(y) (y * console.max_y / 0x3FFF) - - #define GET_TIME(tv) (gettimeofday(&tv, (struct timezone *)NULL)) - #define DIF_TIME(t1,t2) ((t2.tv_sec -t1.tv_sec) *1000+ \ -@@ -1350,7 +1234,7 @@ - GET_TIME(tv); - timediff = DIF_TIME(uptv, tv); - released = 0; -- if (timediff > gunze_debounce && timediff < opt_time) { -+ if (timediff > gunze_debounce && timediff < opt->time) { - /* count as button press placed at finger-up pixel */ - dragging = 1; - state->buttons = GPM_B_LEFT; -@@ -1399,7 +1283,7 @@ - /* corresponding correction of the protocol identification */ - /* mask) 2001/07/12 by Maciej W. Rozycki (macro@ds2.pg.gda.pl) */ - --static int M_vsxxx_aa(Gpm_Event *state, unsigned char *data) -+static int M_vsxxx_aa(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - - /* The mouse protocol is as follows: -@@ -1449,16 +1333,16 @@ - /* Genius Wizardpad tablet -- Matt Kimball (mkimball@xmission.com) */ - static int wizardpad_width = -1; - static int wizardpad_height = -1; --static int M_wp(Gpm_Event *state, unsigned char *data) -+static int M_wp(struct micedev *dev, struct miceopt *opt, unsigned char *data, Gpm_Event *state) - { - int x, y, pressure; - - x = ((data[4] & 0x1f) << 12) | ((data[3] & 0x3f) << 6) | (data[2] & 0x3f); -- state->x = x * win.ws_col / (wizardpad_width * 40); -+ state->x = x * console.max_x / (wizardpad_width * 40); - realposx = x * 16383 / (wizardpad_width * 40); - - y = ((data[7] & 0x1f) << 12) | ((data[6] & 0x3f) << 6) | (data[5] & 0x3f); -- state->y = win.ws_row - y * win.ws_row / (wizardpad_height * 40) - 1; -+ state->y = console.max_y - y * console.max_y / (wizardpad_height * 40) - 1; - realposy = 16383 - y * 16383 / (wizardpad_height * 40) - 1; - - pressure = ((data[9] & 0x0f) << 4) | (data[8] & 0x0f); -@@ -1475,11 +1359,9 @@ - /*========================================================================*/ - /* Then, mice should be initialized */ - --static Gpm_Type* I_empty(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_empty(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { -- if (check_no_argv(argc, argv)) return NULL; -- return type; -+ return check_no_options(type->name, opt->text, ',') ? 0 : -1; - } - - static int setspeed(int fd,int old,int new,int needtowrite,unsigned short flags) -@@ -1536,28 +1418,27 @@ - {125,"Q"}, - {1E9,"N"}, }; - --static Gpm_Type* I_serial(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_serial(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - int i; unsigned char c; - fd_set set; struct timeval timeout={0,0}; /* used when not debugging */ - - /* accept "-o dtr", "-o rts" and "-o both" */ -- if (option_modem_lines(fd, argc, argv)) return NULL; -+ if (option_modem_lines(dev->fd, type->name, opt->text)) return -1; - - #ifndef DEBUG - /* flush any pending input (thanks, Miguel) */ - FD_ZERO(&set); - for(i=0; /* always */ ; i++) { -- FD_SET(fd,&set); -- switch(select(fd+1,&set,(fd_set *)NULL,(fd_set *)NULL,&timeout/*zero*/)){ -- case 1: if (read(fd,&c,1)==0) break; -+ FD_SET(dev->fd,&set); -+ switch(select(dev->fd+1,&set,(fd_set *)NULL,(fd_set *)NULL,&timeout/*zero*/)){ -+ case 1: if (read(dev->fd,&c,1)==0) break; - case -1: continue; - } - break; - } - -- if (type->fun==M_logimsc) write(fd, "QU", 2 ); -+ if (type->fun==M_logimsc) write(dev->fd, "QU", 2 ); - - #if 0 /* Did this ever work? -- I don't know, but should we not remove it, - * if it doesn't work ??? -- Nico */ -@@ -1570,7 +1451,7 @@ - - /* Non mman: change from any available speed to the chosen one */ - for (i=9600; i>=1200; i/=2) -- setspeed(fd, i, opt_baud, (type->fun != M_mman) /* write */, flags); -+ setspeed(dev->fd, i, opt->baud, (type->fun != M_mman) /* write */, type->flags); - - /* - * reset the MouseMan/TrackMan to use the 3/4 byte protocol -@@ -1578,51 +1459,50 @@ - * Changed after 1.14; why not having "I_mman" now? - */ - if (type->fun==M_mman) { -- setspeed(fd, 1200, 1200, 0, flags); /* no write */ -- write(fd, "*X", 2); -- setspeed(fd, 1200, opt_baud, 0, flags); /* no write */ -- return type; -+ setspeed(dev->fd, 1200, 1200, 0, type->flags); /* no write */ -+ write(dev->fd, "*X", 2); -+ setspeed(dev->fd, 1200, opt->baud, 0, type->flags); /* no write */ -+ return 0; - } - - if(type->fun==M_geni) { - gpm_report(GPM_PR_INFO,GPM_MESS_INIT_GENI); -- setspeed(fd, 1200, 9600, 1, flags); /* write */ -- write(fd, ":" ,1); -- write(fd, "E" ,1); /* setup tablet. relative mode, resolution... */ -- write(fd, "@" ,1); /* setup tablet. relative mode, resolution... */ -+ setspeed(dev->fd, 1200, 9600, 1, type->flags); /* write */ -+ write(dev->fd, ":" ,1); -+ write(dev->fd, "E" ,1); /* setup tablet. relative mode, resolution... */ -+ write(dev->fd, "@" ,1); /* setup tablet. relative mode, resolution... */ - } - - if (type->fun==M_synaptics_serial) { - int packet_length; - -- setspeed (fd, 1200, 1200, 1, flags); -- packet_length = syn_serial_init (fd); -- setspeed (fd, 1200, 9600, 1, flags); -+ setspeed (dev->fd, 1200, 1200, 1, type->flags); -+ packet_length = syn_serial_init (dev->fd); -+ setspeed (dev->fd, 1200, 9600, 1, type->flags); - - type->packetlen = packet_length; - type->howmany = packet_length; - } - - if (type->fun==M_vsxxx_aa) { -- setspeed (fd, 4800, 4800, 0, flags); /* no write */ -- write(fd, "R", 1); /* initialize a mouse; without getting an "R" */ -+ setspeed (dev->fd, 4800, 4800, 0, type->flags); /* no write */ -+ write(dev->fd, "R", 1); /* initialize a mouse; without getting an "R" */ - /* a mouse does not send a bytestream */ - } - -- return type; -+ return 0; - } - --static Gpm_Type* I_logi(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_logi(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - int i; - struct stat buf; - int busmouse; - -- if (check_no_argv(argc, argv)) return NULL; -+ if (!check_no_options(type->name, opt->text, ',')) return -1; - - /* is this a serial- or a bus- mouse? */ -- if(fstat(fd,&buf)==-1) gpm_report(GPM_PR_OOPS,GPM_MESS_FSTAT); -+ if(fstat(dev->fd,&buf)==-1) gpm_report(GPM_PR_OOPS,GPM_MESS_FSTAT); - i=MAJOR(buf.st_rdev); - - /* I don't know why this is herein, but I remove it. I don't think a -@@ -1635,21 +1515,20 @@ - type->howmany = busmouse ? 3 : 1; - - /* change from any available speed to the chosen one */ -- for (i=9600; i>=1200; i/=2) setspeed(fd, i, opt_baud, 1 /* write */, flags); -+ for (i=9600; i>=1200; i/=2) setspeed(dev->fd, i, opt->baud, 1 /* write */, type->flags); - - /* this stuff is peculiar of logitech mice, also for the serial ones */ -- write(fd, "S", 1); -- setspeed(fd, opt_baud, opt_baud, 1 /* write */, -+ write(dev->fd, "S", 1); -+ setspeed(dev->fd, opt->baud, opt->baud, 1 /* write */, - CS8 |PARENB |PARODD |CREAD |CLOCAL |HUPCL); - - /* configure the sample rate */ -- for (i=0;opt_sample<=sampletab[i].sample;i++) ; -- write(fd,sampletab[i].code,1); -- return type; -+ for (i=0;opt->sample<=sampletab[i].sample;i++) ; -+ write(dev->fd,sampletab[i].code,1); -+ return 0; - } - --static Gpm_Type *I_wacom(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_wacom(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - /* wacom graphire tablet */ - #define UD_RESETBAUD "\r$" /* reset baud rate to default (wacom V) */ -@@ -1664,19 +1543,19 @@ - { - /* Init Wacom communication; this is modified from xf86Wacom.so module */ - /* Set speed to 19200 */ -- setspeed (fd, 1200, 19200, 0, B19200|CS8|CREAD|CLOCAL|HUPCL); -+ setspeed (dev->fd, 1200, 19200, 0, B19200|CS8|CREAD|CLOCAL|HUPCL); - /* Send Reset Baudrate Command */ -- write(fd, UD_RESETBAUD, strlen(UD_RESETBAUD)); -+ write(dev->fd, UD_RESETBAUD, strlen(UD_RESETBAUD)); - usleep(250000); - /* Send Reset Command */ -- write(fd, UD_RESET, strlen(UD_RESET)); -+ write(dev->fd, UD_RESET, strlen(UD_RESET)); - usleep(75000); - /* Set speed to 9600bps */ -- setspeed (fd, 1200, 9600, 0, B9600|CS8|CREAD|CLOCAL|HUPCL); -+ setspeed (dev->fd, 1200, 9600, 0, B9600|CS8|CREAD|CLOCAL|HUPCL); - /* Send Reset Command */ -- write(fd, UD_RESET, strlen(UD_RESET)); -+ write(dev->fd, UD_RESET, strlen(UD_RESET)); - usleep(250000); -- write(fd, UD_STOP, strlen(UD_STOP)); -+ write(dev->fd, UD_STOP, strlen(UD_STOP)); - usleep(100000); - } - -@@ -1690,7 +1569,7 @@ - struct timeval timeout; - fd_set readfds; - int err; -- FD_ZERO(&readfds); FD_SET(fd, &readfds); -+ FD_ZERO(&readfds); FD_SET(dev->fd, &readfds); - timeout.tv_sec = 0; timeout.tv_usec = 200000; - err = select(FD_SETSIZE, &readfds, NULL, NULL, &timeout); - return((err>0)?1:err); -@@ -1706,11 +1585,11 @@ - * Get Data to buffer until full or timeout. - * Give back 0 for timeout and !0 for buffer full - */ -- if (cmd) write(fd,cmd,strlen(cmd)); -+ if (cmd) write(dev->fd,cmd,strlen(cmd)); - memset(buffer,0,sizeof(buffer)); p=buffer; - err=wait_wacom(); - while (err != -1 && err && (p-buffer)<(sizeof(buffer)-1)) { -- p+= read(fd,p,(sizeof(buffer)-1)-(p-buffer)); -+ p+= read(dev->fd,p,(sizeof(buffer)-1)-(p-buffer)); - err=wait_wacom(); - } - /* return 1 for buffer full */ -@@ -1728,13 +1607,14 @@ - */ - - /* accept boolean options absolute and relative */ -- static argv_helper optioninfo[] = { -- {"absolute", ARGV_BOOL, u: {iptr: &WacomAbsoluteWanted}, value: !0}, -- {"relative", ARGV_BOOL, u: {iptr: &WacomAbsoluteWanted}, value: 0}, -- {"", ARGV_END} -+ static struct option_helper optioninfo[] = { -+ {"absolute", OPT_BOOL, u: {iptr: &WacomAbsoluteWanted}, value: !0}, -+ {"relative", OPT_BOOL, u: {iptr: &WacomAbsoluteWanted}, value: 0}, -+ {"", OPT_END} - }; -- parse_argv(optioninfo, argc, argv); -- type->absolute = WacomAbsoluteWanted; -+ -+ parse_options(type->name, opt->text, ',', optioninfo); -+ opt->absolute = WacomAbsoluteWanted; - reset_wacom(); - - /* "Flush" input queque */ -@@ -1756,7 +1636,7 @@ - } - if(WacomModell >= (sizeof(wcmodell) / sizeof(struct WC_MODELL))) - WacomModell=-1; -- gpm_report(GPM_PR_INFO,GPM_MESS_WACOM_MOD, type->absolute? 'A':'R', -+ gpm_report(GPM_PR_INFO,GPM_MESS_WACOM_MOD, opt->absolute? 'A':'R', - (WacomModell==(-1))? "Unknown" : wcmodell[WacomModell].name, - buffer+2); - -@@ -1767,24 +1647,23 @@ - wmaxx = (wmaxx-wcmodell[WacomModell].border); - wmaxy = (wmaxy-wcmodell[WacomModell].border); - } -- write(fd,UD_SENDCOORDS,4); -+ write(dev->fd,UD_SENDCOORDS,4); - -- return type; -+ return 0; - } - --static Gpm_Type *I_pnp(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_pnp(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - struct termios tty; - - /* accept "-o dtr", "-o rts" and "-o both" */ -- if (option_modem_lines(fd, argc, argv)) return NULL; -+ if (option_modem_lines(dev->fd, type->name, opt->text)) return -1; - - /* - * Just put the device to 1200 baud. Thanks to Francois Chastrette - * for his great help and debugging with his own pnp device. - */ -- tcgetattr(fd, &tty); -+ tcgetattr(dev->fd, &tty); - - tty.c_iflag = IGNBRK | IGNPAR; - tty.c_oflag = 0; -@@ -1792,15 +1671,15 @@ - tty.c_line = 0; - tty.c_cc[VTIME] = 0; - tty.c_cc[VMIN] = 1; -- tty.c_cflag = flags | B1200; -- tcsetattr(fd, TCSAFLUSH, &tty); /* set parameters */ -+ tty.c_cflag = type->flags | B1200; -+ tcsetattr(dev->fd, TCSAFLUSH, &tty); /* set parameters */ - - /* - * Don't read the silly initialization string. I don't want to see - * the vendor name: it is only propaganda, with no information. - */ - -- return type; -+ return 0; - } - - /* -@@ -1848,8 +1727,7 @@ - - /* intellimouse, ps2 version: Ben Pfaff and Colin Plumb */ - /* Autodetect: Steve Bennett */ --static Gpm_Type *I_imps2(int fd, unsigned short flags, struct Gpm_Type *type, -- int argc, char **argv) -+static int I_imps2(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - int id; - static unsigned char basic_init[] = { GPM_AUX_ENABLE_DEV, GPM_AUX_SET_SAMPLE, 100 }; -@@ -1857,36 +1735,36 @@ - static unsigned char ps2_init[] = { GPM_AUX_SET_SCALE11, GPM_AUX_ENABLE_DEV, GPM_AUX_SET_SAMPLE, 100, GPM_AUX_SET_RES, 3, }; - - /* Do a basic init in case the mouse is confused */ -- write_to_mouse(fd, basic_init, sizeof (basic_init)); -+ write_to_mouse(dev->fd, basic_init, sizeof (basic_init)); - - /* Now try again and make sure we have a PS/2 mouse */ -- if (write_to_mouse(fd, basic_init, sizeof (basic_init)) != 0) { -+ if (write_to_mouse(dev->fd, basic_init, sizeof (basic_init)) != 0) { - gpm_report(GPM_PR_ERR,GPM_MESS_IMPS2_INIT); -- return(NULL); -+ return -1; - } - - /* Try to switch to 3 button mode */ -- if (write_to_mouse(fd, imps2_init, sizeof (imps2_init)) != 0) { -+ if (write_to_mouse(dev->fd, imps2_init, sizeof (imps2_init)) != 0) { - gpm_report(GPM_PR_ERR,GPM_MESS_IMPS2_FAILED); -- return(NULL); -+ return -1; - } - - /* Read the mouse id */ -- id = read_mouse_id(fd); -+ id = read_mouse_id(dev->fd); - if (id == GPM_AUX_ID_ERROR) { - gpm_report(GPM_PR_ERR,GPM_MESS_IMPS2_MID_FAIL); - id = GPM_AUX_ID_PS2; - } - - /* And do the real initialisation */ -- if (write_to_mouse(fd, ps2_init, sizeof (ps2_init)) != 0) { -+ if (write_to_mouse(dev->fd, ps2_init, sizeof (ps2_init)) != 0) { - gpm_report(GPM_PR_ERR,GPM_MESS_IMPS2_SETUP_FAIL); - } - - if (id == GPM_AUX_ID_IMPS2) { - /* Really an intellipoint, so initialise 3 button mode (4 byte packets) */ - gpm_report(GPM_PR_INFO,GPM_MESS_IMPS2_AUTO); -- return type; -+ return 0; - } - if (id != GPM_AUX_ID_PS2) { - gpm_report(GPM_PR_ERR,GPM_MESS_IMPS2_BAD_ID, id); -@@ -1894,69 +1772,64 @@ - else gpm_report(GPM_PR_INFO,GPM_MESS_IMPS2_PS2); - - for (type=mice; type->fun; type++) -- if (strcmp(type->name, "ps2") == 0) return(type); -+ if (strcmp(type->name, "ps2") == 0) return 0; - - /* ps2 was not found!!! */ -- return(NULL); -+ return -1; - } - - /* - * This works with Dexxa Optical Mouse, but because in X same initstring - * is named ExplorerPS/2 so I named it in the same way. - */ --static Gpm_Type *I_exps2(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_exps2(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - static unsigned char s1[] = { 243, 200, 243, 200, 243, 80, }; - -- if (check_no_argv(argc, argv)) return NULL; -+ if (!check_no_options(type->name, opt->text, ',')) return -1; - -- write (fd, s1, sizeof (s1)); -+ write (dev->fd, s1, sizeof (s1)); - usleep (30000); -- tcflush (fd, TCIFLUSH); -- return type; -+ tcflush (dev->fd, TCIFLUSH); -+ return 0; - } - --static Gpm_Type *I_twid(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_twid(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - -- if (check_no_argv(argc, argv)) return NULL; -+ if (!check_no_options(type->name, opt->text, ',')) return -1; - -- if (twiddler_key_init() != 0) return NULL; -+ if (twiddler_key_init() != 0) return -1; - /* - * the twiddler is a serial mouse: just drop dtr - * and run at 2400 (unless specified differently) - */ -- if(opt_baud==DEF_BAUD) opt_baud = 2400; -- argv[1] = "dtr"; /* argv[1] is guaranteed to be NULL (this is dirty) */ -- return I_serial(fd, flags, type, argc, argv); -+ if (opt->baud == DEF_BAUD) opt->baud = 2400; -+ opt->text = "dtr"; -+ return I_serial(dev, opt, type); - } - --static Gpm_Type *I_calus(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_calus(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { -- if (check_no_argv(argc, argv)) return NULL; -+ if (!check_no_options(type->name, opt->text, ',')) return -1; - -- if (opt_baud == 1200) opt_baud=9600; /* default to 9600 */ -- return I_serial(fd, flags, type, argc, argv); -+ if (opt->baud == 1200) opt->baud = 9600; /* default to 9600 */ -+ return I_serial(dev, opt, type); - } - - /* synaptics touchpad, ps2 version: Henry Davies */ --static Gpm_Type *I_synps2(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_synps2(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { -- syn_ps2_init (fd); -- return type; -+ syn_ps2_init (dev->fd); -+ return 0; - } - - --static Gpm_Type *I_summa(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_summa(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - void resetsumma() - { -- write(fd,0,1); /* Reset */ -+ write(dev->fd,0,1); /* Reset */ - usleep(400000); /* wait */ - } - int waitsumma() -@@ -1964,7 +1837,7 @@ - struct timeval timeout; - fd_set readfds; - int err; -- FD_ZERO(&readfds); FD_SET(fd, &readfds); -+ FD_ZERO(&readfds); FD_SET(dev->fd, &readfds); - timeout.tv_sec = 0; timeout.tv_usec = 200000; - err = select(FD_SETSIZE, &readfds, NULL, NULL, &timeout); - return(err); -@@ -1987,34 +1860,34 @@ - char GEN_MODELL=0x7f; - - /* Set speed to 9600bps */ -- setspeed (fd, 1200, 9600, 1, B9600|CS8|CREAD|CLOCAL|HUPCL|PARENB|PARODD); -+ setspeed (dev->fd, 1200, 9600, 1, B9600|CS8|CREAD|CLOCAL|HUPCL|PARENB|PARODD); - resetsumma(); - -- write(fd, SS_PROMPT_MODE, strlen(SS_PROMPT_MODE)); -+ write(dev->fd, SS_PROMPT_MODE, strlen(SS_PROMPT_MODE)); - - if (strstr(type->name,"acecad")!=NULL) summaid=11; - - if (summaid<0) { /* Summagraphics test */ - /* read the Summa Firm-ID */ -- write(fd, SS_FIRMID, strlen(SS_FIRMID)); -+ write(dev->fd, SS_FIRMID, strlen(SS_FIRMID)); - err=waitsumma(); - if (!((err == -1) || (!err))) { - summaid=10; /* Original Summagraphics */ -- read(fd, buffer, 255); /* Read Firm-ID */ -+ read(dev->fd, buffer, 255); /* Read Firm-ID */ - } - } - - if (summaid<0) { /* Genius-test */ - resetsumma(); -- write(fd,GEN_MMSERIES,1); -- write(fd,&GEN_MODELL,1); /* Read modell */ -+ write(dev->fd,GEN_MMSERIES,1); -+ write(dev->fd,&GEN_MODELL,1); /* Read modell */ - err=waitsumma(); - if (!((err == -1) || (!err))) { /* read Genius-ID */ - err=waitsumma(); - if (!((err == -1) || (!err))) { - err=waitsumma(); - if (!((err == -1) || (!err))) { -- read(fd,&config,1); -+ read(dev->fd,&config,1); - summaid=(config[0] & 224) >> 5; /* genius tablet-id (0-7)*/ - } - } -@@ -2024,30 +1897,29 @@ - /* unknown tablet ?*/ - if ((summaid<0) || (summaid==11)) { - resetsumma(); -- write(fd, SS_BINARY_FMT SS_PROMPT_MODE, 3); -+ write(dev->fd, SS_BINARY_FMT SS_PROMPT_MODE, 3); - } - - /* read tablet size */ - err=waitsumma(); -- if (!((err == -1) || (!err))) read(fd,buffer,sizeof(buffer)); -- write(fd,SS_READCONFIG,1); -- read(fd,&config,5); -+ if (!((err == -1) || (!err))) read(dev->fd,buffer,sizeof(buffer)); -+ write(dev->fd,SS_READCONFIG,1); -+ read(dev->fd,&config,5); - summamaxx=(config[2]<<7 | config[1])-(SUMMA_BORDER*2); - summamaxy=(config[4]<<7 | config[3])-(SUMMA_BORDER*2); - -- write(fd,SS_ABSOLUTE SS_STREAM_MODE SS_UPPER_ORIGIN,3); -- if (summaid<0) write(fd,SS_500LPI SS_TABID0 SS_BINARY_FMT,4); -+ write(dev->fd,SS_ABSOLUTE SS_STREAM_MODE SS_UPPER_ORIGIN,3); -+ if (summaid<0) write(dev->fd,SS_500LPI SS_TABID0 SS_BINARY_FMT,4); - -- return type; -+ return 0; - } - --static Gpm_Type *I_mtouch(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_mtouch(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - struct termios tty; - - /* Set speed to 9600bps (copied from I_summa, above :) */ -- tcgetattr(fd, &tty); -+ tcgetattr(dev->fd, &tty); - tty.c_iflag = IGNBRK | IGNPAR; - tty.c_oflag = 0; - tty.c_lflag = 0; -@@ -2055,18 +1927,17 @@ - tty.c_cc[VTIME] = 0; - tty.c_cc[VMIN] = 1; - tty.c_cflag = B9600|CS8|CREAD|CLOCAL|HUPCL; -- tcsetattr(fd, TCSAFLUSH, &tty); -+ tcsetattr(dev->fd, TCSAFLUSH, &tty); - - - /* Turn it to "format tablet" and "mode stream" */ -- write(fd,"\001MS\r\n\001FT\r\n",10); -+ write(dev->fd,"\001MS\r\n\001FT\r\n",10); - -- return type; -+ return 0; - } - - /* simple initialization for the gunze touchscreen */ --static Gpm_Type *I_gunze(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_gunze(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - struct termios tty; - FILE *f; -@@ -2075,29 +1946,29 @@ - - #define GUNZE_CALIBRATION_FILE SYSCONFDIR "/gpm-calibration" - /* accept a few options */ -- static argv_helper optioninfo[] = { -- {"smooth", ARGV_INT, u: {iptr: &gunze_avg}}, -- {"debounce", ARGV_INT, u: {iptr: &gunze_debounce}}, -+ static struct option_helper optioninfo[] = { -+ {"smooth", OPT_INT, u: {iptr: &gunze_avg}}, -+ {"debounce", OPT_INT, u: {iptr: &gunze_debounce}}, - /* FIXME: add corner tapping */ -- {"", ARGV_END} -+ {"", OPT_END} - }; -- parse_argv(optioninfo, argc, argv); -+ parse_options(type->name, opt->text, ',', optioninfo); - - /* check that the baud rate is valid */ -- if (opt_baud == DEF_BAUD) opt_baud = 19200; /* force 19200 as default */ -- if (opt_baud != 9600 && opt_baud != 19200) { -- gpm_report(GPM_PR_ERR,GPM_MESS_GUNZE_WRONG_BAUD,option.progname, argv[0]); -- opt_baud = 19200; -+ if (opt->baud == DEF_BAUD) opt->baud = 19200; /* force 19200 as default */ -+ if (opt->baud != 9600 && opt->baud != 19200) { -+ gpm_report(GPM_PR_ERR, GPM_MESS_GUNZE_WRONG_BAUD, option.progname, type->name); -+ opt->baud = 19200; - } -- tcgetattr(fd, &tty); -+ tcgetattr(dev->fd, &tty); - tty.c_iflag = IGNBRK | IGNPAR; - tty.c_oflag = 0; - tty.c_lflag = 0; - tty.c_line = 0; - tty.c_cc[VTIME] = 0; - tty.c_cc[VMIN] = 1; -- tty.c_cflag = (opt_baud == 9600 ? B9600 : B19200) |CS8|CREAD|CLOCAL|HUPCL; -- tcsetattr(fd, TCSAFLUSH, &tty); -+ tty.c_cflag = (opt->baud == 9600 ? B9600 : B19200) |CS8|CREAD|CLOCAL|HUPCL; -+ tcsetattr(dev->fd, TCSAFLUSH, &tty); - - /* FIXME: try to find some information about the device */ - -@@ -2120,19 +1991,18 @@ - gunze_calib[0] = gunze_calib[1] = 128; /* 1/8 */ - gunze_calib[2] = gunze_calib[3] = 896; /* 7/8 */ - } -- return type; -+ return 0; - } - - /* Genius Wizardpad tablet -- Matt Kimball (mkimball@xmission.com) */ --static Gpm_Type *I_wp(int fd, unsigned short flags, -- struct Gpm_Type *type, int argc, char **argv) -+static int I_wp(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type) - { - struct termios tty; - char tablet_info[256]; - int count, pos, size; - - /* Set speed to 9600bps (copied from I_summa, above :) */ -- tcgetattr(fd, &tty); -+ tcgetattr(dev->fd, &tty); - tty.c_iflag = IGNBRK | IGNPAR; - tty.c_oflag = 0; - tty.c_lflag = 0; -@@ -2140,22 +2010,22 @@ - tty.c_cc[VTIME] = 0; - tty.c_cc[VMIN] = 1; - tty.c_cflag = B9600|CS8|CREAD|CLOCAL|HUPCL; -- tcsetattr(fd, TCSAFLUSH, &tty); -+ tcsetattr(dev->fd, TCSAFLUSH, &tty); - - /* Reset the tablet (':') and put it in remote mode ('S') so that - it isn't sending anything to us. */ -- write(fd, ":S", 2); -- tcsetattr(fd, TCSAFLUSH, &tty); -+ write(dev->fd, ":S", 2); -+ tcsetattr(dev->fd, TCSAFLUSH, &tty); - - /* Query the model of the tablet */ -- write(fd, "T", 1); -+ write(dev->fd, "T", 1); - sleep(1); -- count = read(fd, tablet_info, 255); -+ count = read(dev->fd, tablet_info, 255); - - /* The tablet information should start with "KW" followed by the rest of - the model number. If it isn't there, it probably isn't a WizardPad. */ -- if(count < 2) return NULL; -- if(tablet_info[0] != 'K' || tablet_info[1] != 'W') return NULL; -+ if(count < 2) return -1; -+ if(tablet_info[0] != 'K' || tablet_info[1] != 'W') return -1; - - /* Now, we want the width and height of the tablet. They should be - of the form "X###" and "Y###" where ### is the number of units of -@@ -2177,9 +2047,9 @@ - } - - /* Set the tablet to stream mode with 180 updates per sec. ('O') */ -- write(fd, "O", 1); -+ write(dev->fd, "O", 1); - -- return type; -+ return 0; - } - - /*========================================================================*/ -@@ -2241,7 +2111,7 @@ - {0x80, 0x80, 0x80, 0x00}, 6, 6, 0, 0, 0}, - #ifdef HAVE_LINUX_INPUT_H - {"evdev", "Linux Event Device", -- "", M_evdev, I_empty, STD_FLG, -+ "", M_evdev, I_evdev, STD_FLG, - {0x00, 0x00, 0x00, 0x00} , 16, 16, 0, 0, NULL}, - #endif /* HAVE_LINUX_INPUT_H */ - {"exps2", "IntelliMouse Explorer (ps2) - 3 buttons, wheel unused", -diff -urN gpm-1.20.1/src/optparser.c gpm/src/optparser.c ---- gpm-1.20.1/src/optparser.c 1969-12-31 19:00:00.000000000 -0500 -+++ gpm/src/optparser.c 2003-10-02 01:22:42.000000000 -0500 -@@ -0,0 +1,155 @@ -+/* -+ * optparser.c - GPM mouse options parser -+ * -+ * Copyright (C) 1993 Andrew Haylett <ajh@gec-mrc.co.uk> -+ * Copyright (C) 1994-2000 Alessandro Rubini <rubini@linux.it> -+ * Copyright (C) 1998,1999 Ian Zimmerman <itz@rahul.net> -+ * Copyright (C) 2001,2002 Nico Schottelius <nicos@pcsystems.de> -+ * Copyright (C) 2003 Dmitry Torokhov <dtor@mail.ru> -+ * -+ * This program 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 of the License, or -+ * (at your option) any later version. -+ * -+ * This program 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 this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ ********/ -+ -+#include <stdio.h> -+#include <string.h> -+#include <stdlib.h> -+#include <ctype.h> -+ -+#include "headers/gpmInt.h" -+#include "headers/message.h" -+#include "headers/optparser.h" -+ -+int parse_options(const char *proto, const char *opts, char sep, struct option_helper *info) -+{ -+ int len, n, n_opts = 0, errors = 0; -+ long l; -+ struct option_helper *p; -+ char *s, *t, *str; -+ int base; /* for strtol */ -+ -+ for (p = info; p->type != OPT_END; p++) -+ p->present = 0; -+ -+ if (!opts) -+ return 0; -+ -+ if (!(str = strdup(opts))) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_ALLOC_FAILED); -+ -+ /* split input string */ -+ for (s = str, n = 1; sep && (s = strchr(s, sep)); s++, n++) -+ *s = '\0'; -+ -+ for (s = str; n; s += strlen(s) + 1, n--) { -+ if (strlen(s) == 0) -+ continue; -+ -+ for (p = info; p->type != OPT_END; p++) { -+ len = strlen(p->name); -+ if (!strncmp(p->name, s, len) && !isalnum(s[len])) -+ break; -+ } -+ if (p->type == OPT_END) { /* not found */ -+ gpm_report(GPM_PR_ERR, "%s: Uknown option \"%s\" for protocol \"%s\"\n", -+ option.progname, s, proto); -+ errors++; -+ continue; -+ } -+ if (p->present) { -+ gpm_report(GPM_PR_ERR, "%s: option \"%s\" has already been seen, ignored (\"%s\")\n", -+ option.progname, s, proto); -+ continue; -+ } -+ p->present = 1; -+ n_opts++; -+ /* Found. Look for trailing stuff, if any */ -+ s += len; -+ while (*s && isspace(*s)) s++; /* skip spaces */ -+ if (*s == '=') s++; /* skip equal */ -+ while (*s && isspace(*s)) s++; /* skip other spaces */ -+ -+ /* Now parse what s is */ -+ base = 0; -+ switch(p->type) { -+ case OPT_BOOL: -+ if (*s) { -+ gpm_report(GPM_PR_ERR, GPM_MESS_OPTION_NO_ARG, option.progname, p->name, s); -+ errors++; -+ } -+ *(p->u.iptr) = p->value; -+ break; -+ -+ case OPT_DEC: -+ base = 10; /* and fall through */ -+ -+ case OPT_INT: -+ if (*s == '\0') { -+ gpm_report(GPM_PR_ERR, GPM_MESS_MISSING_ARG, option.progname, p->name); -+ } else { -+ l = strtol(s, &t, base); -+ if (*t) { -+ gpm_report(GPM_PR_ERR, GPM_MESS_INVALID_ARG, option.progname, s, p->name); -+ errors++; -+ break; -+ } -+ *(p->u.iptr) = (int)l; -+ } -+ break; -+ -+ case OPT_STRING: -+ if (*s == '\0') -+ gpm_report(GPM_PR_ERR, GPM_MESS_MISSING_ARG, option.progname, p->name); -+ else -+ *(p->u.sptr) = strdup(s); -+ break; -+ -+ case OPT_END: /* let's please "-Wall" */ -+ break; -+ } -+ } /* for i in argc */ -+ -+ free(str); -+ -+ if (errors) { -+ gpm_report(GPM_PR_ERR,GPM_MESS_CONT_WITH_ERR, option.progname); -+ return -errors; -+ } -+ return n_opts; -+} -+ -+int check_no_options(const char *proto, const char *opts, char sep) -+{ -+ static struct option_helper info[] = { -+ { "", OPT_END } -+ }; -+ -+ return parse_options(proto, opts, sep, info) == 0; -+} -+ -+int is_option_present(struct option_helper *info, const char *name) -+{ -+ struct option_helper *p; -+ int len; -+ -+ for (p = info; p->type != OPT_END; p++) { -+ len = strlen(p->name); -+ if (!strncmp(p->name, name, len) && !isalnum(name[len])) -+ return p->present; -+ } -+ -+ gpm_report(GPM_PR_ERR, "%s: Uknown option \"%s\"\n", option.progname, name); -+ return 0; -+} -+ -diff -urN gpm-1.20.1/src/prog/mouse-test.c gpm/src/prog/mouse-test.c ---- gpm-1.20.1/src/prog/mouse-test.c 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/prog/mouse-test.c 2003-10-02 01:22:42.000000000 -0500 -@@ -50,22 +50,9 @@ - #define max(a,b) ((a)>(b)?(a):(b)) - #endif - -- --/* this material is needed to pass options to mice.c */ --struct mouse_features mymouse = { -- DEF_TYPE, DEF_DEV, DEF_SEQUENCE, -- DEF_BAUD, DEF_SAMPLE, DEF_DELTA, DEF_ACCEL, DEF_SCALE, DEF_SCALE /*scaley*/, -- DEF_TIME, DEF_CLUSTER, DEF_THREE, DEF_GLIDEPOINT_TAP, -- (char *)NULL /* extra */, -- (Gpm_Type *)NULL, -- -1 /* fd */ --}; -- - /* and this is a workaroud */ - struct winsize win; - --struct mouse_features *which_mouse=&mymouse; -- - char *progname; - char *consolename; - int devcount=0; -@@ -78,9 +65,9 @@ - - struct device { - char *name; -- int fd; -+ struct micedev mdev; - struct device *next; --}; -+} *devlist; - - static int message(void) - { -@@ -148,47 +135,48 @@ - /*----------------------------------------------------------------------------- - Place the description here. - -----------------------------------------------------------------------------*/ --struct device **gpm_makedev(struct device **current, char *name) -+void gpm_makedev(char *name) - { -- int fd; int modes; -+ struct device *dev; -+ int fd; -+ int modes; -+ - if ((fd=open(name,O_RDWR|O_NONBLOCK))==-1) { - perror(name); -- return current; -- } -- modes = fcntl(fd, F_GETFL); -- if (0 > fcntl(fd, F_SETFL, modes & ~O_NONBLOCK)) { -- close(fd); -- perror(name); -- return current; -+ } else { -+ modes = fcntl(fd, F_GETFL); -+ if (0 > fcntl(fd, F_SETFL, modes & ~O_NONBLOCK)) { -+ close(fd); -+ perror(name); -+ } else { -+ dev = malloc(sizeof(struct device)); -+ if (!dev) gpm_report(GPM_PR_OOPS,"malloc()"); -+ dev->name=strdup(name); -+ if (!dev->name) gpm_report(GPM_PR_OOPS,"malloc()"); -+ dev->mdev.fd=fd; -+ dev->mdev.private = NULL; -+ dev->next=devlist; -+ devlist = dev; -+ devcount++; -+ } - } -- -- *current=malloc(sizeof(struct device)); -- if (!*current) gpm_report(GPM_PR_OOPS,"malloc()"); -- (*current)->name=strdup(name); -- if (!(*current)->name) gpm_report(GPM_PR_OOPS,"malloc()"); -- (*current)->fd=fd; -- (*current)->next=NULL; -- devcount++; -- return &((*current)->next); - } - --Gpm_Type *(*I_serial)(int fd, unsigned short flags, struct Gpm_Type *type, -- int argc, char **argv); -+int (*I_serial)(struct micedev *dev, struct miceopt *opt, struct Gpm_Type *type); - - - /*----------------------------------------------------------------------------- - Place the description here. - -----------------------------------------------------------------------------*/ --int mousereopen(int oldfd, char *name, Gpm_Type *type) -+int mousereopen(struct micedev *dev, char *name, Gpm_Type *type, struct miceopt *opts) - { -- int fd; - if (!type) type=mice+1; /* ms */ -- close(oldfd); -+ close(dev->fd); - usleep(100000); -- fd=open(name,O_RDWR); -- if (fd < 0) gpm_report(GPM_PR_OOPS,name); -- (*I_serial)(fd,type->flags,type,1,&type->name); /* ms initialization */ -- return fd; -+ dev->fd=open(name,O_RDWR); -+ if (dev->fd < 0) gpm_report(GPM_PR_OOPS,name); -+ I_serial(dev, opts, type); /* ms initialization */ -+ return dev->fd; - } - - int noneofthem(void) -@@ -281,10 +269,9 @@ - { - struct item *list=NULL; - struct item **nextitem; -- struct device *devlist=NULL; -- struct device **nextdev; -+ struct device *nextdev; - Gpm_Type *cursor; -- int i, mousefd; -+ int i; - char *mousename; - #define BUFLEN 512 - char buf[BUFLEN]; -@@ -294,6 +281,9 @@ - int trial, readamount,packetsize,got; - int baudtab[4]={1200,9600,4800,2400}; - #define BAUD(i) (baudtab[(i)%4]) -+ struct miceopt opt = {0}; -+ struct micedev mdev = {0}; -+ - consolename = Gpm_get_console(); - - if (!isatty(fileno(stdin))) { -@@ -306,8 +296,8 @@ - - /* init the list of possible devices */ - -- for (nextdev=&devlist, i=1; i<argc; i++) -- nextdev=gpm_makedev(nextdev,argv[i]); -+ for (i=1; i<argc; i++) -+ gpm_makedev(argv[i]); - - if (argc==1) { /* no cmdline, get all devices */ - FILE *f; -@@ -320,7 +310,7 @@ - if (!f) gpm_report(GPM_PR_OOPS,"popen()"); - while (fgets(s,64,f)) { - s[strlen(s)-1]='\0'; /* trim '\n' */ -- nextdev=gpm_makedev(nextdev,s); -+ gpm_makedev(s); - } - pclose(f); - } -@@ -345,19 +335,18 @@ - - /* BUG */ /* Logitech initialization is not performed */ - -- opt_baud=BAUD(trial); -- printf("\r\nTrying with %i baud\r\n",opt_baud); -+ opt.baud=BAUD(trial); -+ printf("\r\nTrying with %i baud\r\n",opt.baud); - trial++; - - FD_ZERO(&devSet); FD_ZERO(&gotSet); - FD_SET(fileno(stdin),&devSet); maxfd=fileno(stdin); - printf("\r\n The possible device nodes are:\r\n"); -- for (nextdev=&devlist; *nextdev; nextdev=&((*nextdev)->next)) { -- printf("\t%s\r\n", (*nextdev)->name); -- FD_SET((*nextdev)->fd,&devSet); -- maxfd=max((*nextdev)->fd,maxfd); -- (*I_serial)((*nextdev)->fd,(mice+1)->flags,mice+1, -- 1, &(mice+1)->name); /* try ms mode */ -+ for (nextdev=devlist; nextdev; nextdev=nextdev->next) { -+ printf("\t%s\r\n", nextdev->name); -+ FD_SET(nextdev->mdev.fd, &devSet); -+ maxfd=max(nextdev->mdev.fd,maxfd); -+ I_serial(&nextdev->mdev, &opt, mice+1); /* try ms mode */ - } - - savSet=devSet; -@@ -379,43 +368,43 @@ - getchar(); - break; - } -- for (nextdev=&devlist; *nextdev; nextdev=&((*nextdev)->next)) -- if (FD_ISSET((*nextdev)->fd,&devSet)) { -+ for (nextdev=devlist; nextdev; nextdev=nextdev->next) -+ if (FD_ISSET(nextdev->mdev.fd,&devSet)) { - gotthem++; -- FD_CLR((*nextdev)->fd,&savSet); -- FD_SET((*nextdev)->fd,&gotSet); -+ FD_CLR(nextdev->mdev.fd,&savSet); -+ FD_SET(nextdev->mdev.fd,&gotSet); - } - } -- if (gotthem) for (nextdev=&devlist; *nextdev; /* nothing */ ) { -- cur=*nextdev; -- if (!FD_ISSET(cur->fd,&gotSet)) { -+ if (gotthem) for (nextdev=devlist; nextdev; /* nothing */ ) { -+ cur=nextdev; -+ if (!FD_ISSET(cur->mdev.fd,&gotSet)) { - printf("removing \"%s\" from the list\r\n",cur->name); -- *nextdev=cur->next; -- close(cur->fd); -+ nextdev=cur->next; -+ close(cur->mdev.fd); - free(cur->name); - free(cur); - devcount--; - } else { -- read(cur->fd,buf,80); /* flush */ -- nextdev=&(cur->next); /* follow list */ -+ read(cur->mdev.fd,buf,80); /* flush */ -+ nextdev=cur->next; /* follow list */ - } - } - - } /* devcount>1 */ - -- mousefd=devlist->fd; -+ mdev=devlist->mdev; - mousename=devlist->name; - free(devlist); - printf("\r\nOk, so your mouse device is \"%s\"\r\n",mousename); - - /* now close and reopen it, complete with initialization */ -- opt_baud=BAUD(0); -- mousefd=mousereopen(mousefd,mousename,NULL); -- -+ opt.baud=BAUD(0); -+ mousereopen(&mdev, mousename, NULL,&opt); -+ - FD_ZERO(&checkSet); -- FD_SET(mousefd,&checkSet); -+ FD_SET(mdev.fd,&checkSet); - FD_SET(fileno(stdin),&checkSet); -- maxfd=max(mousefd,fileno(stdin)); -+ maxfd=max(mdev.fd, fileno(stdin)); - - /*====================================== Identify mouse type */ - -@@ -440,7 +429,7 @@ - printf("\r\nNow please press and release your left mouse button,\r\n" - "one time only\r\n\r\n"); - -- i=read(mousefd,buf,1); -+ i=read(mdev.fd, buf, 1); - if (i==-1 && errno==EINVAL) - readamount=3; - else -@@ -466,7 +455,7 @@ - else - nextitem=&(cur->next); - } -- read(mousefd,buf,BUFLEN); /* flush */ -+ read(mdev.fd, buf, BUFLEN); /* flush */ - - /*====================================== Packet size - second step */ - -@@ -484,12 +473,12 @@ - while (packetsize==1) { - int success3=0,success5=0; - -- opt_baud=BAUD(trial); -- printf("\tBaud rate is %i\r\n",opt_baud); -- mousefd=mousereopen(mousefd,mousename,NULL); -+ opt.baud=BAUD(trial); -+ printf("\tBaud rate is %i\r\n",opt.baud); -+ mousereopen(&mdev, mousename,NULL, &opt); - - printf("\r\n==> Detecting the packet size\r\n"); -- got=eventlist(mousefd,buf,BUFLEN,GPM_B_LEFT,readamount); -+ got=eventlist(mdev.fd,buf,BUFLEN,GPM_B_LEFT,readamount); - - /* try three -- look at repeating arrays of 6 bytes */ - for (i=0;i<got-12;i++) -@@ -512,8 +501,7 @@ - trial++; - } - --/*====================================== Use that info to discard protocols */ -- -+/*====================================== Use that info to discard protocols */ - for (nextitem=&list; *nextitem; /* nothing */) { - struct item *cur=*nextitem; - int packetheads=0; -@@ -530,7 +518,7 @@ - if ( ((buf[i] &(cur->this->proto)[0]) == (cur->this->proto)[1]) - && ((buf[i+1]&(cur->this->proto)[2]) == (cur->this->proto)[3]) ) { - packetheads++; -- if ((*(cur->this->fun))(&event,buf+i)==-1) { -+ if ((*(cur->this->fun))(&mdev, &opt, buf+i, &event)==-1) { - packetheads--; - continue; - } -@@ -594,7 +582,7 @@ - * First trial: remove the "-t ms" extension if spurious buttons come in - */ - -- got=eventlist(mousefd,buf,BUFLEN,0,readamount); -+ got=eventlist(mdev.fd,buf,BUFLEN,0,readamount); - pending=0; - for (nextitem=&list; *nextitem; /* nothing */) { - struct item *cur=*nextitem; -@@ -604,7 +592,7 @@ - for (i=0;i<got;i++) { - if ( ((buf[i] &(cur->this->proto)[0]) == (cur->this->proto)[1]) - && ((buf[i+1]&(cur->this->proto)[2]) == (cur->this->proto)[3]) ) { -- if ((*(cur->this->fun))(&event,buf+i)==-1) continue; -+ if ((*(cur->this->fun))(&mdev, &opt, buf+i, &event)==-1) continue; - i+=packetsize-1; - if (event.buttons) pending--; - } -@@ -624,8 +612,8 @@ - */ - - printf("\r\n==> Looking for '-t mman'and enhanced ms\r\n"); -- mousefd=mousereopen(mousefd,mousename, mice /* mman */); -- got=eventlist(mousefd,buf,BUFLEN,GPM_B_MIDDLE,readamount); -+ mousereopen(&mdev, mousename, mice /* mman */, &opt); -+ got=eventlist(mdev.fd, buf, BUFLEN, GPM_B_MIDDLE, readamount); - - /* if it uses the 4-byte protocol, find it in a rude way */ - for (pending=0,i=0;i<got-16;i++) -@@ -646,7 +634,7 @@ - for (i=0;i<got;i++) { - if ( ((buf[i] &(cur->this->proto)[0]) == (cur->this->proto)[1]) - && ((buf[i+1]&(cur->this->proto)[2]) == (cur->this->proto)[3]) ) { -- if ((*(cur->this->fun))(&event,buf+i)==-1) continue; -+ if ((*(cur->this->fun))(&mdev,&opt,buf+i,&event)==-1) continue; - i+=packetsize-1; - if (event.buttons && event.buttons!=GPM_B_MIDDLE) pending--; - if (event.buttons==GPM_B_MIDDLE) pending++; -@@ -677,16 +665,16 @@ - char *Xtognames[3]={"'ClearDTR' and 'ClearRTS'","'ClearDTR'","'ClearRTS'"}; - int alllines,lines, index; - -- ioctl(mousefd, TIOCMGET, &alllines); -+ ioctl(mdev.fd, TIOCMGET, &alllines); - - printf("\r\nSome mice change protocol to three-buttons-aware if some\r\n" - "\r\ncontrol lines are toggled after opening\r\n"); - for (index=0;index<3;index++) { -- mousereopen(mousefd,mousename,NULL); -+ mousereopen(&mdev, mousename, NULL, &opt); - lines = alllines & ~toggle[index]; -- ioctl(mousefd, TIOCMSET, &lines); -+ ioctl(mdev.fd, TIOCMSET, &lines); - printf("\r\n==> Trying with '-o %s'\r\n",tognames[index]); -- got=eventlist(mousefd,buf,BUFLEN,GPM_B_MIDDLE,readamount); -+ got=eventlist(mdev.fd, buf, BUFLEN, GPM_B_MIDDLE, readamount); - - /* if it uses the 5-byte protocol, find it in a rude way */ - for (pending=0,i=0;i<got-20;i++) -@@ -717,7 +705,7 @@ - - getchar(); - -- got=eventlist(mousefd,buf,BUFLEN,GPM_B_MIDDLE,readamount); -+ got=eventlist(mdev.fd,buf,BUFLEN,GPM_B_MIDDLE,readamount); - - /* if it uses the 5-byte protocol, find it in a rude way */ - for (pending=0,i=0;i<got-20;i++) -diff -urN gpm-1.20.1/src/report.c gpm/src/report.c ---- gpm-1.20.1/src/report.c 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/report.c 2003-10-02 01:22:42.000000000 -0500 -@@ -31,6 +31,7 @@ - - #include "headers/gpmInt.h" - #include "headers/message.h" -+#include "headers/console.h" - - /* - * gpm_report -@@ -70,7 +71,7 @@ - - void gpm_report(int line, char *file, int stat, char *text, ... ) - { -- FILE *console = NULL; -+ FILE *f = NULL; - va_list ap; - - va_start(ap,text); -@@ -138,11 +139,11 @@ - syslog(LOG_DAEMON | LOG_WARNING, GPM_STRING_WARN); - vsyslog(LOG_DAEMON | LOG_WARNING, text, ap); - #endif -- if((console = fopen(GPM_SYS_CONSOLE,"a")) != NULL) { -- fprintf(console,GPM_STRING_WARN); -- vfprintf(console,text,ap); -- fprintf(console,"\n"); -- fclose(console); -+ if ((f = fopen(GPM_SYS_CONSOLE, "a")) != NULL) { -+ fprintf(f, GPM_STRING_WARN); -+ vfprintf(f, text, ap); -+ fprintf(f, "\n"); -+ fclose(f); - } - break; - -@@ -151,18 +152,18 @@ - syslog(LOG_DAEMON | LOG_ERR, GPM_STRING_ERR); - vsyslog(LOG_DAEMON | LOG_ERR, text, ap); - #endif -- if((console = fopen(GPM_SYS_CONSOLE,"a")) != NULL) { -- fprintf(console,GPM_STRING_ERR); -- vfprintf(console,text,ap); -- fprintf(console,"\n"); -- fclose(console); -+ if ((f = fopen(GPM_SYS_CONSOLE, "a")) != NULL) { -+ fprintf(f, GPM_STRING_ERR); -+ vfprintf(f, text, ap); -+ fprintf(f, "\n"); -+ fclose(f); - } - -- if((console = fopen(option.consolename,"a")) != NULL) { -- fprintf(console,GPM_STRING_ERR); -- vfprintf(console,text,ap); -- fprintf(console,"\n"); -- fclose(console); -+ if ((f = fopen(console.device, "a")) != NULL) { -+ fprintf(f, GPM_STRING_ERR); -+ vfprintf(f, text, ap); -+ fprintf(f, "\n"); -+ fclose(f); - } - break; - -@@ -184,24 +185,24 @@ - case GPM_RUN_DEBUG: - switch(stat) { - case GPM_STAT_INFO: -- console = stdout; -- fprintf(console,GPM_STRING_INFO); break; -+ f = stdout; -+ fprintf(f, GPM_STRING_INFO); break; - case GPM_STAT_WARN: -- console = stderr; -- fprintf(console,GPM_STRING_WARN); break; -+ f = stderr; -+ fprintf(f, GPM_STRING_WARN); break; - case GPM_STAT_ERR: -- console = stderr; -- fprintf(console,GPM_STRING_ERR); break; -+ f = stderr; -+ fprintf(f, GPM_STRING_ERR); break; - case GPM_STAT_DEBUG: -- console = stderr; -- fprintf(console,GPM_STRING_DEBUG); break; -+ f = stderr; -+ fprintf(f, GPM_STRING_DEBUG); break; - case GPM_STAT_OOPS: -- console = stderr; -- fprintf(console,GPM_STRING_OOPS); break; -+ f = stderr; -+ fprintf(f, GPM_STRING_OOPS); break; - } - -- vfprintf(console,text,ap); -- fprintf(console,"\n"); -+ vfprintf(f, text, ap); -+ fprintf(f, "\n"); - - if(stat == GPM_STAT_OOPS) exit(1); - -diff -urN gpm-1.20.1/src/selection.c gpm/src/selection.c ---- gpm-1.20.1/src/selection.c 1969-12-31 19:00:00.000000000 -0500 -+++ gpm/src/selection.c 2003-10-02 01:22:42.000000000 -0500 -@@ -0,0 +1,156 @@ -+/* -+ * console.c - GPM console and selection/paste handling -+ * -+ * Copyright (C) 1993 Andreq Haylett <ajh@gec-mrc.co.uk> -+ * Copyright (C) 1994-1999 Alessandro Rubini <rubini@linux.it> -+ * Copyright (C) 1998 Ian Zimmerman <itz@rahul.net> -+ * Copyright (c) 2001,2002 Nico Schottelius <nico@schottelius.org> -+ * Copyright (c) 2003 Dmitry Torokhov <dtor@mail.ru> -+ * -+ * This program 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 of the License, or -+ * (at your option) any later version. -+ * -+ * This program 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 this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ ********/ -+ -+#include <stdio.h> -+#include <stdlib.h> -+#include <string.h> /* strerror(); ?!? */ -+#include <errno.h> -+#include <unistd.h> /* select(); */ -+#include <time.h> /* time() */ -+#include <sys/fcntl.h> /* O_RDONLY */ -+#include <sys/stat.h> /* mkdir() */ -+#include <asm/types.h> /* __u32 */ -+ -+#include <linux/vt.h> /* VT_GETSTATE */ -+#include <sys/kd.h> /* KDGETMODE */ -+#include <termios.h> /* winsize */ -+ -+#include "headers/gpmInt.h" -+#include "headers/message.h" -+#include "headers/console.h" -+#include "headers/selection.h" -+ -+struct sel_options sel_opts = { 0, 0, DEF_PTRDRAG }; -+static time_t last_selection_time; -+ -+/*-------------------------------------------------------------------*/ -+static void selection_copy(int x1, int y1, int x2, int y2, int mode) -+{ -+/* -+ * The approach in "selection" causes a bus error when run under SunOS 4.1 -+ * due to alignment problems... -+ */ -+ unsigned char buf[6 * sizeof(short)]; -+ unsigned short *arg = (unsigned short *)buf + 1; -+ int fd; -+ -+ buf[sizeof(short) - 1] = 2; /* set selection */ -+ -+ arg[0] = (unsigned short)x1; -+ arg[1] = (unsigned short)y1; -+ arg[2] = (unsigned short)x2; -+ arg[3] = (unsigned short)y2; -+ arg[4] = (unsigned short)mode; -+ -+ if ((fd = open_console(O_WRONLY)) < 0) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_OPEN_CON); -+ -+ gpm_report(GPM_PR_DEBUG, "ctl %i, mode %i", (int)*buf, arg[4]); -+ if (ioctl(fd, TIOCLINUX, buf + sizeof(short) - 1) < 0) -+ gpm_report(GPM_PR_OOPS,GPM_MESS_IOCTL_TIOCLINUX); -+ close(fd); -+ -+ if (mode < 3) { -+ sel_opts.aged = 0; -+ last_selection_time = time(0); -+ } -+} -+ -+/*-------------------------------------------------------------------*/ -+static void selection_paste(void) -+{ -+ char c = 3; -+ int fd; -+ -+ if (!sel_opts.aged && -+ sel_opts.age_limit != 0 && -+ last_selection_time + sel_opts.age_limit < time(0)) { -+ sel_opts.aged = 1; -+ } -+ -+ if (sel_opts.aged) { -+ gpm_report(GPM_PR_DEBUG, GPM_MESS_SKIP_PASTE); -+ } else { -+ fd = open_console(O_WRONLY); -+ if (ioctl(fd, TIOCLINUX, &c) < 0) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_IOCTL_TIOCLINUX); -+ close(fd); -+ } -+} -+ -+/*-------------------------------------------------------------------*/ -+void do_selection(Gpm_Event *event, int three_button_mode) -+{ -+ static int x1 = 1, y1 = 1; -+ int x2, y2; -+ -+ x2 = event->x; y2 = event->y; -+ switch(GPM_BARE_EVENTS(event->type)) { -+ case GPM_MOVE: -+ if (x2 < 1) x2++; else if (x2 > console.max_x) x2--; -+ if (y2 < 1) y2++; else if (y2 > console.max_y) y2--; -+ selection_copy(x2, y2, x2, y2, 3); /* just highlight pointer */ -+ break; -+ -+ case GPM_DRAG: -+ if (event->buttons == GPM_B_LEFT) { -+ switch(event->margin) { /* fix margins */ -+ case GPM_TOP: x2 = 1; y2++; break; -+ case GPM_BOT: x2 = console.max_x; y2--; break; -+ case GPM_RGT: x2--; break; -+ case GPM_LFT: y2 <= y1 ? x2++ : (x2 = console.max_x, y2--); break; -+ default: break; -+ } -+ selection_copy(x1, y1, x2, y2, event->clicks); -+ if (event->clicks >= sel_opts.ptrdrag && !event->margin) /* pointer */ -+ selection_copy(x2, y2, x2, y2, 3); -+ } /* if */ -+ break; -+ -+ case GPM_DOWN: -+ switch (event->buttons) { -+ case GPM_B_LEFT: -+ x1 = x2; y1 = y2; -+ selection_copy(x1, y1, x2, y2, event->clicks); /* start selection */ -+ break; -+ -+ case GPM_B_MIDDLE: -+ selection_paste(); -+ break; -+ -+ case GPM_B_RIGHT: -+ if (three_button_mode == 1) -+ selection_copy(x1, y1, x2, y2, event->clicks); -+ else -+ selection_paste(); -+ break; -+ } -+ } /* switch above */ -+} -+ -+/*-------------------------------------------------------------------*/ -+void selection_disable_paste(void) -+{ -+ sel_opts.aged = 1; -+} -diff -urN gpm-1.20.1/src/server_tools.c gpm/src/server_tools.c ---- gpm-1.20.1/src/server_tools.c 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/server_tools.c 2003-10-02 01:22:42.000000000 -0500 -@@ -21,151 +21,80 @@ - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - ********/ - -+#include <string.h> -+#include <stdlib.h> /* malloc() */ -+#include <sys/fcntl.h> -+ - #include "headers/gpmInt.h" - #include "headers/message.h" - --#include <stdlib.h> /* malloc() */ -+struct micetab *micelist; - --/* DESCR: add this to the list of mice. initialization follows later */ --/* RETURN: - */ -+/* DESCR: allocate a new mouse and to the list of mice. initialization follows later */ -+/* RETURN: new mouse structure */ - /* COMMENT: does error handling and exiting itself */ --void add_mouse(int type, char *value) -+struct micetab *add_mouse(void) - { -- struct micetab *tmp = option.micelist; -+ struct micetab *mouse; - -- /* PREAMBLE for all work: */ -- /* -m /dev/misc/psaux -t ps2 [ -o options ] */ -+ gpm_report(GPM_PR_DEBUG, "adding mouse device"); -+ if (!(mouse = malloc(sizeof(struct micetab)))) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_NO_MEM); -+ -+ memset(mouse, 0, sizeof(struct micetab)); -+ -+ mouse->dev.timeout = -1; -+ -+ mouse->options.sequence = NULL; -+ mouse->options.sample = DEF_SAMPLE; -+ mouse->options.delta = DEF_DELTA; -+ mouse->options.accel = DEF_ACCEL; -+ mouse->options.scalex = DEF_SCALE; -+ mouse->options.scaley = DEF_SCALE; -+ mouse->options.time = DEF_TIME; -+ mouse->options.cluster = DEF_CLUSTER; -+ mouse->options.three_button = DEF_THREE; -+ mouse->options.glidepoint_tap = DEF_GLIDEPOINT_TAP; -+ mouse->options.text = NULL; - -- switch(type) { -+ mouse->next = micelist; -+ micelist = mouse; - -- /*---------------------------------------------------------------------*/ -- /********************** -m mousedevice *********************************/ -- /*---------------------------------------------------------------------*/ -- -- case GPM_ADD_DEVICE: -- -- /* first invocation */ -- if(option.micelist == NULL) { -- gpm_report(GPM_PR_DEBUG,"adding mouse device: %s",value); -- option.micelist = (struct micetab *) malloc(sizeof(struct micetab)); -- if(!option.micelist) gpm_report(GPM_PR_OOPS,GPM_MESS_NO_MEM); -- option.micelist->next = NULL; -- option.micelist->device = value; -- option.micelist->protocol = NULL; -- option.micelist->options = NULL; -- return; -- } -- -- /* find actual mouse */ -- while(tmp->device != NULL && tmp->protocol != NULL && tmp->next !=NULL) -- tmp = tmp->next; -- -- gpm_report(GPM_PR_DEBUG,"finished searching"); -- -- /* found end of micelist, add new mouse */ -- if(tmp->next == NULL && tmp->protocol != NULL) { -- gpm_report(GPM_PR_DEBUG,"next mouse making"); -- tmp->next = (struct micetab *) malloc(sizeof(struct micetab)); -- if(!tmp) gpm_report(GPM_PR_OOPS,GPM_MESS_NO_MEM); -- tmp->next = NULL; -- tmp->device = value; -- tmp->protocol = NULL; -- tmp->options = NULL; -- return; -- } else gpm_report(GPM_PR_OOPS,GPM_MESS_FIRST_DEV); -- -- //} else if(tmp->device != NULL && tmp->protocol == NULL) -- // gpm_report(GPM_PR_OOPS,GPM_MESS_FIRST_DEV); /* -m -m */ -- -- -- break; -- -- /*---------------------------------------------------------------------*/ -- /************************* -t type / protocol **************************/ -- /*---------------------------------------------------------------------*/ -- -- case GPM_ADD_TYPE: -- if(option.micelist == NULL) gpm_report(GPM_PR_OOPS,GPM_MESS_FIRST_DEV); -- -- /* skip to next mouse, where either device or protocol is missing */ -- while(tmp->device != NULL && tmp->protocol != NULL && tmp->next !=NULL) -- tmp = tmp->next; -- -- /* check whether device (-m) is there, if so, write protocol */ -- if(tmp->device == NULL) gpm_report(GPM_PR_OOPS,GPM_MESS_FIRST_DEV); -- else { -- gpm_report(GPM_PR_DEBUG,"adding mouse type: %s",value); -- tmp->protocol = value; -- option.no_mice++; /* finally we got our mouse */ -- } -- -- break; -- -- /*---------------------------------------------------------------------*/ -- /*************************** -o options ********************************/ -- /*---------------------------------------------------------------------*/ -- -- case GPM_ADD_OPTIONS: -- if(option.micelist == NULL) gpm_report(GPM_PR_OOPS,GPM_MESS_FIRST_DEV); -- -- /* look for the last mouse */ -- tmp = option.micelist; -- while(tmp->next != NULL) tmp = tmp->next; -- -- /* if -m or -t are missing exit */ -- if(tmp->device == NULL || tmp->protocol == NULL) -- gpm_report(GPM_PR_OOPS,GPM_MESS_FIRST_DEV); -- else { -- gpm_report(GPM_PR_DEBUG,"adding mouse options: %s",value); -- tmp->options = value; -- } -- break; -- } -+ return mouse; - } - --/* DESCR: mice initialization. currently print mice. */ --/* RETURN: 0 - failed to init one or more devices -- 1 - init was fine */ -+/* DESCR: mice initialization. calls appropriate init functions. */ - /* COMMENT: does error handling and exiting itself */ --int init_mice(struct micetab *micelist) -+void init_mice(void) - { -- struct micetab *tmp = micelist; -+ struct micetab *mouse; -+ -+ for (mouse = micelist; mouse; mouse = mouse->next) { -+ if (!strcmp(mouse->device, "-")) -+ mouse->dev.fd = 0; /* use stdin */ -+ else if ((mouse->dev.fd = open(mouse->device, O_RDWR | O_NDELAY)) < 0) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_OPEN, mouse->device); - -- while(tmp != NULL) { /* there are still mice to init */ -- gpm_report(GPM_PR_DEBUG,"initialize %s with proto %s",tmp->device,tmp->protocol); -- if(tmp->options != NULL) { -- gpm_report(GPM_PR_DEBUG,"and options %s",tmp->options); -- } -- tmp = tmp->next; -+ /* and then reset the flag */ -+ fcntl(mouse->dev.fd, F_SETFL, fcntl(mouse->dev.fd, F_GETFL) & ~O_NDELAY); -+ -+ /* init the device, and use the return value as new mouse type */ -+ if (mouse->type->init) -+ if (mouse->type->init(&mouse->dev, &mouse->options, mouse->type)) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_MOUSE_INIT); - } -- -- gpm_report(GPM_PR_DEBUG,"finished initialization"); -- return 1; - } - - /* DESCR: when leaving, we should reset mice to their normal state */ --/* RETURN: 0 - failed to reset one or more devices -- 1 - reset was fine */ - /* COMMENT: does error handling and exiting itself */ --int reset_mice(struct micetab *micelist) -+void cleanup_mice(void) - { -- struct micetab *tmp = micelist; -- struct micetab *end = tmp; -- -- while(tmp != NULL) { /* FIXME! I never get NULL, as free()d before */ -- end = tmp; -- while(tmp->next != NULL) { /* set end to the last mouse */ -- end = tmp; -- tmp = tmp->next; -- } -- -- gpm_report(GPM_PR_DEBUG,"reset: %s with proto %s",end->device,end->protocol); -- if(tmp->options != NULL) { -- gpm_report(GPM_PR_DEBUG,"and options %s",end->options); -- } -- free(end); /* be clean() */ -- tmp = micelist; /* reset to the first mice again */ -+ struct micetab *tmp; -+ -+ while ((tmp = micelist)) { -+ if (micelist->dev.private) -+ free(micelist->dev.private); -+ micelist = micelist->next; -+ free(tmp); - } -- -- return 1; - } -diff -urN gpm-1.20.1/src/special.c gpm/src/special.c ---- gpm-1.20.1/src/special.c 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/special.c 2003-10-02 01:22:42.000000000 -0500 -@@ -37,6 +37,7 @@ - #include <sys/param.h> - - #include "headers/gpmInt.h" -+#include "headers/console.h" - - /* - * This function is only called at button press, to avoid unnecessary -@@ -78,7 +79,7 @@ - return 1; - - /* devfs change */ -- consolef=fopen(option.consolename,"w"); -+ consolef = fopen(console.device, "w"); - if (!consolef) consolef=stderr; - if (event->type & GPM_TRIPLE) /* just triggered: make noise and return */ - { -@@ -153,7 +154,7 @@ - case 0: /* child */ - close(0); close(1); close(2); - open(GPM_NULL_DEV,O_RDONLY); /* stdin */ -- open(option.consolename,O_WRONLY); /* stdout */ -+ open(console.device, O_WRONLY); /* stdout */ - dup(1); /* stderr */ - for (i=3;i<OPEN_MAX; i++) close(i); - execl("/bin/sh","sh","-c",command,(char *)NULL); -diff -urN gpm-1.20.1/src/startup.c gpm/src/startup.c ---- gpm-1.20.1/src/startup.c 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/startup.c 2003-10-02 01:22:42.000000000 -0500 -@@ -26,6 +26,7 @@ - #include <string.h> /* strlen() */ - #include <errno.h> /* errno */ - #include <unistd.h> /* unlink,geteuid */ -+#include <signal.h> - #include <sys/types.h> /* geteuid, mknod */ - #include <sys/stat.h> /* mknod */ - #include <fcntl.h> /* mknod */ -@@ -34,11 +35,13 @@ - - #include "headers/gpmInt.h" - #include "headers/message.h" -+#include "headers/console.h" -+#include "headers/selection.h" - - /* what todo atexit */ - static void gpm_exited(void) - { -- gpm_report(GPM_PR_DEBUG,GPM_MESS_REMOVE_FILES, GPM_NODE_PID, GPM_NODE_CTL); -+ gpm_report(GPM_PR_DEBUG, GPM_MESS_REMOVE_FILES, GPM_NODE_PID, GPM_NODE_CTL); - unlink(GPM_NODE_PID); - unlink(GPM_NODE_CTL); - } -@@ -48,34 +51,12 @@ - extern struct options option; - extern int errno; - -- int i,opt; -- -- static struct { -- char *in; -- char *out; -- } seq[] = { -- {"123","01234567"}, -- {"132","02134657"}, -- {"213","01452367"}, /* warning: these must be readable as integers... */ -- {"231","02461357"}, -- {"312","04152637"}, -- {"321","04261537"}, -- {NULL,NULL} -- }; -- - /* basic settings */ - option.run_status = GPM_RUN_STARTUP; /* 10,9,8,... let's go */ - option.autodetect = 0; /* no mouse autodection */ - option.progname = argv[0]; /* who we are */ -- option.consolename = Gpm_get_console(); /* get consolename */ -- -- /* basic2: are not necessary for oops()ing, if not root */ -- option.no_mice = 0; /* counts -m + -t */ -- option.micelist = NULL; /* no mice found yet */ -- option.repeater = 0; /* repeat data */ -- option.repeater_type = NULL; /* type of */ -- - -+ get_console_name(); - cmdline(argc, argv); /* parse command line */ - - if (geteuid() != 0) gpm_report(GPM_PR_OOPS,GPM_MESS_ROOT); /* root or exit */ -@@ -87,54 +68,18 @@ - /****************** OLD CODE from gpn.c ***********************/ - - openlog(option.progname, LOG_PID, -- option.run_status != GPM_RUN_DEBUG ? LOG_DAEMON : LOG_USER); -- loadlut(opt_lut); -- -- if (option.repeater) { -- if(mkfifo(GPM_NODE_FIFO,0666) && errno!=EEXIST) -- gpm_report(GPM_PR_OOPS,GPM_MESS_CREATE_FIFO,GPM_NODE_FIFO); -- if((fifofd=open(GPM_NODE_FIFO, O_RDWR|O_NONBLOCK)) < 0) -- gpm_report(GPM_PR_OOPS, GPM_MESS_OPEN, GPM_NODE_FIFO); -- } -- -- /* duplicate initialization */ -- for (i=1; i <= 1+opt_double; i++) { -- which_mouse=mouse_table+i; /* used to access options */ -- if (opt_accel < 1) exit(usage("acceleration")); -- if (opt_delta < 2) exit(usage("delta")); -- if (strlen(opt_sequence) != 3 || atoi(opt_sequence)<100) -- exit(usage("sequence")); -- if (opt_glidepoint_tap > 3) exit(usage("glidepoint tap button")); -- if (opt_glidepoint_tap) -- opt_glidepoint_tap=GPM_B_LEFT >> (opt_glidepoint_tap-1); -- -- /* choose the sequence */ -- for (opt=0; seq[opt].in && strcmp(seq[opt].in,opt_sequence); opt++) ; -- if(!seq[opt].in) exit(usage("button sequence")); -- opt_sequence=strdup(seq[opt].out); /* I can rewrite on it */ -- -- /* look for the mouse type */ -- m_type = find_mouse_by_name(opt_type); -- if (!m_type) /* not found */ -- exit(M_listTypes()); -- } -+ option.run_status != GPM_RUN_DEBUG ? LOG_DAEMON : LOG_USER); - -- /* Check repeater status */ -- if (option.repeater) { -- if (strcmp(option.repeater_type,"raw") == 0) -- opt_rawrep = 1; -- else { -- /* look for the type */ -- repeated_type = find_mouse_by_name(option.repeater_type); -+ console_load_lut(); - -- if(!repeated_type) exit(M_listTypes()); /* not found */ -- -- if (!(repeated_type->repeat_fun)) /* unsupported translation */ -- gpm_report(GPM_PR_OOPS,GPM_MESS_NO_REPEAT,option.repeater_type); -- } -+ if (repeater.raw || repeater.type) { -+ if (mkfifo(GPM_NODE_FIFO, 0666) && errno != EEXIST) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_CREATE_FIFO, GPM_NODE_FIFO); -+ if ((repeater.fd = open(GPM_NODE_FIFO, O_RDWR|O_NONBLOCK)) < 0) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_OPEN, GPM_NODE_FIFO); - } - -- if(option.run_status == GPM_RUN_STARTUP ) { /* else is debugging */ -+ if(option.run_status == GPM_RUN_STARTUP) { /* else is debugging */ - /* goto background and become a session leader (Stefan Giessler) */ - switch(fork()) { - case -1: gpm_report(GPM_PR_OOPS,GPM_MESS_FORK_FAILED); /* error */ -@@ -152,13 +97,63 @@ - /* is changing to root needed, because of relative paths ? or can we just - * remove and ignore it ?? FIXME */ - if (chdir("/") < 0) gpm_report(GPM_PR_OOPS,GPM_MESS_CHDIR_FAILED); -- - -- //return mouse_table[1].fd; /* the second is handled in the main() */ -+ atexit(gpm_exited); /* call gpm_exited at the end */ -+} - -- /****************** OLD CODE from gpn.c END ***********************/ -+/* itz Sat Sep 12 10:30:05 PDT 1998 this function used to mix two -+ completely different things; opening a socket to a running daemon -+ and checking that a running daemon existed. Ugly. */ -+/* rewritten mostly on 20th of February 2002 - nico */ -+void check_uniqueness(void) -+{ -+ FILE *fp = 0; -+ int old_pid = -1; - -- init_mice(option.micelist); /* reads option.micelist */ -- atexit(gpm_exited); /* call gpm_exited at the end */ -+ if ((fp = fopen(GPM_NODE_PID, "r")) != NULL) { -+ fscanf(fp, "%d", &old_pid); -+ if (kill(old_pid, 0) == -1) { -+ gpm_report(GPM_PR_INFO,GPM_MESS_STALE_PID, GPM_NODE_PID); -+ unlink(GPM_NODE_PID); -+ } else /* we are really running, exit asap! */ -+ gpm_report(GPM_PR_OOPS, GPM_MESS_ALREADY_RUN, old_pid); -+ } -+ /* now try to sign ourself */ -+ if ((fp = fopen(GPM_NODE_PID,"w")) != NULL) { -+ fprintf(fp,"%d\n",getpid()); -+ fclose(fp); -+ } else { -+ gpm_report(GPM_PR_OOPS,GPM_MESS_NOTWRITE,GPM_NODE_PID); -+ } -+} - -+/* itz Sat Sep 12 10:55:51 PDT 1998 Added this as replacement for the -+ unwanted functionality in check_uniqueness. */ -+void kill_gpm(void) -+{ -+ int old_pid; -+ FILE* fp = fopen(GPM_NODE_PID, "r"); -+ -+ /* if we cannot find the old pid file, leave */ -+ if (fp == NULL) gpm_report(GPM_PR_OOPS,GPM_MESS_OPEN, GPM_NODE_PID); -+ -+ /* else read the pid */ -+ if (fscanf(fp, "%d", &old_pid) != 1) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_READ_PROB, GPM_NODE_PID); -+ fclose(fp); -+ -+ gpm_report(GPM_PR_DEBUG, GPM_MESS_KILLING, old_pid); -+ -+ /* first check if we run */ -+ if (kill(old_pid,0) == -1) { -+ gpm_report(GPM_PR_INFO, GPM_MESS_STALE_PID, GPM_NODE_PID); -+ unlink(GPM_NODE_PID); -+ } -+ /* then kill us (not directly, but the other instance ... ) */ -+ if (kill(old_pid, SIGTERM) == -1) -+ gpm_report(GPM_PR_OOPS, GPM_MESS_CANT_KILL, old_pid); -+ -+ gpm_report(GPM_PR_INFO, GPM_MESS_KILLED, old_pid); -+ exit(0); - } -+ -diff -urN gpm-1.20.1/src/synaptics.c gpm/src/synaptics.c ---- gpm-1.20.1/src/synaptics.c 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/synaptics.c 2003-10-02 01:22:42.000000000 -0500 -@@ -865,7 +865,7 @@ - static int scrolling_speed_timer = 0; - static int scrolling_amount_left = 0; /* Tells how much to scroll up or down */ - -- -+static int mouse_fd; - - - -@@ -882,6 +882,7 @@ - ** which makes reading the debug data harder, only dump the report if it is different - ** than the previously dumped. - */ -+#if DEBUG_REPORTS - static void tp_dump_report_data (report_type report, - int edges, - Gpm_Event* state) -@@ -934,7 +935,7 @@ - (multi_finger_pressure>4500 && multi_finger_xy>50000? 'f':' ')); - - } -- -+#endif - - /* syn_dump_info - ** -@@ -1158,8 +1159,8 @@ - status = GPM_B_NOT_SET; - break; - case Reset_Touchpad_Action: -- syn_ps2_reset(which_mouse->fd); -- syn_ps2_absolute_mode(which_mouse->fd); -+ syn_ps2_reset(mouse_fd); -+ syn_ps2_absolute_mode(mouse_fd); - status = GPM_B_NOT_SET; - break; - case Toggle_Four_Way_Button_Action: -@@ -2950,10 +2951,8 @@ - data [0],data [1],data [2],data [3],data [4],data [5]); - - if (reset_on_error_enabled) { -- /* Hack to get the fd: which_mouse is the current mouse, -- and as the synaptic code is called, it is the current mouse. */ -- syn_ps2_reset(which_mouse->fd); -- syn_ps2_absolute_mode(which_mouse->fd); -+ syn_ps2_reset(mouse_fd); -+ syn_ps2_absolute_mode(mouse_fd); - } - - report->left = 0; -@@ -3108,7 +3107,7 @@ - ** - ** Process the touchpad 6 byte report. - */ --void syn_process_serial_data (Gpm_Event *state, -+void syn_process_serial_data (int fd, Gpm_Event *state, - unsigned char *data) - { - /* initialize the state */ -@@ -3116,6 +3115,8 @@ - state->dx = 0; - state->dy = 0; - -+ mouse_fd = fd; /* cheat */ -+ - syn_serial_translate_data (data, &cur_report); - if (wmode_enabled){ - syn_process_wmode_report(&cur_report); -@@ -3196,7 +3197,7 @@ - ** - ** Process the touchpad 6 byte report. - */ --void syn_process_ps2_data (Gpm_Event *state, -+void syn_process_ps2_data (int fd, Gpm_Event *state, - unsigned char *data) - { - /* gpm_report(GPM_PR_DEBUG,"Data %02x %02x %02x %02x %02x %02x",data[0],data[1],data[2],data[3],data[4],data[5]); */ -@@ -3206,6 +3207,7 @@ - state->dx = 0; - state->dy = 0; - -+ mouse_fd = fd; /* cheat */ - - if (wmode_enabled) { - syn_ps2_translate_wmode_data (data, &cur_report); -diff -urN gpm-1.20.1/src/tools.c gpm/src/tools.c ---- gpm-1.20.1/src/tools.c 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/tools.c 1969-12-31 19:00:00.000000000 -0500 -@@ -1,93 +0,0 @@ --/* -- * tools.c - tools which are needed by client and server -- * -- * Copyright (c) 2001 Nico Schottelius <nico@schottelius.org> -- * -- * This program 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 of the License, or -- * (at your option) any later version. -- * -- * This program 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 this program; if not, write to the Free Software -- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -- ********/ -- --#include <stdio.h> /* NULL */ --#include <string.h> --#include <stdlib.h> --#include <sys/types.h> /* these three are */ --#include <sys/stat.h> /* needed for */ --#include <unistd.h> /* stat() */ -- --#include "headers/gpmInt.h" /* only used for some defines */ --#include "headers/message.h" -- --/***************************************************************************** -- * check, whether devfs is used or not. -- * See /usr/src/linux/Documentation/filesystems/devfs/ for details. -- * Returns: the name of the console (/dev/tty0 or /dev/vc/0) -- *****************************************************************************/ --char *Gpm_get_console( void ) --{ -- -- char *back = NULL, *tmp = NULL; -- struct stat buf; -- -- /* first try the devfs device, because in the next time this will be -- * the preferred one. If that fails, take the old console */ -- -- /* Check for open new console */ -- if (stat(GPM_DEVFS_CONSOLE,&buf) == 0) -- tmp = GPM_DEVFS_CONSOLE; -- -- /* Failed, try OLD console */ -- else if(stat(GPM_OLD_CONSOLE,&buf) == 0) -- tmp = GPM_OLD_CONSOLE; -- -- if(tmp != NULL) -- if((back = malloc(strlen(tmp) + sizeof(char)) ) != NULL) -- strcpy(back,tmp); -- -- return(back); --} -- --/* what's the english name for potenz ? */ --int Gpm_x_high_y(int base, int pot_y) --{ -- int val = 1; -- -- if(pot_y == 0) val = 1; -- else if(pot_y < 0) val = 0; /* ugly hack ;) */ -- else while(pot_y > 0) { -- val = val * base; -- pot_y--; -- } -- return val; --} -- --/* return characters needed to display int */ --int Gpm_cnt_digits(int number) --{ -- /* 0-9 = 1 10^0 <-> (10^1)-1 -- * 10 - 99 = 2 10^1 <-> (10^2)-1 -- * 100 - 999 = 3 10^2 <-> (10^3)-1 -- * 1000 - 9999 = 4 ... */ -- -- int ret = 0, num = 0; -- -- /* non negative, please */ -- if(number < 0) number *= -1; -- else if(number == 0) ret = 1; -- else while(number > num) { -- ret++; -- num = (Gpm_x_high_y(10,ret) - 1); -- } -- -- return(ret); --} -diff -urN gpm-1.20.1/src/twiddler.c gpm/src/twiddler.c ---- gpm-1.20.1/src/twiddler.c 2002-12-24 17:57:16.000000000 -0500 -+++ gpm/src/twiddler.c 2003-10-02 01:22:42.000000000 -0500 -@@ -54,6 +54,7 @@ - #include "headers/gpm.h" - #include "headers/gpmInt.h" - #include "headers/message.h" -+#include "headers/console.h" - #include "headers/twiddler.h" - - -@@ -134,17 +135,6 @@ - int (*fun)(char *string); - }; - -- --/* The same silly function as in gpm.c */ --static inline int open_console(const int mode) --{ -- int fd; -- extern struct options option; -- if ((fd=open(option.consolename, mode)) < 0) gpm_report(GPM_PR_OOPS,GPM_MESS_OPEN,option.consolename); -- return fd; --} -- -- - /*===================================================================*/ - /* This part deals with pushing keys */ - -@@ -175,7 +165,7 @@ - int twiddler_exec(char *s) - { - int pid; -- extern struct options option; -+ - switch(pid=fork()) { - case -1: return -1; - case 0: -@@ -184,7 +174,7 @@ - close(2); /* very rude! */ - - open(GPM_NULL_DEV,O_RDONLY); -- open(option.consolename,O_WRONLY); -+ open(console.device, O_WRONLY); - dup(1); - execl("/bin/sh", "sh", "-c", s, NULL); - exit(1); /* shouldn't happen */ diff --git a/source/a/gpm/gpm.SlackBuild b/source/a/gpm/gpm.SlackBuild index a79ce2b6c..25ac63b03 100755 --- a/source/a/gpm/gpm.SlackBuild +++ b/source/a/gpm/gpm.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2008, 2009, 2010, 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,8 +22,8 @@ # by: volkerdi@slackware.com -VERSION=1.20.1 -BUILD=${BUILD:-5} +VERSION=1.20.7 +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -54,10 +54,10 @@ rm -rf $PKG mkdir -p $TMP $PKG cd $TMP -rm -rf gpm-$VERSION -tar xjvf $CWD/gpm-$VERSION.tar.bz2 -cd gpm-$VERSION -sed -i -e "s/OPEN_MAX/NR_OPEN/" $(grep -lr OPEN_MAX *) +rm -rf gpm-$VERSION || exit 1 +tar xvf $CWD/gpm-$VERSION.tar.xz || exit 1 +cd gpm-$VERSION || exit 1 + chown -R root:root . find . \ \( -perm 700 -o -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ @@ -65,90 +65,80 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -zcat $CWD/gpm-evdev-cumulative.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm.evdevmakefile.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm-1.20.1-math.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm-1.20.1-weak-wgetch.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm-1.20.1-nodebug.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm-1.20.1-gpmopen.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm-1.20.1-idie.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm-1.20.1-subscript.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm-1.20.1-input.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm-1.20.1-consolename.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm-1.20.1-multilib.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm-1.20.1-no-console-error.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/gpm-1.20.1-lib-silent.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm-1.20.1.send-noise-to-syslogs.diff.gz | patch -p1 --verbose || exit 1 -zcat $CWD/gpm-1.20.1-input-defines.diff.gz | patch -p1 --verbose || exit 1 +zcat $CWD/gpm-1.20.5-close-fds.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/gpm-1.20.1-select-1.patch.gz | patch -p1 --verbose || exit 1 + +sh autogen.sh + +# This is *supposed* to prevent linking libgpm.so with -lncurses, +# but for some reason it doesn't have the desired effect here. +# Any ideas? The patch is supposed to resolve a circular dependency +# between libgpm.so and libncurses.so. I don't notice any ill effects +# here, but perhaps the problem would occur if prelinking was used. +# Also, ncurses has not shown an ldd link to libgpm for several releases, +# so perhaps any problem that existed was fixed on their end. +# NOTE: Since this isn't preventing gpm from linking to ncurses, I'm +# commenting this patch out until we understand better if it's even +# useful for anything. Half a patch seems worse than no patch. +#zcat $CWD/gpm-1.20.1-weak-wgetch.patch.gz | patch -p1 --verbose || exit 1 +# Since we just patched configure.ac, run this again to carry the change +# into configure: autoconf CFLAGS="$SLKCFLAGS" \ ./configure \ --prefix=/usr \ --sysconfdir=/etc \ - $ARCH-slackware-linux + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --build=$ARCH-slackware-linux make || exit 1 +make install DESTDIR=$PKG || exit 1 + +rm -f $PKG/usr/share/emacs/site-lisp/*.elc + +chmod 755 $PKG/usr/lib${LIBDIRSUFFIX}/libgpm.so.* +mkdir $PKG/lib${LIBDIRSUFFIX} +mv $PKG/usr/lib${LIBDIRSUFFIX}/libgpm.so.* $PKG/lib${LIBDIRSUFFIX} +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/libgpm.so +( cd $PKG/usr/lib${LIBDIRSUFFIX} + ln -sf ../../lib${LIBDIRSUFFIX}/libgpm.so.? libgpm.so ) + zcat $CWD/inputattach.c.gz > inputattach.c gcc $SLKCFLAGS -o inputattach inputattach.c || exit - -mkdir -p $PKG/usr/bin $PKG/etc/rc.d cat inputattach > $PKG/usr/bin/inputattach -( cd src - mkdir -p $PKG/usr/sbin - cat gpm > $PKG/usr/sbin/gpm - cat prog/disable-paste > $PKG/usr/bin/disable-paste - cat prog/gpm-root > $PKG/usr/bin/gpm-root - cat prog/hltest > $PKG/usr/bin/hltest - cat prog/mev > $PKG/usr/bin/mev - cat prog/mouse-test > $PKG/usr/bin/mouse-test - mkdir -p $PKG/usr/include - cp headers/gpm.h $PKG/usr/include/gpm.h - chmod 644 $PKG/usr/include/gpm.h - mkdir -p $PKG/usr/lib${LIBDIRSUFFIX} $PKG/lib${LIBDIRSUFFIX} - cat lib/libgpm.a > $PKG/usr/lib${LIBDIRSUFFIX}/libgpm.a - cat lib/libgpm.so.1.19.0 > $PKG/lib${LIBDIRSUFFIX}/libgpm.so.1.19.0 - chmod 755 $PKG/lib${LIBDIRSUFFIX}/libgpm.so.1.19.0 -) + +mkdir -p $PKG/etc/rc.d + ( cd conf - mkdir -p $PKG/etc cat gpm-root.conf > $PKG/etc/gpm-root.conf cat gpm-syn.conf > $PKG/etc/gpm-syn.conf cat gpm-twiddler.conf > $PKG/etc/gpm-twiddler.conf ) -( cd contrib/emacs - mkdir -p $PKG/usr/share/emacs/site-lisp - cat t-mouse.el > $PKG/usr/share/emacs/site-lisp/t-mouse.el -) + +mv $PKG/usr/share/{info,man} $PKG/usr +gzip -9 $PKG/usr/man/man*/*.? +gzip -9 $PKG/usr/info/* + mkdir -p $PKG/usr/doc/gpm-$VERSION cp -a \ - BUGS COPYING Changelog Changes MANIFEST README TODO \ + BUGS COPYING* Changelog Changes MANIFEST README* TODO \ + doc/{Announce,FAQ,HACK_GPM,README*,changelog} \ $PKG/usr/doc/gpm-$VERSION -( cd doc - for page in *.1 *.7 *.8 ; do - CHAPTER=`echo $page | cut -f 2 -d .` - mkdir -p $PKG/usr/man/man$CHAPTER - cat $page | gzip -9c > $PKG/usr/man/man${CHAPTER}/$page.gz - done - mkdir -p $PKG/usr/info - cat gpm.info | gzip -9c > $PKG/usr/info/gpm.info.gz - cp -a \ - Announce FAQ HACK_GPM README* \ - $PKG/usr/doc/gpm-$VERSION -) -( cd $PKG/usr/lib${LIBDIRSUFFIX} - ln -sf ../../lib${LIBDIRSUFFIX}/libgpm.so.1 libgpm.so ) -( cd $PKG/lib${LIBDIRSUFFIX} ; ln -sf libgpm.so.1.19.0 libgpm.so.1 ) + zcat $CWD/mouseconfig.gz > $PKG/usr/sbin/mouseconfig chmod 755 $PKG/usr/bin/* $PKG/usr/sbin/* mkdir -p $PKG/var/log/setup zcat $CWD/setup.mouse.gz > $PKG/var/log/setup/setup.mouse chmod 755 $PKG/var/log/setup/setup.mouse + ( cd $PKG find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) + mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc diff --git a/source/a/gpm/gpm.evdevmakefile.patch b/source/a/gpm/gpm.evdevmakefile.patch deleted file mode 100644 index bd56c3aab..000000000 --- a/source/a/gpm/gpm.evdevmakefile.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./src/Makefile.in.orig 2006-02-07 15:24:17.000000000 -0600 -+++ ./src/Makefile.in 2006-02-07 15:26:03.000000000 -0600 -@@ -12,7 +12,7 @@ - include $(top_builddir)/Makefile.include - - # Main portion: regular build rules --MICESRC = mice.c twiddler.c synaptics.c @EVDEV_SRCS@ -+MICESRC = mice.c twiddler.c synaptics.c evdev.c - - GSRC = main.c gpm.c gpn.c special.c startup.c server_tools.c console.c \ - selection.c client.c optparser.c $(MICESRC) diff --git a/source/a/gpm/slack-desc b/source/a/gpm/slack-desc index 17774f10e..7d0bdc952 100644 --- a/source/a/gpm/slack-desc +++ b/source/a/gpm/slack-desc @@ -14,6 +14,6 @@ gpm: server for applications running on the Linux console, such as the gpm: Midnight Commander file manager. gpm: gpm: NOTE: This program may cause problems when you start X on systems -gpm: that do not use a serial mouse. If you get an 'unable to open mouse -gpm: device' error from X, disable /etc/rc.d/rc.gpm. +gpm: that use a bus mouse (not common). If you get an 'unable to open +gpm: mouse device' error from X, disable /etc/rc.d/rc.gpm. gpm: diff --git a/source/a/gptfdisk/gptfdisk.SlackBuild b/source/a/gptfdisk/gptfdisk.SlackBuild index 6c6f5fc94..c61556535 100755 --- a/source/a/gptfdisk/gptfdisk.SlackBuild +++ b/source/a/gptfdisk/gptfdisk.SlackBuild @@ -24,7 +24,7 @@ PKGNAM=gptfdisk VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-2} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then diff --git a/source/a/grub/doinst.sh b/source/a/grub/doinst.sh new file mode 100644 index 000000000..20b6c34e2 --- /dev/null +++ b/source/a/grub/doinst.sh @@ -0,0 +1,16 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +config etc/grub.d/40_custom.new +rm -f etc/grub.d/40_custom.new +config etc/default/grub.new diff --git a/source/a/grub/etc.default.grub b/source/a/grub/etc.default.grub new file mode 100644 index 000000000..f612a35a7 --- /dev/null +++ b/source/a/grub/etc.default.grub @@ -0,0 +1,28 @@ +# If you change this file, run grub-mkconfig -o /boot/grub/grub.cfg +# afterwards to update /boot/grub/grub.cfg. + +GRUB_DEFAULT=0 +#GRUB_HIDDEN_TIMEOUT=0 +GRUB_HIDDEN_TIMEOUT_QUIET=false +GRUB_TIMEOUT=10 +GRUB_DISTRIBUTOR=$( sed 's/Slackware /Slackware-/' /etc/slackware-version ) +GRUB_CMDLINE_LINUX_DEFAULT="" +GRUB_CMDLINE_LINUX="" + +# Uncomment to disable graphical terminal (grub-pc only) +#GRUB_TERMINAL=console + +# The resolution used on graphical terminal +# note that you can use only modes which your graphic card supports via VBE +# you can see them in real GRUB with the command `vbeinfo' +#GRUB_GFXMODE=640x480 +#GRUB_GFXMODE=1024x768x32 + +# Font used on the graphical terminal: +#GRUB_FONT=/usr/share/grub/dejavusansmono.pf2 + +# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux +#GRUB_DISABLE_LINUX_UUID=true + +# Uncomment to disable generation of recovery mode menu entrys +#GRUB_DISABLE_LINUX_RECOVERY="true" diff --git a/source/a/grub/grub.SlackBuild b/source/a/grub/grub.SlackBuild new file mode 100755 index 000000000..5a0c27e81 --- /dev/null +++ b/source/a/grub/grub.SlackBuild @@ -0,0 +1,192 @@ +#!/bin/sh + +# Copyright 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +PKGNAM=grub +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-2} + +# Automatically determine the architecture we're building on: +if [ -z "$ARCH" ]; then + case "$(uname -m)" in + i?86) ARCH=i486 ;; + arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7lh ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) ARCH=$(uname -m) ;; + esac + export ARCH +fi + +NUMJOBS=${NUMJOBS:-" -j7 "} + +if [ "$ARCH" = "i386" ]; then + SLKCFLAGS="-O2 -march=i386 -mcpu=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "s390" ]; then + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2" + EFI_FLAGS=" --with-platform=efi --target=x86_64 --program-prefix= " + LIBDIRSUFFIX="64" +elif [ "$ARCH" = "armv7hl" ]; then + SLKCFLAGS="-O3 -march=armv7-a -mfpu=vfpv3-d16" + LIBDIRSUFFIX="" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp} +PKG=$TMP/package-$PKGNAM + +rm -rf $PKG +mkdir -p $TMP $PKG + +cd $TMP +rm -rf $PKGNAM-$VERSION +tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1 +cd $PKGNAM-$VERSION + +chown -R root:root . +find . \ + \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \; + +# Use /boot/initrd.gz as a valid initrd name: +zcat $CWD/initrd_naming.patch | patch -p1 --verbose || exit 1 + +# Patch for recent glibc: +zcat $CWD/txtHRnXiHYUrM.txt.gz | patch -p0 --verbose || exit 1 + +# Support DejaVuSansMono font (dejavusansmono.pf2) by default: +zcat $CWD/grub.dejavusansmono.gfxterm.font.diff.gz | patch -p1 --verbose || exit 1 + +# Terminate EFI several times. This is a workaround for broken UEFI firmware. +zcat $CWD/grub.e75fdee420a7ad95e9a465c9699adc2e2e970440.terminate.efi.several.times.diff.gz | patch -p1 --verbose || exit 1 + +for i in 1 2 ; do + # Skip to regular build if EFI support is not requested: + if [ i = 1 -a -z "$EFI_FLAGS" ]; then + continue; + fi + + # Configure: + CFLAGS="$SLKCFLAGS" \ + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --infodir=/usr/info \ + --mandir=/usr/man \ + --disable-werror \ + $EFI_FLAGS + + # Build and install: + make clean + make $NUMJOBS || make || exit 1 + make install DESTDIR=$PKG || exit 1 + + # Clear $EFI_FLAGS for a regular build: + unset EFI_FLAGS +done + +# Preserve the contents of /etc/grub.d/40_custom: +mv $PKG/etc/grub.d/40_custom $PKG/etc/grub.d/40_custom.new + +# Strip binaries: +( cd $PKG + find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null +) + +mkdir -p $PKG/etc/default +cat $CWD/etc.default.grub > $PKG/etc/default/grub.new + +# Add fonts, if found on the system: +FONT_SIZE=${FONT_SIZE:-19} +if [ -r /usr/share/fonts/TTF/unifont.ttf ]; then + $PKG/usr/bin/grub-mkfont -o $PKG/usr/share/grub/unifont.pf2 -abv \ + -s $FONT_SIZE /usr/share/fonts/TTF/unifont.ttf +fi +if [ -r /usr/share/fonts/TTF/DejaVuSansMono.ttf ]; then + $PKG/usr/bin/grub-mkfont -o $PKG/usr/share/grub/dejavusansmono.pf2 -abv \ + -s $FONT_SIZE /usr/share/fonts/TTF/DejaVuSansMono.ttf +fi + +# Add a documentation directory: +mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION +cp -a \ + AUTHORS BUGS COPYING* INSTALL NEWS README* THANKS TODO \ + $PKG/usr/doc/${PKGNAM}-$VERSION + +# Compress and if needed symlink the man pages: +if [ -d $PKG/usr/man ]; then + ( cd $PKG/usr/man + for manpagedir in $(find . -type d -name "man*") ; do + ( cd $manpagedir + for eachpage in $( find . -type l -maxdepth 1) ; do + ln -s $( readlink $eachpage ).gz $eachpage.gz + rm $eachpage + done + gzip -9 *.? + ) + done + ) +fi + +# Compress info files, if any: +if [ -d $PKG/usr/info ]; then + ( cd $PKG/usr/info + rm -f dir + gzip -9 * + ) +fi + +# If there's a ChangeLog, installing at least part of the recent history +# is useful, but don't let it get totally out of control: +if [ -r ChangeLog ]; then + DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION) + cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog + touch -r ChangeLog $DOCSDIR/ChangeLog +fi + +mkdir -p $PKG/install +zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz + diff --git a/source/a/grub/grub.dejavusansmono.gfxterm.font.diff b/source/a/grub/grub.dejavusansmono.gfxterm.font.diff new file mode 100644 index 000000000..53c21ba8e --- /dev/null +++ b/source/a/grub/grub.dejavusansmono.gfxterm.font.diff @@ -0,0 +1,43 @@ +--- ./util/grub.d/00_header.in.orig 2012-05-03 18:04:39.000000000 -0500 ++++ ./util/grub.d/00_header.in 2013-09-17 01:43:37.870841064 -0500 +@@ -143,7 +143,7 @@ + EOF + else + for dir in "${pkgdatadir}" "`echo '/@bootdirname@/@grubdirname@' | sed "s,//*,/,g"`" /usr/share/grub ; do +- for basename in unicode unifont ascii; do ++ for basename in unicode unifont dejavusansmono ascii; do + path="${dir}/${basename}.pf2" + if is_path_readable_by_grub "${path}" > /dev/null ; then + font_path="${path}" +@@ -156,7 +156,7 @@ + if [ -n "${font_path}" ] ; then + cat << EOF + if [ x\$feature_default_font_path = xy ] ; then +- font=unicode ++ font=dejavusansmono + else + EOF + # Make the font accessible +@@ -169,7 +169,7 @@ + EOF + else + cat << EOF +-if loadfont unicode ; then ++if loadfont dejavusansmono ; then + EOF + fi + fi +--- ./util/grub-install.in.orig 2012-06-26 16:31:03.000000000 -0500 ++++ ./util/grub-install.in 2013-09-17 01:42:02.678834196 -0500 +@@ -552,6 +552,11 @@ + cp "${pkgdatadir}"/themes/starfield/* "${grubdir}"/themes/starfield + fi + ++if test -f "${pkgdatadir}"/dejavusansmono.pf2; then ++ mkdir -p "${grubdir}"/fonts ++ cp "${pkgdatadir}"/dejavusansmono.pf2 "${grubdir}"/fonts ++fi ++ + if test -f "${pkgdatadir}"/unicode.pf2; then + mkdir -p "${grubdir}"/fonts + cp "${pkgdatadir}"/unicode.pf2 "${grubdir}"/fonts diff --git a/source/a/grub/grub.e75fdee420a7ad95e9a465c9699adc2e2e970440.terminate.efi.several.times.diff b/source/a/grub/grub.e75fdee420a7ad95e9a465c9699adc2e2e970440.terminate.efi.several.times.diff new file mode 100644 index 000000000..d45528488 --- /dev/null +++ b/source/a/grub/grub.e75fdee420a7ad95e9a465c9699adc2e2e970440.terminate.efi.several.times.diff @@ -0,0 +1,75 @@ +From e75fdee420a7ad95e9a465c9699adc2e2e970440 Mon Sep 17 00:00:00 2001 +From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com> +Date: Tue, 26 Mar 2013 10:34:56 +0000 +Subject: * grub-core/kern/efi/mm.c (grub_efi_finish_boot_services): + + Try terminating EFI services several times due to quirks in some + implementations. +--- +(limited to 'grub-core/kern/efi/mm.c') + +diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c +index 351317b..77c9384 100644 +--- a/grub-core/kern/efi/mm.c ++++ b/grub-core/kern/efi/mm.c +@@ -160,27 +160,41 @@ grub_efi_finish_boot_services (grub_efi_uintn_t *outbuf_size, void *outbuf, + apple, sizeof (apple)) == 0); + #endif + +- if (grub_efi_get_memory_map (&finish_mmap_size, finish_mmap_buf, &finish_key, +- &finish_desc_size, &finish_desc_version) < 0) +- return grub_error (GRUB_ERR_IO, "couldn't retrieve memory map"); ++ while (1) ++ { ++ if (grub_efi_get_memory_map (&finish_mmap_size, finish_mmap_buf, &finish_key, ++ &finish_desc_size, &finish_desc_version) < 0) ++ return grub_error (GRUB_ERR_IO, "couldn't retrieve memory map"); + +- if (outbuf && *outbuf_size < finish_mmap_size) +- return grub_error (GRUB_ERR_IO, "memory map buffer is too small"); ++ if (outbuf && *outbuf_size < finish_mmap_size) ++ return grub_error (GRUB_ERR_IO, "memory map buffer is too small"); + +- finish_mmap_buf = grub_malloc (finish_mmap_size); +- if (!finish_mmap_buf) +- return grub_errno; ++ finish_mmap_buf = grub_malloc (finish_mmap_size); ++ if (!finish_mmap_buf) ++ return grub_errno; + +- if (grub_efi_get_memory_map (&finish_mmap_size, finish_mmap_buf, &finish_key, +- &finish_desc_size, &finish_desc_version) <= 0) +- return grub_error (GRUB_ERR_IO, "couldn't retrieve memory map"); ++ if (grub_efi_get_memory_map (&finish_mmap_size, finish_mmap_buf, &finish_key, ++ &finish_desc_size, &finish_desc_version) <= 0) ++ { ++ grub_free (finish_mmap_buf); ++ return grub_error (GRUB_ERR_IO, "couldn't retrieve memory map"); ++ } + +- b = grub_efi_system_table->boot_services; +- status = efi_call_2 (b->exit_boot_services, grub_efi_image_handle, +- finish_key); +- if (status != GRUB_EFI_SUCCESS) +- return grub_error (GRUB_ERR_IO, "couldn't terminate EFI services"); ++ b = grub_efi_system_table->boot_services; ++ status = efi_call_2 (b->exit_boot_services, grub_efi_image_handle, ++ finish_key); ++ if (status == GRUB_EFI_SUCCESS) ++ break; + ++ if (status != GRUB_EFI_INVALID_PARAMETER) ++ { ++ grub_free (finish_mmap_buf); ++ return grub_error (GRUB_ERR_IO, "couldn't terminate EFI services"); ++ } ++ ++ grub_free (finish_mmap_buf); ++ grub_printf ("Trying to terminate EFI services again\n"); ++ } + grub_efi_is_finished = 1; + if (outbuf_size) + *outbuf_size = finish_mmap_size; +-- +cgit v0.9.0.2 + diff --git a/source/a/grub/initrd_naming.patch b/source/a/grub/initrd_naming.patch new file mode 100644 index 000000000..6b62778b0 --- /dev/null +++ b/source/a/grub/initrd_naming.patch @@ -0,0 +1,13 @@ +diff -Naur grub-2.00.orig/util/grub.d/10_linux.in grub-2.00/util/grub.d/10_linux.in +--- grub-2.00.orig/util/grub.d/10_linux.in 2012-04-18 23:24:38.000000000 +0200 ++++ grub-2.00/util/grub.d/10_linux.in 2012-06-30 07:53:03.765625589 +0200 +@@ -198,7 +198,8 @@ + "initramfs-genkernel-${version}" \ + "initramfs-genkernel-${alt_version}" \ + "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \ +- "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do ++ "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}" \ ++ "initrd.gz"; do + if test -e "${dirname}/${i}" ; then + initrd="$i" + break diff --git a/source/a/grub/slack-desc b/source/a/grub/slack-desc new file mode 100644 index 000000000..a8159e64e --- /dev/null +++ b/source/a/grub/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +grub: GRUB (the GRand Unified Bootloader) +grub: +grub: GNU GRUB is a multiboot boot loader. +grub: +grub: Website: http://www.gnu.org/software/grub/ +grub: +grub: +grub: +grub: +grub: +grub: diff --git a/source/a/grub/txtHRnXiHYUrM.txt b/source/a/grub/txtHRnXiHYUrM.txt new file mode 100644 index 000000000..b67251f1c --- /dev/null +++ b/source/a/grub/txtHRnXiHYUrM.txt @@ -0,0 +1,49 @@ +# Bazaar merge directive format 2 (Bazaar 0.90) +# revision_id: address@hidden +# target_branch: http://bzr.savannah.gnu.org/r/grub/trunk/grub/ +# testament_sha1: 1c14caf607a0200c0f6c4357baa520d6d5a0297b +# timestamp: 2012-07-04 17:30:47 +0200 +# base_revision_id: address@hidden +# +# Begin patch +=== modified file 'grub-core/gnulib/stdio.in.h' +--- grub-core/gnulib/stdio.in.h 2010-09-20 10:35:33 +0000 ++++ grub-core/gnulib/stdio.in.h 2012-07-04 15:18:15 +0000 +@@ -140,8 +140,10 @@ + /* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning. Assume it is + always declared, since it is required by C89. */ ++#if defined gets + #undef gets + _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ++#endif + + #if @GNULIB_FOPEN@ + # if @REPLACE_FOPEN@ + +# Begin bundle +IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWaToPesAAfhfgAAQ2Pf/91s2 +2kq////wUAUNaebQdnLC2nS7GCUQQJiaT0xMVPAFPSHqeSPUekDT1DxIMkmp4CMjQKYIZTQaBkAA +AAlCBJmmkGEGqP1QDQBkyeoyAAHMAmAmRgBGJiYTCYIaYmmAkhETaU2jKeiaaMo00ybTRAMhoAZE +8tJd05M/VpkKqZr1UWlZidFLnZHIFGBpA6iFmCP+enOp6RDhNhWZylIRZ+P1Oc1VUs/HzCkLPAxt +XwunBn7vOjjziSdUxqx9ub8/jEdn54odK76GXxknCKa3994J9cFbmU0TjYVx4PuSkX45S7lsu6fB +11tpevByhSKUFgynati1fZO2qnwXbsOnRj3eSMVDcR01oxGDH70eZVV8eHKuG/16A8oZX4GRA3HY +WkgOtgkaVTSP2e+4fqq+AdFSyaWzqIMSbODi0FMCs5i4tK754ns80FDKZDi7pJaux5hYGJNNqZJP +zqB04nTwgmOMnWmSaSehwVSt8isXiDIhjFH3WwPkYZoYudtHD1+dli7GkDvrkbPDnlQzcO42UIST +ZBHIlFlQKJxbulrJVwmiKz1E4kmKcvEYpUpWUIESBoc5sXKigHQ1wWB1DoXUYiExOCWCbUEDIz2X +B0mZugsLQzU7eyo5iF2J3SEDscqwFBNGo+8Ls4birmk8x/MQ3O7kfHfekQWJbuJUC5O1osgKvlDY +HaYcZFabX2SSVlVC06WUWBiM+xtOEiAk+vIHJhu4hU5zOaC7UMuUKogM8IIrIP2RuFu6UXzmu6CE +b0KkW+dLcUWvCemnZbAq4967czYKS2OjhUyjmIskEaKwNQQvWngeNMePErVz/fXjStE+PWKVRVXn +OefXfA5O8TDavj6OOyu79pepI9rcDfrmZdffAht1uGQNDMfM2MuwQon23kn00U6rilRZzBWI7an9 +r1YNKrA7PHvE0dMjOj49RZHkOLjYjhfgemY9+IYMMacxhAYnRVZBHcNG1jejWHLdmKD5e7Q/DwM+ +o8NN1T4cVciq3yGD/Yk4hXYQpFALHFoUHjMZUxk+rbkak6tSdY6Ukgasy2OCsE6LyS+GJiEZE5Y9 +9YC3sznc2z5s9SLjlLQkVO4EI39Hi177Ba51BYWkaaO3QuL1V+xn8M92bnq+oFjESvXvXs/LGspc +ftjWvcipQN+TJtvzlXlJzZ58oLZxRLQrIJCRLY28qKLY9g4tKxzyI2rydlUlTbtztcOv6tS41I9p +DZdILnAmv2yXiI8O0yJhUpubNtN6frcf0hLBMEzLZEc55HAGOONL0RzW3h1ostOibFK8hC4mg1Rd +UzNgmFEbwqV/23fvbpnnCloMFq0is6wj8G67yyY0FgLQY6x+fRLWEicxF4UCjhmqJnXx7IRG6S3g +bbqtsYeWBBaJBT4AhDyHMJvvLlSGr8Y5hrQoN11iyQm72Nmp1IQ1CjmeUNoHHBybqbKXo87gTSky +xTqMvhw55hsy6lPPBngJJFQTZHr4yYWBHRwj1BZ4lhQdmR5PbUqECl+1EOivQsYqELAwpwFvcvug +4CbjkVYIDKqMVFC1rY3A6yWDFaxCbY4ickntghlpplCdtpl/NKNQZwH1JMqLaTwaOmUVSDoLh1NJ +toHJWULox5WMMVOgRQ5mpxVvixydLNaFbQaDtvYvvzSIJvsLLzgyaK3CqqMy02jpRbS4YDWsJtBo +A2QEyiKmT5i9Z6YW9BV/giVaTrhSp1GNpiaC9jXVDSx2AHUDgCsYj04hhF59vBUI0Hq0eO+H/F3J +FOFCQpOg96w= diff --git a/source/a/gzip/gzip.SlackBuild b/source/a/gzip/gzip.SlackBuild index 19ef42fba..333f8d333 100755 --- a/source/a/gzip/gzip.SlackBuild +++ b/source/a/gzip/gzip.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2006-2010 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006-2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,7 +21,7 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PKGNAM=gzip -VERSION=${VERSION:-1.5} +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} BUILD=${BUILD:-1} NUMJOBS=${NUMJOBS:--j6} @@ -68,10 +68,6 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -# The following command renames the internal implementation of futimens -# to gl_futimens as newer versions of Glibc provide an incompatible version: -sed -i -e "s/futimens/gl_&/" $(grep -lr futimens *) - # Configure: CFLAGS="$SLKCFLAGS" \ ./configure \ diff --git a/source/a/infozip/infozip.SlackBuild b/source/a/infozip/infozip.SlackBuild index 5ac456d10..9205fca60 100755 --- a/source/a/infozip/infozip.SlackBuild +++ b/source/a/infozip/infozip.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2008, 2009, 2010, 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,7 +22,7 @@ VERSION=6.0 ZIP=3.0 -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -65,12 +65,14 @@ cd $TMP rm -rf unzip$(echo $VERSION | tr -d .) tar xvf $CWD/unzip$(echo $VERSION | tr -d .).tar.?z* || exit 1 cd unzip$(echo $VERSION | tr -d .) +zcat $CWD/unzip.use.system.libbz2.diff.gz | patch -p1 --verbose || exit 1 +zcat $CWD/unzip.process.c.diff.gz | patch -p1 --verbose || exit 1 chown -R root:root . mkdir -p $PKG/usr/doc/unzip-$VERSION cp -a BUGS COPYING* Contents History.* INSTALL LICENSE README ToDo WHERE \ $PKG/usr/doc/unzip-$VERSION chmod 644 $PKG/usr/doc/unzip-$VERSION/* -make -f unix/Makefile generic || exit 1 +make -f unix/Makefile generic LOCAL_UNZIP=-DIZ_HAVE_UXUIDGID || exit 1 cat unzip > $PKG/usr/bin/unzip cat unzipsfx > $PKG/usr/bin/unzipsfx cat funzip > $PKG/usr/bin/funzip diff --git a/source/a/infozip/unzip.process.c.diff b/source/a/infozip/unzip.process.c.diff new file mode 100644 index 000000000..5894f7b0e --- /dev/null +++ b/source/a/infozip/unzip.process.c.diff @@ -0,0 +1,28 @@ +--- ./process.c.orig 2009-03-06 02:25:10.000000000 +0100 ++++ ./process.c 2013-09-12 10:51:16.000000000 +0200 +@@ -2895,9 +2895,9 @@ + */ + + #ifdef IZ_HAVE_UXUIDGID +- if (eb_len >= EB_UX3_MINLEN +- && z_uidgid != NULL +- && (*((EB_HEADSIZE + 0) + ef_buf) == 1) ++ if ((eb_len >= EB_UX3_MINLEN) ++ && (z_uidgid != NULL) ++ && ((*((EB_HEADSIZE + 0) + ef_buf) == 1))) + /* only know about version 1 */ + { + uch uid_size; +@@ -2909,10 +2909,10 @@ + flags &= ~0x0ff; /* ignore any previous UNIX field */ + + if ( read_ux3_value((EB_HEADSIZE + 2) + ef_buf, +- uid_size, z_uidgid[0]) ++ uid_size, &z_uidgid[0]) + && + read_ux3_value((EB_HEADSIZE + uid_size + 3) + ef_buf, +- gid_size, z_uidgid[1]) ) ++ gid_size, &z_uidgid[1]) ) + { + flags |= EB_UX2_VALID; /* signal success */ + } diff --git a/source/a/infozip/unzip.use.system.libbz2.diff b/source/a/infozip/unzip.use.system.libbz2.diff new file mode 100644 index 000000000..ab10997dc --- /dev/null +++ b/source/a/infozip/unzip.use.system.libbz2.diff @@ -0,0 +1,28 @@ +--- ./unix/configure.orig 2009-04-16 14:25:12.000000000 -0500 ++++ ./unix/configure 2013-09-12 13:32:24.274604436 -0500 +@@ -640,7 +640,24 @@ + D_USE_BZ2="-DUSE_BZIP2" + L_BZ2="${BZLF} -lbz2" + else +- echo "-- bzip2 sources not found - no bzip2 support" ++ echo " Check if OS already has bzip2 library installed" ++ cat > conftest.c << _EOF_ ++#include "bzlib.h" ++int main() ++{ ++ bz_stream strm; ++ BZ2_bzCompressEnd(&strm); ++ return 0; ++} ++_EOF_ ++ $CC $CFLAGS -o conftest conftest.c -lbz2 > /dev/null 2>/dev/null ++ if test $? -eq 0; then ++ echo "-- OS supports bzip2 - linking in bzip2" ++ D_USE_BZ2="-DUSE_BZIP2" ++ L_BZ2="${BZLF} -lbz2" ++ else ++ echo "-- Either bzlib.h or libbz2.a not found - no bzip2" ++ fi + fi + fi + diff --git a/source/a/kernel-firmware/kernel-firmware.SlackBuild b/source/a/kernel-firmware/kernel-firmware.SlackBuild index 66445ea83..c7b50a5ca 100755 --- a/source/a/kernel-firmware/kernel-firmware.SlackBuild +++ b/source/a/kernel-firmware/kernel-firmware.SlackBuild @@ -40,6 +40,15 @@ chown -R root:root . mkdir -p lib mv linux-firmware lib/firmware +# Remove sources for carl9170fw: +( cd $PKG/lib/firmware + if [ -d carl9170fw ]; then + mv carl9170fw/COPYRIGHT COPYRIGHT.carl9170fw + mv carl9170fw/GPL LICENSE.carl9170fw + rm -rf carl9170fw + fi +) + # Install documentation link: mkdir -p $PKG/usr/doc ( cd $PKG/usr/doc diff --git a/source/a/kmod/kmod-15.tar.sign b/source/a/kmod/kmod-15.tar.sign new file mode 100644 index 000000000..0e79dd5bc --- /dev/null +++ b/source/a/kmod/kmod-15.tar.sign @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2.0.21 (GNU/Linux) + +iQIcBAABAgAGBQJSFhpaAAoJEJuipaYwy+pT55AP/jZK04iAzoyrGYXlFWo+ngBP +f34CueSb3OJs+JQ6CJZNS5qg83XmOWhTSt2r41nH+N5kWmrF2NsDJ58zzqWy/Rwq +VW4AmSImeJSAi4jtV5T3gjp25htqO1pW57dPwugX4F13PkxqD+l8lJ28X0FcY32k +POR0uiYc0qLOssUASVdFJeRgrYA9V3/Se+fOr118GYWji5S+NlwYSCKb3Khu/j2U +cUHeVrEhbRbYGZ5sQ2ylC0RoM+9G/fJz9cSCxeZh1F6KuCfgJDOzfzLwTQzcRjSA +sBflTMWcw6KcLa5AvNYIrQHIDXHrVn0kR1yQb4glgYygPfU2LhAA20VGPyYsp4JS +6C55VrkXmhX6IlwA0LTdVGkNBOWmuPxzxtMInPoOVapCRHl1KnLMa68T38VSDwS8 +8g6fKM7gUEM5wu3w1ica9yXy9panaom7HBrMFouOjk9YU1DqkIV+ItbBfE9HdW1X +x5LqoOktiuVtJCNbj8Ll6OsjMfKROa+pnRxMT95wA5l2e5rZljR6Ie0deTaRDFX/ +IOMHQn/oK3CIfYcjM5SOn3AaFNHE9KleYSewV/XC/m4YOnaKmUoCrhMJSJQxPUue +9qLh3fqqSQSD3cZmRPfBFaT2cGnehbmx5oPh8uZIxqV8z21y6oNF3CbKSij9ZaeO +sigBwb3OIcf7K5jCrdJl +=qu/t +-----END PGP SIGNATURE----- diff --git a/source/a/kmod/kmod.SlackBuild b/source/a/kmod/kmod.SlackBuild index 0863d0e37..4eb58cfa2 100755 --- a/source/a/kmod/kmod.SlackBuild +++ b/source/a/kmod/kmod.SlackBuild @@ -2,7 +2,8 @@ # Slackware build script for kmod -# Copyright 2011, 2012 Robby Workman, Northport, Alabama, USA +# Copyright 2011,2012,2013 Robby Workman, Northport, Alabama, USA +# Copyright 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -23,8 +24,8 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PKGNAM=kmod -VERSION=${VERSION:-9} -BUILD=${BUILD:-3} +VERSION=${VERSION:-15} +BUILD=${BUILD:-1} if [ -z "$ARCH" ]; then case "$( uname -m )" in diff --git a/source/a/libcgroup/libcgroup.SlackBuild b/source/a/libcgroup/libcgroup.SlackBuild index 286a7fa2a..cc4cd4212 100755 --- a/source/a/libcgroup/libcgroup.SlackBuild +++ b/source/a/libcgroup/libcgroup.SlackBuild @@ -23,7 +23,7 @@ PKGNAM=libcgroup VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then diff --git a/source/a/libcgroup/libcgroup.init.diff b/source/a/libcgroup/libcgroup.init.diff index 754912959..72dcaa31d 100644 --- a/source/a/libcgroup/libcgroup.init.diff +++ b/source/a/libcgroup/libcgroup.init.diff @@ -1,5 +1,5 @@ ---- ./scripts/init.d/cgred.in.orig 2011-03-03 02:29:41.000000000 -0600 -+++ ./scripts/init.d/cgred.in 2011-03-03 14:23:03.000000000 -0600 +--- ./scripts/init.d/cgred.in.orig 2011-03-08 05:29:42.000000000 -0600 ++++ ./scripts/init.d/cgred.in 2013-02-23 16:15:54.054745738 -0600 @@ -39,9 +39,8 @@ # Sanity checks [ -x $CGRED_BIN ] || exit 1 @@ -60,8 +60,8 @@ fi ;; *) ---- ./scripts/init.d/cgconfig.in.orig 2011-03-03 02:29:41.000000000 -0600 -+++ ./scripts/init.d/cgconfig.in 2011-03-03 14:21:27.000000000 -0600 +--- ./scripts/init.d/cgconfig.in.orig 2011-12-06 03:42:15.000000000 -0600 ++++ ./scripts/init.d/cgconfig.in 2013-02-23 16:23:51.530775095 -0600 @@ -36,11 +36,6 @@ servicename=cgconfig lockfile=/var/lock/subsys/$servicename @@ -109,7 +109,7 @@ return 1 fi fi -@@ -123,10 +118,10 @@ +@@ -123,18 +118,18 @@ touch "$lockfile" retval=$? if [ $retval -ne 0 ]; then @@ -122,9 +122,10 @@ return 0 } -@@ -134,7 +129,7 @@ + stop() { echo -n "Stopping cgconfig service: " - cgclear +- cgclear ++ /usr/sbin/cgclear rm -f "$lockfile" - log_success_msg + #log_success_msg diff --git a/source/a/lilo/lilo.SlackBuild b/source/a/lilo/lilo.SlackBuild index 2df7618d1..c481b0159 100755 --- a/source/a/lilo/lilo.SlackBuild +++ b/source/a/lilo/lilo.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2011, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,8 +21,8 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=${VERSION:-23.2} -BUILD=${BUILD:-3} +VERSION=${VERSION:-24.0} +BUILD=${BUILD:-4} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -47,12 +47,6 @@ tar xvf $CWD/lilo-$VERSION.tar.gz || exit 1 cd lilo-$VERSION chown -R root:root . -# Obsolete patch? -## This is needed for LVM+udev+devtmpfs -#( cd src -# zcat $CWD/lilo.use_major_minor_instead_lvm_name.diff.gz | patch -p1 --verbose || exit 1 -#) - make || exit 1 make -i install DESTDIR=$PKG || exit 1 @@ -75,7 +69,7 @@ mkdir -p $PKG/sbin cp -a $CWD/liloconfig $PKG/sbin/liloconfig chmod 755 $PKG/sbin/liloconfig # Hey, you're stomping on our name! Plus, it doesn't work. -rm -f $PKG/usr/sbin/liloconfig +rm -f $PKG/usr/sbin/liloconfig $PKG/usr/share/man/man8/liloconfig.8 mkdir -p $PKG/var/log/setup cp -a $CWD/setup.liloconfig $PKG/var/log/setup/setup.liloconfig cp -a $CWD/text.lilohelp $PKG/var/log/setup/text.lilohelp diff --git a/source/a/lilo/lilo.use_major_minor_instead_lvm_name.diff b/source/a/lilo/lilo.use_major_minor_instead_lvm_name.diff deleted file mode 100644 index 860347ebb..000000000 --- a/source/a/lilo/lilo.use_major_minor_instead_lvm_name.diff +++ /dev/null @@ -1,47 +0,0 @@ ---- lilo-22.8/geometry.c 2006-12-17 01:46:17.000000000 -0200 -+++ lilo-22.8-new/geometry.c 2009-12-18 02:09:54.000000000 -0200 -@@ -903,24 +903,17 @@ - void *next = NULL; - char dmdev[PATH_MAX+1]; - char buf[PATH_MAX+1]; -- char *slash; - int result; - - dev_open(&dev, device, -1); - strncpy(dmdev, dev.name, PATH_MAX); - dmdev[PATH_MAX] = 0; -+ - do { - memset(buf, 0, PATH_MAX + 1); - if ((result = readlink(dmdev, buf, PATH_MAX)) < 0 && errno != EINVAL) - die("device-mapper: readlink(\"%s\") failed with: %s",buf, - strerror(errno)); -- if (result >= 0) { -- if (buf[0] != '/' && (slash = strrchr(dmdev, '/')) != NULL) -- slash++; -- else -- slash = dmdev; -- strncpy(slash, buf, PATH_MAX - (slash-dmdev)); -- } - if (realpath(dmdev, buf) == NULL) - die("device-mapper: realpath(\"%s\") failed with: %s",dmdev, - strerror(errno)); -@@ -930,13 +923,11 @@ - - if (!(dmt = dm_task_create(DM_DEVICE_TABLE))) - die("device-mapper: dm_task_create(DM_DEVICE_TABLE) failed"); -- slash = strrchr(dmdev, '/'); -- if (slash) -- slash++; -- else -- slash = dmdev; -- if (!dm_task_set_name(dmt, slash)) -- die("device-mapper: dm_task_set_name(\"%s\") failed",dmdev); -+ // Using device name is flawed. Better to use device major and minor -+ if (!dm_task_set_major(dmt, MAJOR(device))) -+ die("device-mapper: dm_task_set_major(DM_DEVICE_TABLE) failed"); -+ if (!dm_task_set_minor(dmt, MINOR(device))) -+ die("device-mapper: dm_task_set_minor(DM_DEVICE_TABLE) failed"); - if (!dm_task_run(dmt)) - die("device-mapper: dm_task_run(DM_DEVICE_TABLE) failed"); - diff --git a/source/a/lilo/liloconfig b/source/a/lilo/liloconfig index d8bc02dd4..75e3b0eba 100644 --- a/source/a/lilo/liloconfig +++ b/source/a/lilo/liloconfig @@ -2,7 +2,7 @@ # # Copyright 1994, 1998, 1999 Patrick Volkerding, Moorhead, Minnesota USA # Copyright 2002, 2003 Slackware Linux, Inc, Concord, CA -# Copyright 2007, 2008, 2011 Patrick Volkerding, Sebeka, Minnesota, USA +# Copyright 2007, 2008, 2011, 2013 Patrick Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -26,6 +26,32 @@ TMP=/var/log/setup/tmp CONSOLETYPE=standard unset UTFVT +# Most of the time LILO is not used on UEFI machines (in fact, it is useless +# unless the machine is running in legacy BIOS mode). So, we'll detect if +# this is a machine running UEFI and suggest skipping LILO installation. +# We'll still allow it if the user wants it, though. It won't hurt anything, +# and might be useful for booting in Legacy BIOS mode later. +if [ -d /sys/firmware/efi ]; then + dialog --title "UEFI FIRMWARE DETECTED" \ +--backtitle "LILO (Linux Loader) installation" \ +--menu \ +"Since LILO (the traditional Linux Loader) does not work with machines \ +running UEFI firmware (except in Legacy BIOS mode), you probably do not \ +need to install it. Instead, you'll need ELILO, which is a version of \ +LILO designed to work with EFI/UEFI systems." \ +12 70 2 \ +"skip" "Skip installing LILO and proceed to ELILO installation" \ +"install" "Install LILO anyway" 2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + exit + fi + REPLY="`cat $TMP/reply`" + rm -f $TMP/reply + if [ "$REPLY" = "skip" ]; then + exit + fi +fi + # Set the OS root directory (called T_PX for some unknown reason). # If an argument is given to this script and it is a directory, it # is taken to be the root directory. First though, we check for a @@ -52,6 +78,15 @@ if [ ! -d "$T_PX" ]; then fi fi +# If os-prober is availible, we will use it to filter out unbootable +# FAT/NTFS partitions. If it is not availble, we'll use /bin/true +# instead to avoid filtering. +if which os-prober > /dev/null ; then + OSPROBER=os-prober +else + OSPROBER=true +fi + # Determine LILO documentation directory: LILODOCDIR="$(ls -d $T_PX/usr/doc/lilo-* 2> /dev/null | tail -n 1)" if [ ! -d "$LILODOCDIR" ]; then @@ -294,6 +329,7 @@ EOF cat << EOF >> $T_PX/etc/lilo.conf boot = $ROOT_DEVICE #delay = 5 +#compact # faster, but won't work on all systems. EOF if [ $CONSOLETYPE = standard ]; then cat << EOF >> $T_PX/etc/lilo.conf @@ -396,6 +432,8 @@ EOF cat << EOF >> $T_PX/etc/lilo.conf boot = $LILO_TARGET +#compact # faster, but won't work on all systems. + # Boot BMP Image. # Bitmap in BMP format: 640x480x8 bitmap = /boot/slack.bmp @@ -474,13 +512,18 @@ cat << EOF >> $T_PX/etc/lilo.conf # End LILO global section EOF # OK, now let's look for Windows partitions: - DOSP="`PROBE -l | grep "DOS + # If we have os-prober, use the Windows partition list from that: + if which os-prober > /dev/null ; then + DOSP="$(os-prober 2> /dev/null | grep Windows | cut -f 1 -d :)" + else # use PROBE output: + DOSP="$(PROBE -l | grep "DOS Win W95 FAT12 FAT16 -HPFS" | grep -v "Ext'd" | grep -v "Extend" | sort`" - DOSP="`echo $DOSP | cut -f 1 -d ' '`" +HPFS" | grep -v "Ext'd" | grep -v "Extend" | sort )" + DOSP="`echo $DOSP | cut -f 1 -d ' '`" + fi if [ ! "$DOSP" = "" ]; then TABLE="`echo $DOSP | cut -b1-8`" cat << EOF >> $T_PX/etc/lilo.conf @@ -896,7 +939,9 @@ default." 13 74 4 \ # # Start LILO global section boot = $LILO_TARGET + #compact # faster, but won't work on all systems. + EOF # Boot splash if [ "$PROMPT" = "prompt" ]; then @@ -1096,7 +1141,7 @@ Win W95 FAT12 FAT16 -HPFS" | grep -v "Ext'd" | grep -v "Extend" | sort >> $TMP/tmpmsg +HPFS" | grep -v "Ext'd" | grep -v "Extend" | sort | grep "$($OSPROBER 2> /dev/null | grep Windows | cut -f 1 -d :)" >> $TMP/tmpmsg echo >> $TMP/tmpmsg echo "Which one would you like LILO to boot?" >> $TMP/tmpmsg dialog --title "SELECT WINDOWS PARTITION" --no-collapse --inputbox \ diff --git a/source/a/logrotate/logrotate.SlackBuild b/source/a/logrotate/logrotate.SlackBuild index e38f27152..63670a0a0 100755 --- a/source/a/logrotate/logrotate.SlackBuild +++ b/source/a/logrotate/logrotate.SlackBuild @@ -20,7 +20,7 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=${VERSION:-3.8.2} +VERSION=${VERSION:-3.8.6} BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: diff --git a/source/a/logrotate/logrotate.slackware.diff b/source/a/logrotate/logrotate.slackware.diff index 6fa0436dc..9e5160f33 100644 --- a/source/a/logrotate/logrotate.slackware.diff +++ b/source/a/logrotate/logrotate.slackware.diff @@ -11,15 +11,14 @@ diff -Nur logrotate-3.8.0.orig//config.c logrotate-3.8.0/config.c }; static int defTabooCount = sizeof(defTabooExts) / sizeof(char *); -diff -Nur logrotate-3.8.0.orig//logrotate.8 logrotate-3.8.0/logrotate.8 ---- logrotate-3.8.0.orig//logrotate.8 2011-06-21 03:12:02.000000000 -0500 -+++ logrotate-3.8.0/logrotate.8 2011-08-22 15:56:12.247672243 -0500 -@@ -472,7 +472,7 @@ +--- logrotate-3.8.6/logrotate.8.orig 2013-08-02 16:28:41.591589317 +0700 ++++ logrotate-3.8.6/logrotate.8 2013-08-02 16:29:09.280202548 +0700 +@@ -506,7 +506,7 @@ for information on the taboo extensions). If a + precedes the list of extensions, the current taboo extension list is augmented, otherwise it is replaced. At startup, the taboo extension list --contains .rpmsave, .rpmorig, ~, .disabled, .dpkg-old, .dpkg-dist, .dpkg-new, .cfsaved, .ucf-old, .ucf-dist, .ucf-new, .rpmnew, .swp, .cfsaved, .rhn-cfg-tmp-* -+contains .rpmsave, .rpmorig, ~, .disabled, .dpkg-old, .dpkg-dist, .dpkg-new, .cfsaved, .ucf-old, .ucf-dist, .ucf-new, .rpmnew, .swp, .cfsaved, .rhn-cfg-tmp-*, .new, .old, .orig, .bak +-contains .rpmsave, .rpmorig, ~, .disabled, .dpkg\-old, .dpkg\-dist, .dpkg\-new, .cfsaved, .ucf\-old, .ucf\-dist, .ucf\-new, .rpmnew, .swp, .cfsaved, .rhn\-cfg\-tmp\-* ++contains .rpmsave, .rpmorig, ~, .disabled, .dpkg\-old, .dpkg\-dist, .dpkg\-new, .cfsaved, .ucf\-old, .ucf\-dist, .ucf\-new, .rpmnew, .swp, .cfsaved, .rhn\-cfg\-tmp\-*, .new, .old, .orig, .bak .TP \fBweekly\fR diff --git a/source/a/lrzip/lrzip.SlackBuild b/source/a/lrzip/lrzip.SlackBuild index b45a8a5a0..5cc09be64 100755 --- a/source/a/lrzip/lrzip.SlackBuild +++ b/source/a/lrzip/lrzip.SlackBuild @@ -82,6 +82,8 @@ CFLAGS="$SLKCFLAGS" \ make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG || exit 1 +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.la + if [ -r doc/lrzip.conf.example ]; then mkdir -p $PKG/etc cp -a doc/lrzip.conf.example $PKG/etc/lrzip.conf.new @@ -89,8 +91,11 @@ if [ -r doc/lrzip.conf.example ]; then chmod 644 $PKG/etc/lrzip.conf.new fi -find $PKG | xargs file | grep -e "executable" -e "shared object" \ - | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null +# Strip binaries: +( cd $PKG + find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null +) # Compress and link manpages, if any: if [ -d $PKG/usr/man ]; then diff --git a/source/a/lvm2/lvm2.SlackBuild b/source/a/lvm2/lvm2.SlackBuild index 349d5486f..d662476c5 100755 --- a/source/a/lvm2/lvm2.SlackBuild +++ b/source/a/lvm2/lvm2.SlackBuild @@ -22,7 +22,7 @@ VERSION=$(echo LVM2.*.tar.xz | cut -f 2- -d . | rev | cut -f 3- -d . | cut -f 1 -d - | rev) -BUILD=${BUILD:-4} +BUILD=${BUILD:-1} NUMJOBS=${NUMJOBS:-" -j7 "} diff --git a/source/a/minicom/minicom.SlackBuild b/source/a/minicom/minicom.SlackBuild index 19ec515fa..3d38d2514 100755 --- a/source/a/minicom/minicom.SlackBuild +++ b/source/a/minicom/minicom.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011, 2012 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,7 +21,7 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=2.6 +VERSION=2.6.2 BUILD=${BUILD:-1} NUMJOBS=${NUMJOBS:--j6} diff --git a/source/a/mkinitrd/fixes-1.20.1/busybox-1.20.1-ash.patch b/source/a/mkinitrd/fixes-1.20.1/busybox-1.20.1-ash.patch deleted file mode 100644 index a012a7063..000000000 --- a/source/a/mkinitrd/fixes-1.20.1/busybox-1.20.1-ash.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- busybox-1.20.1/shell/ash.c -+++ busybox-1.20.1-ash/shell/ash.c -@@ -6846,8 +6846,7 @@ evalvar(char *p, int flags, struct strli - patloc = expdest - (char *)stackblock(); - if (NULL == subevalvar(p, /* varname: */ NULL, patloc, subtype, - startloc, varflags, --//TODO: | EXP_REDIR too? All other such places do it too -- /* quotes: */ flags & (EXP_FULL | EXP_CASE), -+ /* quotes: */ flags & (EXP_FULL | EXP_CASE | EXP_REDIR), - var_str_list) - ) { - int amount = expdest - ( diff --git a/source/a/mkinitrd/fixes-1.20.1/busybox-1.20.1-ifupdown.patch b/source/a/mkinitrd/fixes-1.20.1/busybox-1.20.1-ifupdown.patch deleted file mode 100644 index b2a945614..000000000 --- a/source/a/mkinitrd/fixes-1.20.1/busybox-1.20.1-ifupdown.patch +++ /dev/null @@ -1,75 +0,0 @@ ---- busybox-1.20.1/networking/ifupdown.c -+++ busybox-1.20.1-ifupdown/networking/ifupdown.c -@@ -140,8 +140,6 @@ static const char keywords_up_down[] ALI - "up\0" - "down\0" - "pre-up\0" -- "pre-down\0" -- "post-up\0" - "post-down\0" - ; - -@@ -895,6 +893,11 @@ static struct interfaces_file_t *read_in - if (rest_of_line[0] == '\0') - bb_error_msg_and_die("option with empty value \"%s\"", buf); - -+ if (strcmp(first_word, "post-up") == 0) -+ first_word += 5; /* "up" */ -+ else if (strcmp(first_word, "pre-down") == 0) -+ first_word += 4; /* "down" */ -+ - /* If not one of "up", "down",... words... */ - if (index_in_strings(keywords_up_down, first_word) < 0) { - int i; -@@ -963,7 +966,7 @@ static char *setlocalenv(const char *for - return result; - } - --static void set_environ(struct interface_defn_t *iface, const char *mode) -+static void set_environ(struct interface_defn_t *iface, const char *mode, const char *opt) - { - int i; - char **pp; -@@ -976,7 +979,7 @@ static void set_environ(struct interface - } - - /* note: last element will stay NULL: */ -- G.my_environ = xzalloc(sizeof(char *) * (iface->n_options + 6)); -+ G.my_environ = xzalloc(sizeof(char *) * (iface->n_options + 7)); - pp = G.my_environ; - - for (i = 0; i < iface->n_options; i++) { -@@ -990,6 +993,7 @@ static void set_environ(struct interface - *pp++ = setlocalenv("%s=%s", "ADDRFAM", iface->address_family->name); - *pp++ = setlocalenv("%s=%s", "METHOD", iface->method->name); - *pp++ = setlocalenv("%s=%s", "MODE", mode); -+ *pp++ = setlocalenv("%s=%s", "PHASE", opt); - if (G.startup_PATH) - *pp++ = setlocalenv("%s=%s", "PATH", G.startup_PATH); - } -@@ -1044,21 +1048,21 @@ static int check(char *str) - static int iface_up(struct interface_defn_t *iface) - { - if (!iface->method->up(iface, check)) return -1; -- set_environ(iface, "start"); -+ set_environ(iface, "start", "pre-up"); - if (!execute_all(iface, "pre-up")) return 0; - if (!iface->method->up(iface, doit)) return 0; -+ set_environ(iface, "start", "post-up"); - if (!execute_all(iface, "up")) return 0; -- if (!execute_all(iface, "post-up")) return 0; - return 1; - } - - static int iface_down(struct interface_defn_t *iface) - { - if (!iface->method->down(iface,check)) return -1; -- set_environ(iface, "stop"); -- if (!execute_all(iface, "pre-down")) return 0; -+ set_environ(iface, "stop", "pre-down"); - if (!execute_all(iface, "down")) return 0; - if (!iface->method->down(iface, doit)) return 0; -+ set_environ(iface, "stop", "post-down"); - if (!execute_all(iface, "post-down")) return 0; - return 1; - } diff --git a/source/a/mkinitrd/fixes-1.20.1/busybox-1.20.1-man.patch b/source/a/mkinitrd/fixes-1.20.1/busybox-1.20.1-man.patch deleted file mode 100644 index f382e078f..000000000 --- a/source/a/mkinitrd/fixes-1.20.1/busybox-1.20.1-man.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- busybox-1.20.1/miscutils/man.c -+++ busybox-1.20.1-man/miscutils/man.c -@@ -129,27 +129,21 @@ static int show_manpage(const char *page - #endif - #if ENABLE_FEATURE_SEAMLESS_XZ - strcpy(ext, "xz"); -- if (run_pipe(pager, man_filename, man, level)) -+ if (run_pipe(pager, filename_with_zext, man, level)) - return 1; - #endif - #if ENABLE_FEATURE_SEAMLESS_BZ2 - strcpy(ext, "bz2"); -- if (run_pipe(pager, man_filename, man, level)) -+ if (run_pipe(pager, filename_with_zext, man, level)) - return 1; - #endif - #if ENABLE_FEATURE_SEAMLESS_GZ - strcpy(ext, "gz"); -- if (run_pipe(pager, man_filename, man, level)) -+ if (run_pipe(pager, filename_with_zext, man, level)) - return 1; - #endif - --#if SEAMLESS_COMPRESSION -- ext[-1] = '\0'; --#endif -- if (run_pipe(pager, man_filename, man, level)) -- return 1; -- -- return 0; -+ return run_pipe(pager, man_filename, man, level); - } - - int man_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; diff --git a/source/a/mkinitrd/fixes-1.20.1/busybox-1.20.1-tar.patch b/source/a/mkinitrd/fixes-1.20.1/busybox-1.20.1-tar.patch deleted file mode 100644 index 4129b6517..000000000 --- a/source/a/mkinitrd/fixes-1.20.1/busybox-1.20.1-tar.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- busybox-1.20.1/archival/libarchive/get_header_tar.c -+++ busybox-1.20.1-tar/archival/libarchive/get_header_tar.c -@@ -84,7 +84,7 @@ static unsigned long long getOctal(char - first >>= 1; /* now 7th bit = 6th bit */ - v = first; /* sign-extend 8 bits to 64 */ - while (--len != 0) -- v = (v << 8) + (unsigned char) *str++; -+ v = (v << 8) + (uint8_t) *++str; - } - return v; - } diff --git a/source/a/mkinitrd/fixes-1.20.2/busybox-1.20.2-kernel_ver.patch b/source/a/mkinitrd/fixes-1.20.2/busybox-1.20.2-kernel_ver.patch new file mode 100644 index 000000000..456fb08e1 --- /dev/null +++ b/source/a/mkinitrd/fixes-1.20.2/busybox-1.20.2-kernel_ver.patch @@ -0,0 +1,25 @@ +--- busybox-1.20.2/libbb/kernel_version.c ++++ busybox-1.20.2-kernel_ver/libbb/kernel_version.c +@@ -20,18 +20,15 @@ + int FAST_FUNC get_linux_version_code(void) + { + struct utsname name; +- char *s; ++ char *s, *t; + int i, r; + +- if (uname(&name) == -1) { +- bb_perror_msg("can't get system information"); +- return 0; +- } +- ++ uname(&name); /* never fails */ + s = name.release; + r = 0; + for (i = 0; i < 3; i++) { +- r = r * 256 + atoi(strtok(s, ".")); ++ t = strtok(s, "."); ++ r = r * 256 + (t ? atoi(t) : 0); + s = NULL; + } + return r; diff --git a/source/a/mkinitrd/fixes-1.20.2/busybox-1.20.2-ntpd.patch b/source/a/mkinitrd/fixes-1.20.2/busybox-1.20.2-ntpd.patch new file mode 100644 index 000000000..17fc0b1c4 --- /dev/null +++ b/source/a/mkinitrd/fixes-1.20.2/busybox-1.20.2-ntpd.patch @@ -0,0 +1,11 @@ +--- busybox-1.20.2/networking/ntpd.c ++++ busybox-1.20.2-ntpd/networking/ntpd.c +@@ -1840,7 +1840,7 @@ recv_and_process_client_pkt(void /*int f + + /* Build a reply packet */ + memset(&msg, 0, sizeof(msg)); +- msg.m_status = G.stratum < MAXSTRAT ? G.ntp_status : LI_ALARM; ++ msg.m_status = G.stratum < MAXSTRAT ? (G.ntp_status & LI_MASK) : LI_ALARM; + msg.m_status |= (query_status & VERSION_MASK); + msg.m_status |= ((query_status & MODE_MASK) == MODE_CLIENT) ? + MODE_SERVER : MODE_SYM_PAS; diff --git a/source/a/mkinitrd/fixes-1.20.2/busybox-1.20.2-pkg-config-selinux.patch b/source/a/mkinitrd/fixes-1.20.2/busybox-1.20.2-pkg-config-selinux.patch new file mode 100644 index 000000000..f39250c85 --- /dev/null +++ b/source/a/mkinitrd/fixes-1.20.2/busybox-1.20.2-pkg-config-selinux.patch @@ -0,0 +1,67 @@ +From b1cec5003b73080a8aa7ea277621bf1c71c3e8d6 Mon Sep 17 00:00:00 2001 +From: Mike Frysinger <vapier@gentoo.org> +Date: Sat, 20 Oct 2012 15:01:26 -0400 +Subject: [PATCH] build system: use pkg-config to look up selinux libs + +Newer versions of libselinux has started linking against more libs. +Rather than continuing hardcoding things, switch to using pkg-config +to query for its dependencies. + +Signed-off-by: Mike Frysinger <vapier@gentoo.org> +--- + Makefile | 1 + + Makefile.flags | 12 +++++++++++- + 2 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index fccde4a..3a0a5e1 100644 +--- a/Makefile ++++ b/Makefile +@@ -297,6 +297,7 @@ NM = $(CROSS_COMPILE)nm + STRIP = $(CROSS_COMPILE)strip + OBJCOPY = $(CROSS_COMPILE)objcopy + OBJDUMP = $(CROSS_COMPILE)objdump ++PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config + AWK = awk + GENKSYMS = scripts/genksyms/genksyms + DEPMOD = /sbin/depmod +diff --git a/Makefile.flags b/Makefile.flags +index c43c8dc..15dcc1f 100644 +--- a/Makefile.flags ++++ b/Makefile.flags +@@ -74,6 +74,12 @@ ARCH_FPIC ?= -fpic + ARCH_FPIE ?= -fpie + ARCH_PIE ?= -pie + ++# Usage: $(eval $(call pkg_check_modules,VARIABLE-PREFIX,MODULES)) ++define pkg_check_modules ++$(1)_CFLAGS := $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags $(2)) ++$(1)_LIBS := $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs $(2)) ++endef ++ + ifeq ($(CONFIG_BUILD_LIBBUSYBOX),y) + # on i386: 14% smaller libbusybox.so + # (code itself is 9% bigger, we save on relocs/PLT/GOT) +@@ -85,6 +91,7 @@ endif + + ifeq ($(CONFIG_STATIC),y) + CFLAGS_busybox += -static ++PKG_CONFIG_FLAGS += --static + endif + + ifeq ($(CONFIG_PIE),y) +@@ -127,7 +134,10 @@ LDLIBS += pam pam_misc pthread + endif + + ifeq ($(CONFIG_SELINUX),y) +-LDLIBS += selinux sepol ++SELINUX_PC_MODULES = libselinux libsepol ++$(eval $(call pkg_check_modules,SELINUX,$(SELINUX_PC_MODULES))) ++CPPFLAGS += $(SELINUX_CFLAGS) ++LDLIBS += $(if $(SELINUX_LIBS),$(SELINUX_LIBS:-l%=%),$(SELINUX_PC_MODULES:lib%=%)) + endif + + ifeq ($(CONFIG_EFENCE),y) +-- +1.7.12 + diff --git a/source/a/mkinitrd/fixes-1.20.2/busybox-1.20.2-sys-resource.patch b/source/a/mkinitrd/fixes-1.20.2/busybox-1.20.2-sys-resource.patch new file mode 100644 index 000000000..7b1850084 --- /dev/null +++ b/source/a/mkinitrd/fixes-1.20.2/busybox-1.20.2-sys-resource.patch @@ -0,0 +1,123 @@ +From 5a5dfcad6ba96d12d68bd7b39279215a8fee70d3 Mon Sep 17 00:00:00 2001 +From: Tias Guns <tias@ulyssis.org> +Date: Sun, 10 Jun 2012 14:19:01 +0200 +Subject: [PATCH] inetd: fix build failure in Android + +Signed-off-by: Tias Guns <tias@ulyssis.org> +Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> +(cherry picked from commit 64f763b42a43cbf36e401690ff6767c25575e520) +--- + networking/inetd.c | 1 + + 1 file changed, 1 insertion(+) +-- +1.7.12 + +From 246ea72843d5b7e9d4cd902dc5e9d71359196303 Mon Sep 17 00:00:00 2001 +From: Mike Frysinger <vapier@gentoo.org> +Date: Thu, 5 Jul 2012 23:19:09 -0400 +Subject: [PATCH] include sys/resource.h where needed + +We use functions from sys/resource.h in misc applets, but don't include +the header. This breaks building with newer glibc versions, so add the +include where needed. + +Signed-off-by: Mike Frysinger <vapier@gentoo.org> +(cherry picked from commit c5fe9f7b723f949457263ef8e22ab807d5b549ce) +--- + loginutils/passwd.c | 1 + + miscutils/time.c | 1 + + networking/inetd.c | 1 + + networking/ntpd.c | 1 + + networking/ntpd_simple.c | 1 + + runit/chpst.c | 1 + + shell/shell_common.c | 1 + + 7 files changed, 7 insertions(+) + +diff --git a/loginutils/passwd.c b/loginutils/passwd.c +index b83db00..a7006f0 100644 +--- a/loginutils/passwd.c ++++ b/loginutils/passwd.c +@@ -15,6 +15,7 @@ + + #include "libbb.h" + #include <syslog.h> ++#include <sys/resource.h> /* setrlimit */ + + static void nuke_str(char *str) + { +diff --git a/miscutils/time.c b/miscutils/time.c +index 945f15f..ffed386 100644 +--- a/miscutils/time.c ++++ b/miscutils/time.c +@@ -16,6 +16,7 @@ + //usage: "\n -v Verbose" + + #include "libbb.h" ++#include <sys/resource.h> /* getrusage */ + + /* Information on the resources used by a child process. */ + typedef struct { +diff --git a/networking/inetd.c b/networking/inetd.c +index 1308d74..00baf69 100644 +--- a/networking/inetd.c ++++ b/networking/inetd.c +@@ -165,6 +165,8 @@ + //usage: "\n (default: 0 - disabled)" + + #include <syslog.h> ++#include <sys/resource.h> /* setrlimit */ ++#include <sys/socket.h> /* un.h may need this */ + #include <sys/un.h> + + #include "libbb.h" +diff --git a/networking/ntpd.c b/networking/ntpd.c +index 603801e..b885215 100644 +--- a/networking/ntpd.c ++++ b/networking/ntpd.c +@@ -46,6 +46,7 @@ + #include "libbb.h" + #include <math.h> + #include <netinet/ip.h> /* For IPTOS_LOWDELAY definition */ ++#include <sys/resource.h> /* setpriority */ + #include <sys/timex.h> + #ifndef IPTOS_LOWDELAY + # define IPTOS_LOWDELAY 0x10 +diff --git a/networking/ntpd_simple.c b/networking/ntpd_simple.c +index 4ad44e4..1b7c66b 100644 +--- a/networking/ntpd_simple.c ++++ b/networking/ntpd_simple.c +@@ -7,6 +7,7 @@ + */ + #include "libbb.h" + #include <netinet/ip.h> /* For IPTOS_LOWDELAY definition */ ++#include <sys/resource.h> /* setpriority */ + #ifndef IPTOS_LOWDELAY + # define IPTOS_LOWDELAY 0x10 + #endif +diff --git a/runit/chpst.c b/runit/chpst.c +index ac296ba..ed72c8b 100644 +--- a/runit/chpst.c ++++ b/runit/chpst.c +@@ -91,6 +91,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + //usage: "\n a SIGXCPU after N seconds" + + #include "libbb.h" ++#include <sys/resource.h> /* getrlimit */ + + /* + Five applets here: chpst, envdir, envuidgid, setuidgid, softlimit. +diff --git a/shell/shell_common.c b/shell/shell_common.c +index 51c92d6..780e27e 100644 +--- a/shell/shell_common.c ++++ b/shell/shell_common.c +@@ -18,6 +18,7 @@ + */ + #include "libbb.h" + #include "shell_common.h" ++#include <sys/resource.h> /* getrlimit */ + + const char defifsvar[] ALIGN1 = "IFS= \t\n"; + +-- +1.7.12 + diff --git a/source/a/mkinitrd/init b/source/a/mkinitrd/init index ae475d890..b31eb0e4c 100755 --- a/source/a/mkinitrd/init +++ b/source/a/mkinitrd/init @@ -4,7 +4,7 @@ # This requires that your kernel supports initramfs!!! # # Copyright 2004 Slackware Linux, Inc., Concord, CA, USA -# Copyright 2007, 2008, 2009, 2010 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2007, 2008, 2009, 2010, 2012 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -23,8 +23,8 @@ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - +# +################################################################################## # With a generic kernel, you need to load the modules needed to mount the # root partition. This might mean a SCSI, RAID, or other drive controller # module, as well as the module to support the root filesystem. Once the @@ -62,6 +62,13 @@ # need to make it executable: # # chmod 755 load_kernel_modules +################################################################################## +# Changelog +# 10-Dec-2012 <mozes@slackware.com> +# * Added support for the official Kernel parameters to select root filesystem +# type ('rootfstype') and pause before attempting to mount the root filesystem +# ('rootdelay'). The original parameters may continue to be used. +################################################################################## INITRD=$(cat /initrd-name) ROOTDEV=$(cat /rootdev) @@ -115,10 +122,10 @@ for ARG in $(cat /proc/cmdline); do root=UUID=*) ROOTDEV=$(echo $ARG | cut -f2- -d=) ;; - rootfs=*) + rootfs=*|rootfstype=*) ROOTFS=$(echo $ARG | cut -f2 -d=) ;; - waitforroot=*) + waitforroot=*|rootdelay=*) WAIT=$(echo $ARG | cut -f2 -d=) ;; esac @@ -163,11 +170,15 @@ fi if [ "$RESCUE" = "" ]; then # Initialize RAID: if [ -x /sbin/mdadm ]; then - /sbin/mdadm -E -s >/etc/mdadm.conf - /sbin/mdadm -S -s - /sbin/mdadm -A -s - # This seems to make the kernel see partitions more reliably: - fdisk -l /dev/md* 1> /dev/null 2> /dev/null + # If /etc/mdadm.conf is present, udev should DTRT on its own; + # If not, we'll make one and go from there: + if [ ! -r /etc/mdadm.conf ]; then + /sbin/mdadm -E -s >/etc/mdadm.conf + /sbin/mdadm -S -s + /sbin/mdadm -A -s + # This seems to make the kernel see partitions more reliably: + fdisk -l /dev/md* 1> /dev/null 2> /dev/null + fi fi # Unlock any encrypted partitions necessary to access the diff --git a/source/a/mkinitrd/mkinitrd b/source/a/mkinitrd/mkinitrd index c5e30218b..fdc269348 100644 --- a/source/a/mkinitrd/mkinitrd +++ b/source/a/mkinitrd/mkinitrd @@ -45,7 +45,7 @@ # Modified by Patrick Volkerding <volkerdi@slackware.com> 21 August 2012 # Add Btrfs multi-device filesystem support option (-B). -MKINITRD_VERSION=1.4.7 +MKINITRD_VERSION=1.4.8 # Don't include these things from /lib/udev/ in the initrd image LIBUDEV_BLACKLIST="\ @@ -101,7 +101,7 @@ initrd, and the script is easy to modify. Be creative. :-) then you need to pass: -K LABEL=TRAVELSTICK:/keys/alien.luks -B Add /sbin/btrfs to enable scanning for a root filesystem that is part of a Btrfs multi-device filesystem. - -M Add the files in /etc/modprobe.d/ to the initrd + -M Add the files in /etc/modprobe.d/ and /lib/modprobe.d/ to the initrd -R Add support for RAID partitions -V Display version number @@ -422,6 +422,10 @@ fi # (unless we find that value is already set in the initrd-tree): if [ -z "$WAIT" -a -z "$(cat $SOURCE_TREE/wait-for-root)" ]; then WAIT=1 + # ARM devices need even more time: + case "$( uname -m )" in + arm*) WAIT=4;; + esac fi if [ ! -z "$WAIT" ]; then echo $WAIT > $SOURCE_TREE/wait-for-root @@ -479,6 +483,9 @@ if [ ! -z "$RAID" ]; then mkdir -p $SOURCE_TREE/lib/udev/rules.d echo 'KERNEL=="dm-[0-9]*", OPTIONS+="db_persist"' > \ $SOURCE_TREE/lib/udev/rules.d/95-dm-initrd.rules + if [ -r /etc/mdadm.conf ] ; then + cp /etc/mdadm.conf $SOURCE_TREE/etc + fi else echo "ERROR: mdadm and/or mdmon binary is missing, RAID support not installed" fi @@ -674,7 +681,7 @@ if [ ! -z "$MODULE_LIST" ]; then # Pregenerate the module dependency information depmod -a -b $SOURCE_TREE ${KERNEL_VERSION} - # Copy /etc/modprobe.d/* if desired + # Copy /{etc,lib}/modprobe.d/* if desired if [ ! -z $MODCONF ]; then copy_modconf fi diff --git a/source/a/mkinitrd/mkinitrd.SlackBuild b/source/a/mkinitrd/mkinitrd.SlackBuild index 322fa8c5d..4683a17f4 100755 --- a/source/a/mkinitrd/mkinitrd.SlackBuild +++ b/source/a/mkinitrd/mkinitrd.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2007, 2008, 2009, 2010, 2011, 2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2007, 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,9 +21,9 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=${VERSION:-1.4.7} -BB=1.20.1 -BUILD=${BUILD:-6} +VERSION=${VERSION:-1.4.8} +BB=1.20.2 +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -83,6 +83,11 @@ chmod 644 $PKG/usr/share/mkinitrd/keymaps.tar.gz ( cd $PKG/usr/share/mkinitrd/initrd-tree tar xf $CWD/_initrd-tree.tar.gz cat $CWD/init > init + + # These are useful for ARM: + mknod -m 644 dev/random c 1 8 + mknod -m 644 dev/urandom c 1 9 + tar czf ../initrd-tree.tar.gz . ) rm -rf $PKG/usr/share/mkinitrd/initrd-tree @@ -107,6 +112,11 @@ cat $CWD/mkinitrd.conf.5 | gzip -9c > $PKG/usr/man/man5/mkinitrd.conf.5.gz mkdir -p $PKG/etc cp -a $CWD/mkinitrd.conf.sample $PKG/etc/mkinitrd.conf.sample +# ARM systems often need more time to find devices: +case "$( uname -m )" in + arm*) sed -e 's@#WAIT="1"@#WAIT="4"@g' \ + -i $PKG/etc/mkinitrd.conf.sample;; +esac chown root:root $PKG/etc/mkinitrd.conf.sample chmod 644 $PKG/etc/mkinitrd.conf.sample diff --git a/source/a/mkinitrd/mkinitrd_command_generator.sh b/source/a/mkinitrd/mkinitrd_command_generator.sh index 04c0c2a03..16893b05b 100644 --- a/source/a/mkinitrd/mkinitrd_command_generator.sh +++ b/source/a/mkinitrd/mkinitrd_command_generator.sh @@ -1,5 +1,6 @@ #!/bin/sh # $Id: mkinitrd_command_generator.sh,v 1.45 2011/02/17 09:27:05 eha Exp eha $ +# Copyright 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # Copyright 2008, 2009, 2010, 2011 Eric Hameleers, Eindhoven, Netherlands # Contact: <alien@slackware.com> # Copyright 2008, 2009 PiterPUNK, Sao Paulo, SP, Brazil @@ -50,7 +51,12 @@ SOURCE_TREE=${SOURCE_TREE:-"/boot/initrd-tree"} CLEAR_TREE=${CLEAR_TREE:-1} KEYMAP=${KEYMAP:-"us"} UDEV=${UDEV:-1} -WAIT=${WAIT:-1} +# ARM devices need more time: +case "$( uname -m )" in + arm*) WAIT_DEFAULT=4;; + *) WAIT_DEFAULT=1;; +esac +WAIT=${WAIT:-$WAIT_DEFAULT} # A basic explanation of the commandline parameters: basic_usage() { @@ -108,7 +114,7 @@ extended_usage() { the script determines, you can pass then to the script using the '-m' parameter as follows: - $(basename $0) -m "uhci-hcd:usbhid" + $(basename $0) -m "uhci-hcd:usbhid:hid_generic" The above example adds support for USB keyboards to the initrd - you may need that if you have encrypted your root partition and need to @@ -219,7 +225,7 @@ function add_usb_keyboard() { local USBMOD if cat /proc/bus/input/devices | sed -e 's/^$/\$/g' | \ tr "\n$" " \n" | grep -q " Phys=.*usb.* .*Handlers=.*kbd.*B:"; then - USBMOD="usbhid" + USBMOD="usbhid:hid_generic" [ -n "$MLIST" ] && MLIST="$MLIST:$USBMOD" \ || MLIST="$USBMOD" fi @@ -375,7 +381,7 @@ while [ ! -z "$1" ]; do KFILE=$(basename $KFILE) fi KFILE=${KFILEPATH}/$KFILE - if [ -z "$(file $KFILE | grep 'Linux kernel x86 boot')" ]; then + if [ -z "$(file $KFILE | grep -E 'Linux kernel x86 boot|x86 boot sector')" ]; then echo "File '$KFILE' does not look like it is a kernel file!" exit 1 fi @@ -439,7 +445,8 @@ if echo $MLIST | grep -q "virtio"; then MLIST="$MLIST:virtio:virtio_balloon:virtio_blk:virtio_ring:virtio_pci:virtio_net" fi -# Determine if a USB keyboard is in use and include usbhid to module list +# Determine if a USB keyboard is in use and include usbhid and hid_generic +# to module list MLIST=$(add_usb_keyboard) # If we use any USB module, try to determine the Host Controller @@ -546,7 +553,7 @@ configurations are optional and you can stick to the defaults." 11 72 3 \ $([ $USING_LUKS = 1 ] && echo on || echo off) \ "RESUMEDEV" "Select device for 'suspend-to-disk' feature" off \ "UDEV" "Use UDEV in the initrd for device configuration" $(test $UDEV -eq 1 && echo on || echo off) \ -"WAIT" "Add delay to allow detection of slow disks at boot" $(test WAIT -gt 1 && echo on || echo off) ) +"WAIT" "Add delay to allow detection of slow disks at boot" $(test $WAIT -gt $WAIT_DEFAULT && echo on || echo off) ) if [ "$?" != "0" ]; then exit 1 fi @@ -794,7 +801,7 @@ if [ $UDEV -eq 1 ]; then # Add UDEV support: MKINIT="$MKINIT -u" fi -if [ -n "$WAIT" -a $WAIT -ne 1 ]; then +if [ -n "$WAIT" -a $WAIT -ne $WAIT_DEFAULT ]; then # Add non-default wait time: MKINIT="$MKINIT -w $WAIT" fi diff --git a/source/a/ntfs-3g/ntfs-3g.SlackBuild b/source/a/ntfs-3g/ntfs-3g.SlackBuild index 086cb3e87..ca5c46e50 100755 --- a/source/a/ntfs-3g/ntfs-3g.SlackBuild +++ b/source/a/ntfs-3g/ntfs-3g.SlackBuild @@ -3,7 +3,7 @@ # Slackware build script for ntfs-3g # Copyright 2008 Antonio Hernandez Blas <hba.nihilismus@gmail.com> -# Copyright 2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -27,8 +27,8 @@ # Modified by Eric Hameleers <alien@slackware.com> PKGNAM=ntfs-3g -VERSION=2012.1.15 -BUILD=${BUILD:-2} +VERSION=2013.1.13 +BUILD=${BUILD:-1} SRCNAM=ntfs-3g_ntfsprogs NUMJOBS=${NUMJOBS:-" -j7 "} @@ -97,11 +97,11 @@ make install DESTDIR=$PKG || exit 1 # any better ideas, I'd like to hear them. chmod 4711 $PKG/bin/ntfs-3g -# Add the HAL fdi file so that automount uses ntfs-3g for mounting -# This should work with the "volume.fstype.alternative.*" in hal-0.5.12+ -mkdir -p $PKG/usr/share/hal/fdi/policy/10osvendor -cat $CWD/10-ntfs-3g-policy.fdi \ - > $PKG/usr/share/hal/fdi/policy/10osvendor/10-ntfs-3g-policy.fdi +## Add the HAL fdi file so that automount uses ntfs-3g for mounting +## This should work with the "volume.fstype.alternative.*" in hal-0.5.12+ +#mkdir -p $PKG/usr/share/hal/fdi/policy/10osvendor +#cat $CWD/10-ntfs-3g-policy.fdi \ +# > $PKG/usr/share/hal/fdi/policy/10osvendor/10-ntfs-3g-policy.fdi # Create a mount.ntfs -> mount.ntfs-3g symlink. # This causes ntfs-3g to always be used when mounting NTFS filesystems. diff --git a/source/a/os-prober/os-prober.SlackBuild b/source/a/os-prober/os-prober.SlackBuild new file mode 100755 index 000000000..4e443e68b --- /dev/null +++ b/source/a/os-prober/os-prober.SlackBuild @@ -0,0 +1,141 @@ +#!/bin/sh + +# Copyright 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +PKGNAM=os-prober +VERSION=${VERSION:-$(echo $PKGNAM_*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d _ | rev)} +BUILD=${BUILD:-1} + +# Automatically determine the architecture we're building on: +if [ -z "$ARCH" ]; then + case "$(uname -m)" in + i?86) ARCH=i486 ;; + arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7lh ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) ARCH=$(uname -m) ;; + esac + export ARCH +fi + +if [ "$ARCH" = "i386" ]; then + SLKCFLAGS="-O2 -march=i386 -mcpu=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "s390" ]; then + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +elif [ "$ARCH" = "armv7hl" ]; then + SLKCFLAGS="-O3 -march=armv7-a -mfpu=vfpv3-d16" + LIBDIRSUFFIX="" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp} +PKG=$TMP/package-$PKGNAM + +rm -rf $PKG +mkdir -p $TMP $PKG + +cd $TMP +rm -rf $PKGNAM-$VERSION +tar xvf $CWD/${PKGNAM}_$VERSION.tar.?z* || exit 1 +cd $PKGNAM-$VERSION || exit 1 + +# Don't drop support for reiserfs. It's still in the kernel (for now): +zcat $CWD/os-prober.reiserfs.diff.gz | patch -p1 --verbose || exit 1 + +# Edit the scripts to use $LIBDIRSUFFIX=64 if needed: +if [ "$LIBDIRSUFFIX" = "64" ]; then + find -type f -exec sed -i -e 's|usr/lib|usr/lib64|g' {} \; +fi + +chown -R root:root . +find . \ + \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \; + +make || exit 1 + +mkdir -p $PKG/usr/bin +cp -a linux-boot-prober os-prober $PKG/usr/bin +mkdir -p $PKG/usr/lib${LIBDIRSUFFIX} +cp -a linux-boot-probes os-probes $PKG/usr/lib${LIBDIRSUFFIX} +( cd $PKG/usr/lib${LIBDIRSUFFIX}/linux-boot-probes + for probe in common/* ; do + ln -sf $probe . + done + cd mounted + for probe in common/* x86/* ; do + ln -sf $probe . + done +) +( cd $PKG/usr/lib${LIBDIRSUFFIX}/os-probes + for probe in common/* ; do + ln -sf $probe . + done + cd init + for probe in common/* ; do + ln -sf $probe . + done + cd ../mounted + for probe in common/* x86/* ; do + ln -sf $probe . + done +) +mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/os-prober +cp -a newns $PKG/usr/lib${LIBDIRSUFFIX}/os-prober +mkdir -p $PKG/usr/share/os-prober +cp -a common.sh $PKG/usr/share/os-prober +mkdir -p $PKG/var/lib/os-prober + +# Add a documentation directory: +mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION +cp -a README TODO $PKG/usr/doc/$PKGNAM-$VERSION + +# Strip binaries: +( cd $PKG + find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null +) + +mkdir $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz + diff --git a/source/a/os-prober/os-prober.reiserfs.diff b/source/a/os-prober/os-prober.reiserfs.diff new file mode 100644 index 000000000..2daa89f54 --- /dev/null +++ b/source/a/os-prober/os-prober.reiserfs.diff @@ -0,0 +1,11 @@ +--- ./os-probes/init/common/10filesystems.orig 2013-07-23 02:38:08.000000000 -0500 ++++ ./os-probes/init/common/10filesystems 2013-08-30 15:21:07.382157112 -0500 +@@ -2,7 +2,7 @@ + # Make sure filesystems are available. + set +e # ignore errors from modprobe + +-FILESYSTEMS='ext2 ext3 ext4 xfs jfs msdos vfat ntfs minix hfs hfsplus qnx4 ufs btrfs' ++FILESYSTEMS='ext2 ext3 ext4 reiserfs xfs jfs msdos vfat ntfs minix hfs hfsplus qnx4 ufs btrfs' + # fuse is needed to make grub-mount work. + FILESYSTEMS="$FILESYSTEMS fuse" + # The Ubuntu kernel udebs put a number of filesystem modules in diff --git a/source/a/os-prober/slack-desc b/source/a/os-prober/slack-desc new file mode 100644 index 000000000..36c5ef2ce --- /dev/null +++ b/source/a/os-prober/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +os-prober: os-prober (an OS detector) +os-prober: +os-prober: os-prober detects OSes on other partitions than the current system +os-prober: partition, and outputs the results in a generic machine-readable +os-prober: format. This information can be used to add other OSes to the boot +os-prober: loader. +os-prober: +os-prober: Homepage: http://packages.debian.org/unstable/utils/os-prober +os-prober: +os-prober: +os-prober: diff --git a/source/a/pciutils/pciutils-3.2.0.tar.sign b/source/a/pciutils/pciutils-3.2.0.tar.sign new file mode 100644 index 000000000..5cc46614f --- /dev/null +++ b/source/a/pciutils/pciutils-3.2.0.tar.sign @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.12 (GNU/Linux) + +iQIVAwUAUXFFN8KOeEftcPgtAQLG3w/8C2cNMhW3v4romdMzTFJ0StgayKsQhvNk +BxG1FLexwswGWO91TPz52bwOcgN+8OZODsTLf2iMmnt5wVnskov/z73KHPEXKFW7 +Q7fpbSszaAWklDL0G4Pp6kdt7yxFKgqPDSIbKbmMNTzFdTF5QyqajAJ6/3ah1cEt +z75Nb3II24Yaip7ibRjb8d1OS9EpN64J+pEbrGLPh7FFOfqfY6yQtFdajdLor31x +/zs/VcI1gjlGaKym8zQkamH561NDQLUoWxSNjnNDLbSEn369r4pBBuQbr4iXrPDB +dGV+g6FXLFGb7QRODrLsRO+xLswQG7Jpn7dyd7Uxf1HoYuy8USXMg5gZPjNctWA3 +ZRF4RAP4AgxLSIwQBZqDjjDIwf52cJsrKC37AFLqmWMn5zyPNcLdFlkYbN2DiwPE +5Q2egQMB13xeURwOgEeQ3BA5AbAOx4JdlctyM+WUl5zhzheUqlmZRN6rg/cJt1HY +NhsbA4Gkt2OZYXJdpPixBJENxV8RJftNMVd4WKhLktJ8uzLoG/sWfyI6NBOXC17x +7+fZTFV9MeY9/JJsyY8WMYT94ut7wyR7nSFfe6ZsPSRV8DTZNlSITF9Qb3czTGOY +te4jC/oH+yNzyWCLvRD0uuf/cxmZKQqfsfosU4w+0nONoe15CCWkx7laYwBx0hN3 +l7tsXYaGnbk= +=fcLj +-----END PGP SIGNATURE----- diff --git a/source/a/pciutils/pciutils.SlackBuild b/source/a/pciutils/pciutils.SlackBuild index 03268420e..c79361066 100755 --- a/source/a/pciutils/pciutils.SlackBuild +++ b/source/a/pciutils/pciutils.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,7 +21,7 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=${VERSION:-$(echo pciutils-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +VERSION=${VERSION:-$(echo pciutils-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} BUILD=${BUILD:-1} NUMJOBS=${NUMJOBS:--j3} @@ -55,7 +55,7 @@ rm -rf $PKG mkdir -p $TMP $PKG cd $TMP rm -rf pciutils-$VERSION -tar xvf $CWD/pciutils-$VERSION.tar.?z* || exit 1 +tar xvf $CWD/pciutils-$VERSION.tar.xz || exit 1 cd pciutils-$VERSION chown -R root:root . @@ -68,7 +68,6 @@ find . \ zcat $CWD/pciutils.dontcompress.diff.gz | patch -p1 || exit 1 zcat $CWD/pciutils.update.pci.ids.url.diff.gz | patch -p1 || exit 1 -# Make and install the shared library make \ PREFIX=/usr \ SBINDIR=/sbin \ diff --git a/source/a/pkgtools/pkgtools.SlackBuild b/source/a/pkgtools/pkgtools.SlackBuild index c5bc2d439..d29306380 100755 --- a/source/a/pkgtools/pkgtools.SlackBuild +++ b/source/a/pkgtools/pkgtools.SlackBuild @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -27,7 +27,7 @@ fi PKG=$TMP/package-pkgtools # *** UPDATE THESE WITH EACH BUILD: -VERSION=14.0 +VERSION=14.1 ARCH=${ARCH:-noarch} BUILD=2 @@ -50,7 +50,9 @@ mkdir -p $PKG ( cd $CWD/scripts # Install the core Slackware package tools: mkdir -p $PKG/sbin - for file in explodepkg installpkg makebootdisk makepkg pkgtool removepkg upgradepkg ; do + # Don't include makebootdisk... it's useless since a kernel won't fit on a + # floppy disk, and nobody uses floppies any more anyway. + for file in explodepkg installpkg makepkg pkgtool removepkg upgradepkg ; do cp -a $CWD/scripts/$file $PKG/sbin done chown root:root $PKG/sbin/* @@ -63,6 +65,8 @@ mkdir -p $PKG done chown root:root $PKG/var/log/setup/setup.* chmod 755 $PKG/var/log/setup/setup.* + # Add a link for makebootstick: + ( cd $PKG/sbin ; ln -sf ../var/log/setup/setup.80.make-bootdisk makebootstick ) ) mkdir -p $PKG/install diff --git a/source/a/pkgtools/scripts/pkgtool b/source/a/pkgtools/scripts/pkgtool index ba8ecd0ad..dd9d6816f 100644 --- a/source/a/pkgtools/scripts/pkgtool +++ b/source/a/pkgtools/scripts/pkgtool @@ -4,7 +4,7 @@ # 1998, 1999 Patrick Volkerding, Moorhead, MN USA # Copyright 2001, 2004 Slackware Linux, Inc., Concord, CA USA # All rights reserved. -# Copyright 2007, 2009, 2010, 2011 Patrick Volkerding, Sebeka, MN, USA +# Copyright 2007, 2009, 2010, 2011, 2013 Patrick Volkerding, Sebeka, MN, USA # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: @@ -212,7 +212,7 @@ else # there were no arguments, so we'll get the needed information from the CMD_START="true" rm -f $TMP/SeT* while [ 0 ]; do - dialog --title "Slackware Package Tool (pkgtool version 14.0)" \ + dialog --title "Slackware Package Tool (pkgtool version 14.1)" \ --menu "\nWelcome to the Slackware package tool.\n\ \nWhich option would you like?\n" 17 75 7 \ "Current" "Install packages from the current directory" \ diff --git a/source/a/pkgtools/scripts/setup.80.make-bootdisk b/source/a/pkgtools/scripts/setup.80.make-bootdisk index d9b4012f2..a5d442354 100644 --- a/source/a/pkgtools/scripts/setup.80.make-bootdisk +++ b/source/a/pkgtools/scripts/setup.80.make-bootdisk @@ -1,14 +1,26 @@ #!/bin/sh #BLURB="Create a USB Linux boot stick" -RDIR=/dev/tty4 +if [ -r /usr/lib/setup/setup ]; then + RDIR=/dev/tty4 +else + RDIR=/dev/null +fi NDIR=/dev/null TMP=/var/log/setup/tmp if [ ! -d $TMP ]; then mkdir -p $TMP fi -T_PX="$1" -ROOT_DEVICE="$2" +if [ -z "$T_PX" ]; then + T_PX=/ +else + T_PX="$1" +fi +if [ -z "$2" ]; then + ROOT_DEVICE=$(mount | head -n 1 | cut -f 1 -d ' ') +else + ROOT_DEVICE="$2" +fi while [ 0 ]; do # the bootdisk menu loop # Run "rescan-scsi-bus -l" to get an up to date overview of devices: @@ -19,7 +31,12 @@ while [ 0 ]; do # the bootdisk menu loop [ -r /sys/block/$BDEV/removable -a "$(cat /sys/block/$BDEV/removable)" == "1" ] \ && echo $BDEV >> $TMP/remov_prior done - dialog --title "MAKE USB FLASH BOOT" --default-item "Skip" --menu \ + if [ "$T_PX" = "/" ]; then + DEFAULTITEM="Create" + else + DEFAULTITEM="Skip" + fi + dialog --title "MAKE USB FLASH BOOT" --default-item "$DEFAULTITEM" --menu \ "If your computer supports booting from a USB device, it is recommended that you make \ a USB boot stick for your system at this time. It will boot your computer straight \ into the root filesystem on $ROOT_DEVICE. \n\ @@ -151,14 +168,53 @@ EOF F2 returns to the previous page. EOF + if [ "$(uname -m)" == "x86_64" ]; then # also install an EFI bootloader + mkdir -p $TMP/bootdisk/EFI/BOOT 1> /dev/null 2> /dev/null + cp $T_PX/boot/elilo-x86_64.efi $TMP/bootdisk/EFI/BOOT/BOOTX64.EFI 1> /dev/null 2> /dev/null + cat << EOF > $TMP/bootdisk/EFI/BOOT/message.txt 2> /dev/null + +Welcome to the Slackware Linux custom USB boot stick! + +By default, this stick boots a root Linux partition on $ROOT_DEVICE when you +hit ENTER. If you'd like to boot some other partition, use a command like +this on the prompt below: + + huge.s root=/dev/sda1 ro + +Where "/dev/sda1" is the partition you want to boot, and "ro" specifies that +the partition should be initially mounted as read-only. If you wish to mount +the partition read-write, use "rw" instead. You may also add any other +kernel parameters you might need depending on your hardware, and which +drivers are included in your kernel. + +Hit ENTER to boot: + +EOF + cat << EOF > $TMP/bootdisk/EFI/BOOT/elilo.conf 2> /dev/null +chooser=simple +message=message.txt +delay=300 +timeout=300 +# +image=/vmlinuz + label=huge.s + read-only + append="root=$ROOT_DEVICE vga=normal ro" +EOF + fi # end EFI installation umount /dev/$STICK rm -r $TMP/bootdisk # Make the device bootable: syslinux -s /dev/$STICK 1> /dev/null 2> /dev/null + if [ "$T_PX" = "/" ]; then + dialog --title "USB BOOT STICK CREATED" --msgbox \ + "The USB boot stick has been successfully created on device /dev/$STICK." 6 60 + exit + fi dialog --title "USB BOOT STICK CREATED" --ok-label Continue --cancel-label Create --menu \ -"The USB boot stick has been successfully created in /dev/$STICK. If you would like to \ +"The USB boot stick has been successfully created on device /dev/$STICK. If you would like to \ create an additional boot stick, please select 'Create' and we'll go back and make another \ -one, otherwise select 'Continue' to continue configuring your system." 12 70 2 \ +one, otherwise select 'Continue' to continue configuring your system." 12 71 2 \ "Continue" "Continue the configuration (done making boot sticks)" \ "Create" "Make a spare Linux boot stick in /dev/$STICK" \ 2> $TMP/return diff --git a/source/a/procps/procps-3.2.8.makefile.diff b/source/a/procps/procps-3.2.8.makefile.diff new file mode 100644 index 000000000..383d328cb --- /dev/null +++ b/source/a/procps/procps-3.2.8.makefile.diff @@ -0,0 +1,11 @@ +--- ./Makefile.orig 2009-05-10 13:50:48.000000000 -0500 ++++ ./Makefile 2013-06-25 16:19:06.058320108 -0500 +@@ -174,7 +174,7 @@ + # want this rule first, use := on ALL, and ALL not filled in yet + all: do_all + +--include */module.mk ++-include proc/module.mk ps/module.mk + + do_all: $(ALL) + diff --git a/source/a/procps/procps.SlackBuild b/source/a/procps/procps.SlackBuild index e5e85ffc4..255ece40d 100755 --- a/source/a/procps/procps.SlackBuild +++ b/source/a/procps/procps.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2005-2011 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2005-2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -25,7 +25,7 @@ VERSION=3.2.8 # Sometimes this number lags behind... SOVER=3.2.8 PSMISCVER=22.13 -BUILD=${BUILD:-3} +BUILD=${BUILD:-4} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -100,8 +100,11 @@ zcat $CWD/procps-3.2.8-ps-cgroup-suppress-root-group.patch.gz | patch -p1 --verb # Init contructors in correct order to avoid "Unknown HZ value!": zcat $CWD/procps-3.2.8.unknown.hz.value.diff.gz | patch -p1 --verbose || exit 1 +# Fix an ordering problem in the Makefile: +zcat $CWD/procps-3.2.8.makefile.diff.gz | patch -p1 --verbose || exit 1 + make OPT="$SLKCFLAGS" || make OPT="$SLKCFLAGS" || exit 1 -mkdir -p $PKG/lib${LIBDIRSUFFIX} $PKG/bin $PKG/sbin $PKG/usr/bin +mkdir -p $PKG/lib${LIBDIRSUFFIX} $PKG/bin $PKG/sbin $PKG/usr/bin $PKG/usr/include/proc cat free > $PKG/bin/free cat ps/ps> $PKG/bin/ps cat proc/libproc-${SOVER}.so > $PKG/lib${LIBDIRSUFFIX}/libproc-${SOVER}.so @@ -123,6 +126,9 @@ cat watch > $PKG/usr/bin/watch ln -sf /bin/free . ln -sf /bin/ps . ) +cp -a proc/*.h $PKG/usr/include/proc +chown -R root:root $PKG/usr/include/proc +chmod 644 $PKG/usr/include/proc/* cp -a ps/ps.1 . mkdir -p $PKG/usr/man/man1 for page in free.1 pgrep.1 pkill.1 ps.1 slabtop.1 skill.1 snice.1 tload.1 top.1 uptime.1 w.1 watch.1 ; do diff --git a/source/a/reiserfsprogs/reiserfsprogs.SlackBuild b/source/a/reiserfsprogs/reiserfsprogs.SlackBuild index fc38990da..83467e323 100755 --- a/source/a/reiserfsprogs/reiserfsprogs.SlackBuild +++ b/source/a/reiserfsprogs/reiserfsprogs.SlackBuild @@ -20,7 +20,7 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=3.6.21 +VERSION=${VERSION:-3.6.23} BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: @@ -85,19 +85,13 @@ find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ ln -sf reiserfsck fsck.reiserfs ) -# These were renamed, it seems -# --> Deleting /usr/man/man8/debugreiserfs.8.gz -# --> Deleting /usr/man/man8/mkreiserfs.8.gz -# --> Deleting /usr/man/man8/reiserfsck.8.gz -# --> Deleting /usr/man/man8/reiserfstune.8.gz -# --> Deleting /usr/man/man8/resize_reiserfs.8.gz -# Do we want symlinks for backwards compatibility? If so... +# Do we want symlinks for compatibility? If so... ( cd $PKG/usr/man/man8 - ln -s mkfs.reiserfs.8 mkreiserfs.8 - ln -s debugfs.reiserfs.8 debugreiserfs.8 - ln -s fsck.reiserfs.8 reiserfsck.8 - ln -s tunefs.reiserfs.8 reiserfstune.8 - ln -s resizefs.reiserfs.8 resize_reiserfs.8 + ln -s debugreiserfs.8 debugfs.reiserfs.8 + ln -s mkreiserfs.8 mkfs.reiserfs.8 + ln -s reiserfsck.8 fsck.reiserfs.8 + ln -s reiserfstune.8 tunefs.reiserfs.8 + ln -s resize_reiserfs.8 resizefs.reiserfs.8 ) # Compress the man pages @@ -111,6 +105,7 @@ cp -a \ AUTHORS COPYING* CREDITS INSTALL NEWS README* \ $PKG/usr/doc/reiserfsprogs-$VERSION chmod 644 $PKG/usr/doc/reiserfsprogs-$VERSION/* + mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc diff --git a/source/a/reiserfsprogs/slack-desc b/source/a/reiserfsprogs/slack-desc index 3358fdf77..a82a82b4e 100644 --- a/source/a/reiserfsprogs/slack-desc +++ b/source/a/reiserfsprogs/slack-desc @@ -9,11 +9,11 @@ reiserfsprogs: reiserfsprogs (Reiserfs filesystem utilities) reiserfsprogs: reiserfsprogs: These utilities are used for Reiserfs. Reiserfs is a file system -reiserfsprogs: based on balanced tree algorithms. Learn more at the home site: -reiserfsprogs: http://www.namesys.com +reiserfsprogs: based on balanced tree algorithms. reiserfsprogs: reiserfsprogs: Reiserfs is the work of Hans Reiser and many others. See the file reiserfsprogs: /usr/doc/reiserfs*/README for full credits. reiserfsprogs: reiserfsprogs: reiserfsprogs: +reiserfsprogs: diff --git a/source/a/sed/sed.SlackBuild b/source/a/sed/sed.SlackBuild index 7684a10dc..48b1cdcda 100755 --- a/source/a/sed/sed.SlackBuild +++ b/source/a/sed/sed.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2005-2009 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2005-2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,7 +21,8 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=4.2.1 +PKGNAM=sed +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} BUILD=${BUILD:-1} CWD=$(pwd) diff --git a/source/a/shadow/patches/r3054.diff b/source/a/shadow/patches/r3054.diff deleted file mode 100644 index dc1eab13b..000000000 --- a/source/a/shadow/patches/r3054.diff +++ /dev/null @@ -1,27 +0,0 @@ -* src/useradd.c: Fixed wrong format string. -* lib/gshadow.c: Removed declaration of unused variable. - -=================================================================== ---- src/useradd.c (revision 3052) -+++ src/useradd.c (revision 3054) -@@ -684,7 +684,7 @@ - static void usage (void) - { - (void) fprintf (stderr, -- _("Usage: useradd [options] LOGIN\n" -+ _("Usage: %s [options] LOGIN\n" - "\n" - "Options:\n"), - Prog); - -=================================================================== ---- lib/gshadow.c (revision 3052) -+++ lib/gshadow.c (revision 3054) -@@ -216,7 +216,6 @@ - static char *buf = NULL; - - char *cp; -- struct sgrp *ret; - - if (0 == buflen) { - buf = (char *) malloc (BUFSIZ); diff --git a/source/a/shadow/patches/r3055.diff b/source/a/shadow/patches/r3055.diff deleted file mode 100644 index a2af6f39f..000000000 --- a/source/a/shadow/patches/r3055.diff +++ /dev/null @@ -1,1515 +0,0 @@ -=================================================================== ---- src/userdel.c (revision 3054) -+++ src/userdel.c (revision 3055) -@@ -94,7 +94,7 @@ - static bool spw_locked = false; - - /* local function prototypes */ --static void usage (void); -+static void usage (int status); - static void update_groups (void); - static void close_files (void); - static void fail_exit (int); -@@ -111,7 +111,7 @@ - /* - * usage - display usage message and exit - */ --static void usage (void) -+static void usage (int status) - { - fputs (_("Usage: userdel [options] LOGIN\n" - "\n" -@@ -120,8 +120,8 @@ - " even if not owned by user\n" - " -h, --help display this help message and exit\n" - " -r, --remove remove home directory and mail spool\n" -- "\n"), stderr); -- exit (E_USAGE); -+ "\n"), status ? stderr : stdout); -+ exit (status); - } - - /* -@@ -774,17 +774,19 @@ - case 'f': /* force remove even if not owned by user */ - fflg = true; - break; -+ case 'h': -+ usage (E_SUCCESS); - case 'r': /* remove home dir and mailbox */ - rflg = true; - break; - default: -- usage (); -+ usage (E_USAGE); - } - } - } - - if ((optind + 1) != argc) { -- usage (); -+ usage (E_USAGE); - } - - OPENLOG ("userdel"); -Index: src/lastlog.c -=================================================================== ---- src/lastlog.c (revision 3054) -+++ src/lastlog.c (revision 3055) -@@ -71,7 +71,7 @@ - - #define NOW (time ((time_t *) 0)) - --static void usage (void) -+static void usage (int status) - { - fputs (_("Usage: lastlog [options]\n" - "\n" -@@ -80,8 +80,8 @@ - " -h, --help display this help message and exit\n" - " -t, --time DAYS print only lastlog records more recent than DAYS\n" - " -u, --user LOGIN print lastlog record of the specified LOGIN\n" -- "\n"), stderr); -- exit (EXIT_FAILURE); -+ "\n"), status ? stderr : stdout); -+ exit (status); - } - - static void print_one (/*@null@*/const struct passwd *pw) -@@ -208,7 +208,7 @@ - NULL)) != -1) { - switch (c) { - case 'h': -- usage (); -+ usage (EXIT_SUCCESS); - break; - case 't': - { -@@ -267,7 +267,7 @@ - break; - } - default: -- usage (); -+ usage (EXIT_FAILURE); - break; - } - } -@@ -275,7 +275,7 @@ - fprintf (stderr, - _("lastlog: unexpected argument: %s\n"), - argv[optind]); -- usage(); -+ usage (EXIT_FAILURE); - } - } - -Index: src/gpasswd.c -=================================================================== ---- src/gpasswd.c (revision 3054) -+++ src/gpasswd.c (revision 3055) -@@ -94,7 +94,7 @@ - #endif - - /* local function prototypes */ --static void usage (void); -+static void usage (int status); - static RETSIGTYPE catch_signals (int killed); - static bool is_valid_user_list (const char *users); - static void process_flags (int argc, char **argv); -@@ -128,14 +128,15 @@ - /* - * usage - display usage message - */ --static void usage (void) -+static void usage (int status) - { -- fprintf (stderr, -+ fprintf (status ? stderr : stdout, - _("Usage: %s [option] GROUP\n" - "\n" - "Options:\n" - " -a, --add USER add USER to GROUP\n" - " -d, --delete USER remove USER from GROUP\n" -+ " -h, --help display this help message and exit\n" - " -r, --remove-password remove the GROUP's password\n" - " -R, --restrict restrict access to GROUP to its members\n" - " -M, --members USER,... set the list of members of GROUP\n" -@@ -150,7 +151,7 @@ - _("The options cannot be combined.\n") - #endif - ); -- exit (E_USAGE); -+ exit (status); - } - - /* -@@ -235,6 +236,7 @@ - static struct option long_options[] = { - {"add", required_argument, NULL, 'a'}, - {"delete", required_argument, NULL, 'd'}, -+ {"help", no_argument, NULL, 'h'}, - {"remove-password", no_argument, NULL, 'r'}, - {"restrict", no_argument, NULL, 'R'}, - {"administrators", required_argument, NULL, 'A'}, -@@ -242,7 +244,7 @@ - {NULL, 0, NULL, '\0'} - }; - -- while ((flag = getopt_long (argc, argv, "a:A:d:gM:rR", long_options, &option_index)) != -1) { -+ while ((flag = getopt_long (argc, argv, "a:A:d:ghM:rR", long_options, &option_index)) != -1) { - switch (flag) { - case 'a': /* add a user */ - aflg = true; -@@ -276,6 +278,8 @@ - break; - case 'g': /* no-op from normal password */ - break; -+ case 'h': -+ usage (E_SUCCESS); - case 'M': /* set the list of members */ - members = optarg; - if (!is_valid_user_list (members)) { -@@ -290,7 +294,7 @@ - Rflg = true; - break; - default: -- usage (); -+ usage (E_USAGE); - } - } - -@@ -325,14 +329,14 @@ - exclusive++; - } - if (exclusive > 1) { -- usage (); -+ usage (E_USAGE); - } - - /* - * Make sure one (and only one) group was provided - */ - if ((argc != (opt_index+1)) || (NULL == group)) { -- usage (); -+ usage (E_USAGE); - } - } - -Index: src/newusers.c -=================================================================== ---- src/newusers.c (revision 3054) -+++ src/newusers.c (revision 3055) -@@ -92,7 +92,7 @@ - static bool spw_locked = false; - - /* local function prototypes */ --static void usage (void); -+static void usage (int status); - static void fail_exit (int); - static int add_group (const char *, const char *, gid_t *, gid_t); - static int get_user_id (const char *, uid_t *); -@@ -110,15 +110,16 @@ - /* - * usage - display usage message and exit - */ --static void usage (void) -+static void usage (int status) - { -- (void) fprintf (stderr, -+ FILE *usageout = status ? stderr : stdout; -+ (void) fprintf (usageout, - _("Usage: %s [options]\n" - "\n" - "Options:\n"), - Prog); - #ifndef USE_PAM -- (void) fprintf (stderr, -+ (void) fprintf (usageout, - _(" -c, --crypt-method the crypt method (one of %s)\n"), - #ifndef USE_SHA_CRYPT - "NONE DES MD5" -@@ -127,18 +128,18 @@ - #endif /* USE_SHA_CRYPT */ - ); - #endif /* !USE_PAM */ -- (void) fputs (_(" -h, --help display this help message and exit\n"), stderr); -- (void) fputs (_(" -r, --system create system accounts\n"), stderr); -+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout); -+ (void) fputs (_(" -r, --system create system accounts\n"), usageout); - #ifndef USE_PAM - #ifdef USE_SHA_CRYPT - (void) fputs (_(" -s, --sha-rounds number of SHA rounds for the SHA*\n" - " crypt algorithms\n"), -- stderr); -+ usageout); - #endif /* USE_SHA_CRYPT */ - #endif /* !USE_PAM */ -- (void) fputs ("\n", stderr); -+ (void) fputs ("\n", usageout); - -- exit (EXIT_FAILURE); -+ exit (status); - } - - /* -@@ -548,7 +549,7 @@ - long_options, &option_index)) != -1) { - switch (c) { - case 'h': -- usage (); -+ usage (EXIT_SUCCESS); - break; - case 'r': - rflg = true; -@@ -565,13 +566,13 @@ - fprintf (stderr, - _("%s: invalid numeric argument '%s'\n"), - Prog, optarg); -- usage (); -+ usage (EXIT_FAILURE); - } - break; - #endif /* USE_SHA_CRYPT */ - #endif /* !USE_PAM */ - default: -- usage (); -+ usage (EXIT_FAILURE); - break; - } - } -@@ -602,7 +603,7 @@ - fprintf (stderr, - _("%s: %s flag is only allowed with the %s flag\n"), - Prog, "-s", "-c"); -- usage (); -+ usage (EXIT_FAILURE); - } - #endif /* USE_SHA_CRYPT */ - -@@ -618,7 +619,7 @@ - fprintf (stderr, - _("%s: unsupported crypt method: %s\n"), - Prog, crypt_method); -- usage (); -+ usage (EXIT_FAILURE); - } - } - #endif /* !USE_PAM */ -Index: src/chpasswd.c -=================================================================== ---- src/chpasswd.c (revision 3054) -+++ src/chpasswd.c (revision 3055) -@@ -74,7 +74,7 @@ - - /* local function prototypes */ - static void fail_exit (int code); --static void usage (void); -+static void usage (int status); - static void process_flags (int argc, char **argv); - static void check_flags (void); - static void check_perms (void); -@@ -112,15 +112,16 @@ - /* - * usage - display usage message and exit - */ --static void usage (void) -+static void usage (int status) - { -- (void) fprintf (stderr, -+ FILE *usageout = status ? stderr : stdout; -+ (void) fprintf (usageout, - _("Usage: %s [options]\n" - "\n" - "Options:\n"), - Prog); - #ifndef USE_PAM -- (void) fprintf (stderr, -+ (void) fprintf (usageout, - _(" -c, --crypt-method the crypt method (one of %s)\n"), - #ifndef USE_SHA_CRYPT - "NONE DES MD5" -@@ -128,22 +129,22 @@ - "NONE DES MD5 SHA256 SHA512" - #endif /* USE_SHA_CRYPT */ - ); -- (void) fputs (_(" -e, --encrypted supplied passwords are encrypted\n"), stderr); -+ (void) fputs (_(" -e, --encrypted supplied passwords are encrypted\n"), usageout); - #endif /* !USE_PAM */ -- (void) fputs (_(" -h, --help display this help message and exit\n"), stderr); -+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout); - #ifndef USE_PAM - (void) fputs (_(" -m, --md5 encrypt the clear text password using\n" - " the MD5 algorithm\n"), -- stderr); -+ usageout); - #ifdef USE_SHA_CRYPT - (void) fputs (_(" -s, --sha-rounds number of SHA rounds for the SHA*\n" - " crypt algorithms\n"), -- stderr); -+ usageout); - #endif /* USE_SHA_CRYPT */ - #endif /* !USE_PAM */ -- (void) fputs ("\n", stderr); -+ (void) fputs ("\n", usageout); - -- exit (E_USAGE); -+ exit (status); - } - - /* -@@ -181,7 +182,7 @@ - long_options, &option_index)) != -1) { - switch (c) { - case 'h': -- usage (); -+ usage (E_SUCCESS); - break; - #ifndef USE_PAM - case 'c': -@@ -201,13 +202,13 @@ - fprintf (stderr, - _("%s: invalid numeric argument '%s'\n"), - Prog, optarg); -- usage (); -+ usage (E_USAGE); - } - break; - #endif /* USE_SHA_CRYPT */ - #endif /* !USE_PAM */ - default: -- usage (); -+ usage (E_USAGE); - break; - } - } -@@ -229,7 +230,7 @@ - fprintf (stderr, - _("%s: %s flag is only allowed with the %s flag\n"), - Prog, "-s", "-c"); -- usage (); -+ usage (E_USAGE); - } - #endif - -@@ -238,7 +239,7 @@ - fprintf (stderr, - _("%s: the -c, -e, and -m flags are exclusive\n"), - Prog); -- usage (); -+ usage (E_USAGE); - } - - if (cflg) { -@@ -253,7 +254,7 @@ - fprintf (stderr, - _("%s: unsupported crypt method: %s\n"), - Prog, crypt_method); -- usage (); -+ usage (E_USAGE); - } - } - #endif /* USE_PAM */ -Index: src/groupmems.c -=================================================================== ---- src/groupmems.c (revision 3054) -+++ src/groupmems.c (revision 3055) -@@ -88,7 +88,7 @@ - const struct group *grp); - static void purge_members (const struct group *grp); - static void display_members (const char *const *members); --static void usage (void); -+static void usage (int status); - static void process_flags (int argc, char **argv); - static void check_perms (void); - static void fail_exit (int code); -@@ -361,7 +361,7 @@ - } - } - --static void usage (void) -+static void usage (int status) - { - (void) fputs (_("Usage: groupmems [options] [action]\n" - "\n" -@@ -372,10 +372,11 @@ - "Actions:\n" - " -a, --add username add username to the members of the group\n" - " -d, --delete username remove username from the members of the group\n" -+ " -h, --help display this help message and exit\n" - " -p, --purge purge all members from the group\n" - " -l, --list list the members of the group\n" -- "\n"), stderr); -- fail_exit (EXIT_USAGE); -+ "\n"), status ? stderr : stdout); -+ fail_exit (status); - } - - /* -@@ -389,12 +390,13 @@ - {"add", required_argument, NULL, 'a'}, - {"delete", required_argument, NULL, 'd'}, - {"group", required_argument, NULL, 'g'}, -+ {"help", no_argument, NULL, 'h'}, - {"list", no_argument, NULL, 'l'}, - {"purge", no_argument, NULL, 'p'}, - {NULL, 0, NULL, '\0'} - }; - -- while ((arg = getopt_long (argc, argv, "a:d:g:lp", long_options, -+ while ((arg = getopt_long (argc, argv, "a:d:g:hlp", long_options, - &option_index)) != EOF) { - switch (arg) { - case 'a': -@@ -408,6 +410,8 @@ - case 'g': - thisgroup = xstrdup (optarg); - break; -+ case 'h': -+ usage (EXIT_SUCCESS); - case 'l': - list = true; - ++exclusive; -@@ -417,12 +421,12 @@ - ++exclusive; - break; - default: -- usage (); -+ usage (EXIT_USAGE); - } - } - - if ((exclusive > 1) || (optind < argc)) { -- usage (); -+ usage (EXIT_USAGE); - } - - /* local, no need for xgetpwnam */ -Index: src/usermod.c -=================================================================== ---- src/usermod.c (revision 3054) -+++ src/usermod.c (revision 3055) -@@ -149,7 +149,7 @@ - static void date_to_str (char *buf, size_t maxsize, - long int date, const char *negativ); - static int get_groups (char *); --static void usage (void); -+static void usage (int status); - static void new_pwent (struct passwd *); - #ifdef WITH_SELINUX - static void selinux_update_mapping (void); -@@ -300,9 +300,9 @@ - /* - * usage - display usage message and exit - */ --static void usage (void) -+static void usage (int status) - { -- fprintf (stderr, -+ fprintf (status ? stderr : stdout, - _("Usage: usermod [options] LOGIN\n" - "\n" - "Options:\n" -@@ -334,7 +334,7 @@ - "" - #endif - ); -- exit (E_USAGE); -+ exit (status); - } - - /* -@@ -815,7 +815,7 @@ - bool anyflag = false; - - if ((1 == argc) || ('-' == argv[argc - 1][0])) { -- usage (); -+ usage (E_USAGE); - } - - { -@@ -955,7 +955,7 @@ - fprintf (stderr, - _("%s: invalid numeric argument '%s'\n"), - Prog, optarg); -- usage (); -+ usage (E_USAGE); - } - fflg = true; - break; -@@ -976,6 +976,8 @@ - } - Gflg = true; - break; -+ case 'h': -+ usage (E_SUCCESS); - case 'l': - if (!is_valid_user_name (optarg)) { - fprintf (stderr, -@@ -1036,7 +1038,7 @@ - break; - #endif - default: -- usage (); -+ usage (E_USAGE); - } - anyflag = true; - } -@@ -1092,14 +1094,14 @@ - } - - if (optind != argc - 1) { -- usage (); -+ usage (E_USAGE); - } - - if (aflg && (!Gflg)) { - fprintf (stderr, - _("%s: %s flag is only allowed with the %s flag\n"), - Prog, "-a", "-G"); -- usage (); -+ usage (E_USAGE); - exit (E_USAGE); - } - -@@ -1107,7 +1109,7 @@ - fprintf (stderr, - _("%s: the -L, -p, and -U flags are exclusive\n"), - Prog); -- usage (); -+ usage (E_USAGE); - exit (E_USAGE); - } - -@@ -1115,7 +1117,7 @@ - fprintf (stderr, - _("%s: %s flag is only allowed with the %s flag\n"), - Prog, "-o", "-u"); -- usage (); -+ usage (E_USAGE); - exit (E_USAGE); - } - -@@ -1123,7 +1125,7 @@ - fprintf (stderr, - _("%s: %s flag is only allowed with the %s flag\n"), - Prog, "-m", "-d"); -- usage (); -+ usage (E_USAGE); - exit (E_USAGE); - } - -Index: src/chgpasswd.c -=================================================================== ---- src/chgpasswd.c (revision 3054) -+++ src/chgpasswd.c (revision 3055) -@@ -78,7 +78,7 @@ - - /* local function prototypes */ - static void fail_exit (int code); --static void usage (void); -+static void usage (int status); - static void process_flags (int argc, char **argv); - static void check_flags (void); - static void check_perms (void); -@@ -114,9 +114,10 @@ - /* - * usage - display usage message and exit - */ --static void usage (void) -+static void usage (int status) - { -- fprintf (stderr, _("Usage: %s [options]\n" -+ fprintf (status ? stderr : stdout, -+ _("Usage: %s [options]\n" - "\n" - "Options:\n" - " -c, --crypt-method the crypt method (one of %s)\n" -@@ -135,7 +136,7 @@ - " crypt algorithms\n") - #endif - ); -- exit (E_USAGE); -+ exit (status); - } - - /* -@@ -174,7 +175,7 @@ - eflg = true; - break; - case 'h': -- usage (); -+ usage (E_SUCCESS); - break; - case 'm': - md5flg = true; -@@ -186,12 +187,12 @@ - fprintf (stderr, - _("%s: invalid numeric argument '%s'\n"), - Prog, optarg); -- usage (); -+ usage (E_USAGE); - } - break; - #endif - default: -- usage (); -+ usage (E_USAGE); - break; - } - } -@@ -212,7 +213,7 @@ - fprintf (stderr, - _("%s: %s flag is only allowed with the %s flag\n"), - Prog, "-s", "-c"); -- usage (); -+ usage (E_USAGE); - } - #endif - -@@ -221,7 +222,7 @@ - fprintf (stderr, - _("%s: the -c, -e, and -m flags are exclusive\n"), - Prog); -- usage (); -+ usage (E_USAGE); - } - - if (cflg) { -@@ -236,7 +237,7 @@ - fprintf (stderr, - _("%s: unsupported crypt method: %s\n"), - Prog, crypt_method); -- usage (); -+ usage (E_USAGE); - } - } - } -Index: src/vipw.c -=================================================================== ---- src/vipw.c (revision 3054) -+++ src/vipw.c (revision 3055) -@@ -1,7 +1,7 @@ - /* - vipw, vigr edit the password or group file - with -s will edit shadow or gshadow file -- -+ - Copyright (c) 1997 , Guy Maor <maor@ece.utexas.edu> - Copyright (c) 1999 - 2000, Marek MichaÅ‚kiewicz - Copyright (c) 2002 - 2006, Tomasz KÅ‚oczko -@@ -29,8 +29,8 @@ - - #include <errno.h> - #include <getopt.h> --#ifdef WITH_SELINUX --#include <selinux/selinux.h> -+#ifdef WITH_SELINUX -+#include <selinux/selinux.h> - #endif - #include <signal.h> - #include <stdio.h> -@@ -64,7 +64,7 @@ - static bool quiet = false; - - /* local function prototypes */ --static void usage (void); -+static void usage (int status); - static int create_backup_file (FILE *, const char *, struct stat *); - static void vipwexit (const char *msg, int syserr, int ret); - static void vipwedit (const char *, int (*)(void), int (*)(void)); -@@ -72,9 +72,9 @@ - /* - * usage - display usage message and exit - */ --static void usage (void) -+static void usage (int status) - { -- (void) -+ (void) - fputs (_("Usage: vipw [options]\n" - "\n" - "Options:\n" -@@ -83,8 +83,8 @@ - " -p, --passwd edit passwd database\n" - " -q, --quiet quiet mode\n" - " -s, --shadow edit shadow or gshadow database\n" -- "\n"), stderr); -- exit (E_USAGE); -+ "\n"), status ? stderr : stdout); -+ exit (status); - } - - /* -@@ -285,8 +285,8 @@ - if (st1.st_mtime == st2.st_mtime) { - vipwexit (0, 0, 0); - } --#ifdef WITH_SELINUX -- /* unset the fscreatecon */ -+#ifdef WITH_SELINUX -+ /* unset the fscreatecon */ - if (is_selinux_enabled ()) { - if (setfscreatecon (NULL)) { - vipwexit (_("setfscreatecon () failed"), errno, 1); -@@ -353,7 +353,7 @@ - do_vipw = false; - break; - case 'h': -- usage (); -+ usage (E_SUCCESS); - break; - case 'p': - do_vipw = true; -@@ -365,7 +365,7 @@ - editshadow = true; - break; - default: -- usage (); -+ usage (E_USAGE); - } - } - } -Index: src/useradd.c -=================================================================== ---- src/useradd.c (revision 3054) -+++ src/useradd.c (revision 3055) -@@ -179,7 +179,7 @@ - static void show_defaults (void); - static int set_defaults (void); - static int get_groups (char *); --static void usage (void); -+static void usage (int status); - static void new_pwent (struct passwd *); - #ifdef WITH_SELINUX - static void selinux_update_mapping (void); -@@ -681,45 +681,46 @@ - /* - * usage - display usage message and exit - */ --static void usage (void) -+static void usage (int status) - { -- (void) fprintf (stderr, -+ FILE *usageout = status ? stderr : stdout; -+ (void) fprintf (usageout, - _("Usage: %s [options] LOGIN\n" - "\n" - "Options:\n"), - Prog); - (void) fputs (_(" -b, --base-dir BASE_DIR base directory for the home directory of the\n" -- " new account\n"), stderr); -- (void) fputs (_(" -c, --comment COMMENT GECOS field of the new account\n"), stderr); -- (void) fputs (_(" -d, --home-dir HOME_DIR home directory of the new account\n"), stderr); -- (void) fputs (_(" -D, --defaults print or change default useradd configuration\n"), stderr); -- (void) fputs (_(" -e, --expiredate EXPIRE_DATE expiration date of the new account\n"), stderr); -- (void) fputs (_(" -f, --inactive INACTIVE password inactivity period of the new account\n"), stderr); -+ " new account\n"), usageout); -+ (void) fputs (_(" -c, --comment COMMENT GECOS field of the new account\n"), usageout); -+ (void) fputs (_(" -d, --home-dir HOME_DIR home directory of the new account\n"), usageout); -+ (void) fputs (_(" -D, --defaults print or change default useradd configuration\n"), usageout); -+ (void) fputs (_(" -e, --expiredate EXPIRE_DATE expiration date of the new account\n"), usageout); -+ (void) fputs (_(" -f, --inactive INACTIVE password inactivity period of the new account\n"), usageout); - (void) fputs (_(" -g, --gid GROUP name or ID of the primary group of the new\n" -- " account\n"), stderr); -+ " account\n"), usageout); - (void) fputs (_(" -G, --groups GROUPS list of supplementary groups of the new\n" -- " account\n"), stderr); -- (void) fputs (_(" -h, --help display this help message and exit\n"), stderr); -- (void) fputs (_(" -k, --skel SKEL_DIR use this alternative skeleton directory\n"), stderr); -- (void) fputs (_(" -K, --key KEY=VALUE override /etc/login.defs defaults\n"), stderr); -+ " account\n"), usageout); -+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout); -+ (void) fputs (_(" -k, --skel SKEL_DIR use this alternative skeleton directory\n"), usageout); -+ (void) fputs (_(" -K, --key KEY=VALUE override /etc/login.defs defaults\n"), usageout); - (void) fputs (_(" -l, --no-log-init do not add the user to the lastlog and\n" -- " faillog databases\n"), stderr); -- (void) fputs (_(" -m, --create-home create the user's home directory\n"), stderr); -- (void) fputs (_(" -M, --no-create-home do not create the user's home directory\n"), stderr); -+ " faillog databases\n"), usageout); -+ (void) fputs (_(" -m, --create-home create the user's home directory\n"), usageout); -+ (void) fputs (_(" -M, --no-create-home do not create the user's home directory\n"), usageout); - (void) fputs (_(" -N, --no-user-group do not create a group with the same name as\n" -- " the user\n"), stderr); -+ " the user\n"), usageout); - (void) fputs (_(" -o, --non-unique allow to create users with duplicate\n" -- " (non-unique) UID\n"), stderr); -- (void) fputs (_(" -p, --password PASSWORD encrypted password of the new account\n"), stderr); -- (void) fputs (_(" -r, --system create a system account\n"), stderr); -- (void) fputs (_(" -s, --shell SHELL login shell of the new account\n"), stderr); -- (void) fputs (_(" -u, --uid UID user ID of the new account\n"), stderr); -- (void) fputs (_(" -U, --user-group create a group with the same name as the user\n"), stderr); -+ " (non-unique) UID\n"), usageout); -+ (void) fputs (_(" -p, --password PASSWORD encrypted password of the new account\n"), usageout); -+ (void) fputs (_(" -r, --system create a system account\n"), usageout); -+ (void) fputs (_(" -s, --shell SHELL login shell of the new account\n"), usageout); -+ (void) fputs (_(" -u, --uid UID user ID of the new account\n"), usageout); -+ (void) fputs (_(" -U, --user-group create a group with the same name as the user\n"), usageout); - #ifdef WITH_SELINUX -- (void) fputs (_(" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user mapping\n"), stderr); -+ (void) fputs (_(" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user mapping\n"), usageout); - #endif -- (void) fputs ("\n", stderr); -- exit (E_USAGE); -+ (void) fputs ("\n", usageout); -+ exit (status); - } - - /* -@@ -989,9 +990,9 @@ - }; - while ((c = getopt_long (argc, argv, - #ifdef WITH_SELINUX -- "b:c:d:De:f:g:G:k:K:lmMNop:rs:u:UZ:", -+ "b:c:d:De:f:g:G:hk:K:lmMNop:rs:u:UZ:", - #else -- "b:c:d:De:f:g:G:k:K:lmMNop:rs:u:U", -+ "b:c:d:De:f:g:G:hk:K:lmMNop:rs:u:U", - #endif - long_options, NULL)) != -1) { - switch (c) { -@@ -1029,7 +1030,7 @@ - break; - case 'D': - if (anyflag) { -- usage (); -+ usage (E_USAGE); - } - Dflg = true; - break; -@@ -1066,7 +1067,7 @@ - fprintf (stderr, - _("%s: invalid numeric argument '%s'\n"), - Prog, optarg); -- usage (); -+ usage (E_USAGE); - } - /* - * -f -1 is allowed -@@ -1106,7 +1107,7 @@ - Gflg = true; - break; - case 'h': -- usage (); -+ usage (E_SUCCESS); - break; - case 'k': - def_template = optarg; -@@ -1201,7 +1202,7 @@ - break; - #endif - default: -- usage (); -+ usage (E_USAGE); - } - anyflag = true; - } -@@ -1220,31 +1221,31 @@ - fprintf (stderr, - _("%s: %s flag is only allowed with the %s flag\n"), - Prog, "-o", "-u"); -- usage (); -+ usage (E_USAGE); - } - if (kflg && !mflg) { - fprintf (stderr, - _("%s: %s flag is only allowed with the %s flag\n"), - Prog, "-k", "-m"); -- usage (); -+ usage (E_USAGE); - } - if (Uflg && gflg) { - fprintf (stderr, - _("%s: options %s and %s conflict\n"), - Prog, "-U", "-g"); -- usage (); -+ usage (E_USAGE); - } - if (Uflg && Nflg) { - fprintf (stderr, - _("%s: options %s and %s conflict\n"), - Prog, "-U", "-N"); -- usage (); -+ usage (E_USAGE); - } - if (mflg && Mflg) { - fprintf (stderr, - _("%s: options %s and %s conflict\n"), - Prog, "-m", "-M"); -- usage (); -+ usage (E_USAGE); - } - - /* -@@ -1253,15 +1254,15 @@ - */ - if (Dflg) { - if (optind != argc) { -- usage (); -+ usage (E_USAGE); - } - - if (uflg || oflg || Gflg || dflg || cflg || mflg) { -- usage (); -+ usage (E_USAGE); - } - } else { - if (optind != argc - 1) { -- usage (); -+ usage (E_USAGE); - } - - user_name = argv[optind]; -Index: src/su.c -=================================================================== ---- src/su.c (revision 3054) -+++ src/su.c (revision 3055) -@@ -323,7 +323,7 @@ - /* - * usage - print command line syntax and exit - */ --static void usage (void) -+static void usage (int status) - { - fputs (_("Usage: su [options] [LOGIN]\n" - "\n" -@@ -335,8 +335,8 @@ - " --preserve-environment do not reset environment variables, and\n" - " keep the same shell\n" - " -s, --shell SHELL use SHELL instead of the default in passwd\n" -- "\n"), stderr); -- exit (E_USAGE); -+ "\n"), status ? stderr : stdout); -+ exit (status); - } - - /* -@@ -421,7 +421,7 @@ - command = optarg; - break; - case 'h': -- usage (); -+ usage (E_SUCCESS); - break; - case 'l': - fakelogin = true; -@@ -438,7 +438,7 @@ - shellstr = optarg; - break; - default: -- usage (); /* NOT REACHED */ -+ usage (E_USAGE); /* NOT REACHED */ - } - } - -Index: src/groupmod.c -=================================================================== ---- src/groupmod.c (revision 3054) -+++ src/groupmod.c (revision 3055) -@@ -93,7 +93,7 @@ - pflg = false; /* new encrypted password */ - - /* local function prototypes */ --static void usage (void); -+static void usage (int status); - static void new_grent (struct group *); - - #ifdef SHADOWGRP -@@ -113,21 +113,22 @@ - * usage - display usage message and exit - */ - --static void usage (void) -+static void usage (int status) - { -- (void) fprintf (stderr, -+ FILE *usageout = status ? stderr : stdout; -+ (void) fprintf (usageout, - _("Usage: %s [options] GROUP\n" - "\n" - "Options:\n"), - Prog); -- (void) fputs (_(" -g, --gid GID change the group ID to GID\n"), stderr); -- (void) fputs (_(" -h, --help display this help message and exit\n"), stderr); -- (void) fputs (_(" -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"), stderr); -- (void) fputs (_(" -o, --non-unique allow to use a duplicate (non-unique) GID\n"), stderr); -+ (void) fputs (_(" -g, --gid GID change the group ID to GID\n"), usageout); -+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout); -+ (void) fputs (_(" -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"), usageout); -+ (void) fputs (_(" -o, --non-unique allow to use a duplicate (non-unique) GID\n"), usageout); - (void) fputs (_(" -p, --password PASSWORD change the password to this (encrypted)\n" -- " PASSWORD\n"), stderr); -- (void) fputs ("\n", stderr); -- exit (E_USAGE); -+ " PASSWORD\n"), usageout); -+ (void) fputs ("\n", usageout); -+ exit (status); - } - - /* -@@ -362,6 +363,8 @@ - exit (E_BAD_ARG); - } - break; -+ case 'h': -+ usage (E_SUCCESS); - case 'n': - nflg = true; - group_newname = optarg; -@@ -374,16 +377,16 @@ - pflg = true; - break; - default: -- usage (); -+ usage (E_USAGE); - } - } - - if (oflg && !gflg) { -- usage (); -+ usage (E_USAGE); - } - - if (optind != (argc - 1)) { -- usage (); -+ usage (E_USAGE); - } - - group_name = argv[argc - 1]; -Index: src/passwd.c -=================================================================== ---- src/passwd.c (revision 3054) -+++ src/passwd.c (revision 3055) -@@ -180,7 +180,7 @@ - " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n" - " -x, --maxdays MAX_DAYS set maximum number of days before password\n" - " change to MAX_DAYS\n" -- "\n"), stderr); -+ "\n"), status ? stderr : stdout); - exit (status); - } - -@@ -811,7 +811,7 @@ - {NULL, 0, NULL, '\0'} - }; - -- while ((c = getopt_long (argc, argv, "adei:kln:qr:Suw:x:", -+ while ((c = getopt_long (argc, argv, "adehi:kln:qr:Suw:x:", - long_options, &option_index)) != -1) { - switch (c) { - case 'a': -@@ -897,6 +897,8 @@ - xflg = true; - anyflag = true; - break; -+ case 'h': -+ usage (E_SUCCESS); - default: - usage (E_BAD_ARG); - } -Index: src/groupadd.c -=================================================================== ---- src/groupadd.c (revision 3054) -+++ src/groupadd.c (revision 3055) -@@ -88,7 +88,7 @@ - #endif - - /* local function prototypes */ --static void usage (void); -+static void usage (int status); - static void new_grent (struct group *grent); - - #ifdef SHADOWGRP -@@ -105,24 +105,25 @@ - /* - * usage - display usage message and exit - */ --static void usage (void) -+static void usage (int status) - { -- (void) fprintf (stderr, -+ FILE *usageout = status ? stderr : stdout; -+ (void) fprintf (usageout, - _("Usage: %s [options] GROUP\n" - "\n" - "Options:\n"), - Prog); - (void) fputs (_(" -f, --force exit successfully if the group already exists,\n" -- " and cancel -g if the GID is already used\n"), stderr); -- (void) fputs (_(" -g, --gid GID use GID for the new group\n"), stderr); -- (void) fputs (_(" -h, --help display this help message and exit\n"), stderr); -- (void) fputs (_(" -K, --key KEY=VALUE override /etc/login.defs defaults\n"), stderr); -+ " and cancel -g if the GID is already used\n"), usageout); -+ (void) fputs (_(" -g, --gid GID use GID for the new group\n"), usageout); -+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout); -+ (void) fputs (_(" -K, --key KEY=VALUE override /etc/login.defs defaults\n"), usageout); - (void) fputs (_(" -o, --non-unique allow to create groups with duplicate\n" -- " (non-unique) GID\n"), stderr); -- (void) fputs (_(" -p, --password PASSWORD use this encrypted password for the new group\n"), stderr); -- (void) fputs (_(" -r, --system create a system account\n"), stderr); -- (void) fputs ("\n", stderr); -- exit (E_USAGE); -+ " (non-unique) GID\n"), usageout); -+ (void) fputs (_(" -p, --password PASSWORD use this encrypted password for the new group\n"), usageout); -+ (void) fputs (_(" -r, --system create a system account\n"), usageout); -+ (void) fputs ("\n", usageout); -+ exit (status); - } - - /* -@@ -412,7 +413,7 @@ - } - break; - case 'h': -- usage (); -+ usage (E_SUCCESS); - break; - case 'K': - /* -@@ -444,7 +445,7 @@ - rflg = true; - break; - default: -- usage (); -+ usage (E_USAGE); - } - } - -@@ -452,7 +453,7 @@ - * Check the flags consistency - */ - if (optind != argc - 1) { -- usage (); -+ usage (E_USAGE); - } - group_name = argv[optind]; - -@@ -468,7 +469,7 @@ - { - /* -o does not make sense without -g */ - if (oflg && !gflg) { -- usage (); -+ usage (E_USAGE); - } - - check_new_name (); -Index: src/chage.c -=================================================================== ---- src/chage.c (revision 3054) -+++ src/chage.c (revision 3055) -@@ -91,7 +91,7 @@ - - /* local function prototypes */ - static bool isnum (const char *s); --static void usage (void); -+static void usage (int status); - static void date_to_str (char *buf, size_t maxsize, time_t date); - static int new_fields (void); - static void print_date (time_t date); -@@ -152,7 +152,7 @@ - /* - * usage - print command line syntax and exit - */ --static void usage (void) -+static void usage (int status) - { - fputs (_("Usage: chage [options] [LOGIN]\n" - "\n" -@@ -168,8 +168,8 @@ - " -M, --maxdays MAX_DAYS set maximim number of days before password\n" - " change to MAX_DAYS\n" - " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n" -- "\n"), stderr); -- exit (E_USAGE); -+ "\n"), status ? stderr : stdout); -+ exit (status); - } - - static void date_to_str (char *buf, size_t maxsize, time_t date) -@@ -413,7 +413,7 @@ - fprintf (stderr, - _("%s: invalid date '%s'\n"), - Prog, optarg); -- usage (); -+ usage (E_USAGE); - } - break; - case 'E': -@@ -425,11 +425,11 @@ - fprintf (stderr, - _("%s: invalid date '%s'\n"), - Prog, optarg); -- usage (); -+ usage (E_USAGE); - } - break; - case 'h': -- usage (); -+ usage (E_SUCCESS); - break; - case 'I': - Iflg = true; -@@ -438,7 +438,7 @@ - fprintf (stderr, - _("%s: invalid numeric argument '%s'\n"), - Prog, optarg); -- usage (); -+ usage (E_USAGE); - } - break; - case 'l': -@@ -451,7 +451,7 @@ - fprintf (stderr, - _("%s: invalid numeric argument '%s'\n"), - Prog, optarg); -- usage (); -+ usage (E_USAGE); - } - break; - case 'M': -@@ -461,7 +461,7 @@ - fprintf (stderr, - _("%s: invalid numeric argument '%s'\n"), - Prog, optarg); -- usage (); -+ usage (E_USAGE); - } - break; - case 'W': -@@ -471,11 +471,11 @@ - fprintf (stderr, - _("%s: invalid numeric argument '%s'\n"), - Prog, optarg); -- usage (); -+ usage (E_USAGE); - } - break; - default: -- usage (); -+ usage (E_USAGE); - } - } - -@@ -495,14 +495,14 @@ - */ - - if (argc != opt_index + 1) { -- usage (); -+ usage (E_USAGE); - } - - if (lflg && (mflg || Mflg || dflg || Wflg || Iflg || Eflg)) { - fprintf (stderr, - _("%s: do not include \"l\" with other flags\n"), - Prog); -- usage (); -+ usage (E_USAGE); - } - } - -Index: src/faillog.c -=================================================================== ---- src/faillog.c (revision 3054) -+++ src/faillog.c (revision 3055) -@@ -47,6 +47,17 @@ - /*@-exitarg@*/ - #include "exitcodes.h" - -+/* local function prototypes */ -+static void usage (int status); -+static void print_one (/*@null@*/const struct passwd *pw, bool force); -+static void set_locktime (long locktime); -+static bool set_locktime_one (uid_t uid, long locktime); -+static void setmax (int max); -+static bool setmax_one (uid_t uid, int max); -+static void print (void); -+static bool reset_one (uid_t uid); -+static void reset (void); -+ - /* - * Global variables - */ -@@ -69,24 +80,25 @@ - - #define NOW (time((time_t *) 0)) - --static void usage (void) -+static void usage (int status) - { -- (void) fprintf (stderr, -+ FILE *usageout = status ? stderr : stdout; -+ (void) fprintf (usageout, - _("Usage: %s [options]\n" - "\n" - "Options:\n"), - "faillog"); -- (void) fputs (_(" -a, --all display faillog records for all users\n"), stderr); -- (void) fputs (_(" -h, --help display this help message and exit\n"), stderr); -- (void) fputs (_(" -l, --lock-time SEC after failed login lock account for SEC seconds\n"), stderr); -- (void) fputs (_(" -m, --maximum MAX set maximum failed login counters to MAX\n"), stderr); -- (void) fputs (_(" -r, --reset reset the counters of login failures\n"), stderr); -- (void) fputs (_(" -t, --time DAYS display faillog records more recent than DAYS\n"), stderr); -+ (void) fputs (_(" -a, --all display faillog records for all users\n"), usageout); -+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout); -+ (void) fputs (_(" -l, --lock-time SEC after failed login lock account for SEC seconds\n"), usageout); -+ (void) fputs (_(" -m, --maximum MAX set maximum failed login counters to MAX\n"), usageout); -+ (void) fputs (_(" -r, --reset reset the counters of login failures\n"), usageout); -+ (void) fputs (_(" -t, --time DAYS display faillog records more recent than DAYS\n"), usageout); - (void) fputs (_(" -u, --user LOGIN/RANGE display faillog record or maintains failure\n" - " counters and limits (if used with -r, -m,\n" -- " or -l) only for the specified LOGIN(s)\n"), stderr); -- (void) fputs ("\n", stderr); -- exit (E_USAGE); -+ " or -l) only for the specified LOGIN(s)\n"), usageout); -+ (void) fputs ("\n", usageout); -+ exit (status); - } - - static void print_one (/*@null@*/const struct passwd *pw, bool force) -@@ -495,7 +507,7 @@ - aflg = true; - break; - case 'h': -- usage (); -+ usage (E_SUCCESS); - break; - case 'l': - if (getlong (optarg, &fail_locktime) == 0) { -@@ -561,16 +573,16 @@ - break; - } - default: -- usage (); -+ usage (E_USAGE); - } - } - } - - if (aflg && uflg) { -- usage (); -+ usage (E_USAGE); - } - if (tflg && (lflg || mflg || rflg)) { -- usage (); -+ usage (E_USAGE); - } - - /* Open the faillog database */ -Index: src/chsh.c -=================================================================== ---- src/chsh.c (revision 3054) -+++ src/chsh.c (revision 3055) -@@ -72,7 +72,7 @@ - - /* local function prototypes */ - static void fail_exit (int code); --static void usage (void); -+static void usage (int status); - static void new_fields (void); - static bool shell_is_listed (const char *); - static bool is_restricted_shell (const char *); -@@ -101,15 +101,15 @@ - /* - * usage - print command line syntax and exit - */ --static void usage (void) -+static void usage (int status) - { - fputs (_("Usage: chsh [options] [LOGIN]\n" - "\n" - "Options:\n" - " -h, --help display this help message and exit\n" - " -s, --shell SHELL new login shell for the user account\n" -- "\n"), stderr); -- exit (E_USAGE); -+ "\n"), status ? stderr : stdout); -+ exit (status); - } - - /* -@@ -217,14 +217,14 @@ - &option_index)) != -1) { - switch (c) { - case 'h': -- usage (); -+ usage (E_SUCCESS); - break; - case 's': - sflg = true; - STRFCPY (loginsh, optarg); - break; - default: -- usage (); -+ usage (E_USAGE); - } - } - -@@ -233,7 +233,7 @@ - * be the user's name. - */ - if (argc > (optind + 1)) { -- usage (); -+ usage (E_USAGE); - } - } - -Index: man/groupmems.8.xml -=================================================================== ---- man/groupmems.8.xml (revision 3054) -+++ man/groupmems.8.xml (revision 3055) -@@ -114,6 +114,12 @@ - </listitem> - </varlistentry> - <varlistentry> -+ <term><option>-h</option>, <option>--help</option></term> -+ <listitem> -+ <para>Display help message and exit.</para> -+ </listitem> -+ </varlistentry> -+ <varlistentry> - <term><option>-l</option>, <option>--list</option></term> - <listitem> - <para>List the group membership list.</para> -Index: man/gpasswd.1.xml -=================================================================== ---- man/gpasswd.1.xml (revision 3054) -+++ man/gpasswd.1.xml (revision 3055) -@@ -1,7 +1,7 @@ - <?xml version="1.0" encoding="UTF-8"?> - <!-- - Copyright (c) 1996 , Rafal Maszkowski -- Copyright (c) 2007 - 2008, Nicolas François -+ Copyright (c) 2007 - 2009, Nicolas François - All rights reserved. - - Redistribution and use in source and binary forms, with or without -@@ -148,6 +148,14 @@ - </variablelist> - <variablelist remap='IP'> - <varlistentry> -+ <term><option>-h</option>, <option>--help</option></term> -+ <listitem> -+ <para>Display help message and exit.</para> -+ </listitem> -+ </varlistentry> -+ </variablelist> -+ <variablelist remap='IP'> -+ <varlistentry> - <term> - <option>-r</option>, <option>--remove-password</option> - </term> -Index: NEWS -=================================================================== ---- NEWS (revision 3054) -+++ NEWS (revision 3055) -@@ -1,5 +1,11 @@ - $Id$ - -+shadow-4.1.4.1 -> shadow-4.1.4.2 UNRELEASED -+ -+- general -+ * report usage error to stderr, but report usage help to stdout (and return -+ zero) when explicitly requested (e.g. with --help). -+ - shadow-4.1.4.1 -> shadow-4.1.4.2 2009-07-24 - - - general diff --git a/source/a/shadow/patches/r3060.diff b/source/a/shadow/patches/r3060.diff deleted file mode 100644 index 8ece64300..000000000 --- a/source/a/shadow/patches/r3060.diff +++ /dev/null @@ -1,116 +0,0 @@ -* libmisc/copydir.c, lib/shadowmem.c, lib/groupmem.c, lib/pwmem.c: -Fix some memory leaks. - -Index: libmisc/copydir.c -=================================================================== ---- libmisc/copydir.c (revision 3059) -+++ libmisc/copydir.c (revision 3060) -@@ -443,6 +443,7 @@ - nchars = readlink (filename, buffer, size); - - if (nchars < 0) { -+ free(buffer); - return NULL; - } - - -Index: lib/shadowmem.c -=================================================================== ---- lib/shadowmem.c (revision 3059) -+++ lib/shadowmem.c (revision 3060) -@@ -52,10 +52,13 @@ - *sp = *spent; - sp->sp_namp = strdup (spent->sp_namp); - if (NULL == sp->sp_namp) { -+ free(sp); - return NULL; - } - sp->sp_pwdp = strdup (spent->sp_pwdp); - if (NULL == sp->sp_pwdp) { -+ free(sp->sp_namp); -+ free(sp); - return NULL; - } - -Index: lib/groupmem.c -=================================================================== ---- lib/groupmem.c (revision 3059) -+++ lib/groupmem.c (revision 3060) -@@ -51,10 +51,13 @@ - *gr = *grent; - gr->gr_name = strdup (grent->gr_name); - if (NULL == gr->gr_name) { -+ free(gr); - return NULL; - } - gr->gr_passwd = strdup (grent->gr_passwd); - if (NULL == gr->gr_passwd) { -+ free(gr->gr_name); -+ free(gr); - return NULL; - } - -@@ -62,11 +65,21 @@ - - gr->gr_mem = (char **) malloc ((i + 1) * sizeof (char *)); - if (NULL == gr->gr_mem) { -+ free(gr->gr_passwd); -+ free(gr->gr_name); -+ free(gr); - return NULL; - } - for (i = 0; grent->gr_mem[i]; i++) { - gr->gr_mem[i] = strdup (grent->gr_mem[i]); - if (NULL == gr->gr_mem[i]) { -+ int j; -+ for (j=0; j<i; j++) -+ free(gr->gr_mem[j]); -+ free(gr->gr_mem); -+ free(gr->gr_passwd); -+ free(gr->gr_name); -+ free(gr); - return NULL; - } - } -Index: lib/pwmem.c -=================================================================== ---- lib/pwmem.c (revision 3059) -+++ lib/pwmem.c (revision 3060) -@@ -51,22 +51,37 @@ - *pw = *pwent; - pw->pw_name = strdup (pwent->pw_name); - if (NULL == pw->pw_name) { -+ free(pw); - return NULL; - } - pw->pw_passwd = strdup (pwent->pw_passwd); - if (NULL == pw->pw_passwd) { -+ free(pw->pw_name); -+ free(pw); - return NULL; - } - pw->pw_gecos = strdup (pwent->pw_gecos); - if (NULL == pw->pw_gecos) { -+ free(pw->pw_passwd); -+ free(pw->pw_name); -+ free(pw); - return NULL; - } - pw->pw_dir = strdup (pwent->pw_dir); - if (NULL == pw->pw_dir) { -+ free(pw->pw_gecos); -+ free(pw->pw_passwd); -+ free(pw->pw_name); -+ free(pw); - return NULL; - } - pw->pw_shell = strdup (pwent->pw_shell); - if (NULL == pw->pw_shell) { -+ free(pw->pw_dir); -+ free(pw->pw_gecos); -+ free(pw->pw_passwd); -+ free(pw->pw_name); -+ free(pw); - return NULL; - } - diff --git a/source/a/shadow/patches/r3062.diff b/source/a/shadow/patches/r3062.diff deleted file mode 100644 index 00d9ba3af..000000000 --- a/source/a/shadow/patches/r3062.diff +++ /dev/null @@ -1,139 +0,0 @@ -Index: lib/shadowmem.c -=================================================================== ---- lib/shadowmem.c (revision 3061) -+++ lib/shadowmem.c (revision 3062) -@@ -49,8 +49,14 @@ - if (NULL == sp) { - return NULL; - } -- *sp = *spent; -- sp->sp_namp = strdup (spent->sp_namp); -+ sp->sp_lstchg = spent->sp_lstchg; -+ sp->sp_min = spent->sp_min; -+ sp->sp_max = spent->sp_max; -+ sp->sp_warn = spent->sp_warn; -+ sp->sp_inact = spent->sp_inact; -+ sp->sp_expire = spent->sp_expire; -+ sp->sp_flag = spent->sp_flag; -+ sp->sp_namp = strdup (spent->sp_namp); - if (NULL == sp->sp_namp) { - free(sp); - return NULL; -@@ -68,8 +74,10 @@ - void spw_free (/*@out@*/ /*@only@*/struct spwd *spent) - { - free (spent->sp_namp); -- memzero (spent->sp_pwdp, strlen (spent->sp_pwdp)); -- free (spent->sp_pwdp); -+ if (NULL != spent->sp_pwdp) { -+ memzero (spent->sp_pwdp, strlen (spent->sp_pwdp)); -+ free (spent->sp_pwdp); -+ } - free (spent); - } - -Index: lib/groupmem.c -=================================================================== ---- lib/groupmem.c (revision 3061) -+++ lib/groupmem.c (revision 3062) -@@ -48,7 +48,7 @@ - if (NULL == gr) { - return NULL; - } -- *gr = *grent; -+ gr->gr_gid = grent->gr_gid; - gr->gr_name = strdup (grent->gr_name); - if (NULL == gr->gr_name) { - free(gr); -@@ -90,13 +90,18 @@ - - void gr_free (/*@out@*/ /*@only@*/struct group *grent) - { -+ size_t i; - free (grent->gr_name); -- memzero (grent->gr_passwd, strlen (grent->gr_passwd)); -- free (grent->gr_passwd); -- while (*(grent->gr_mem)) { -- free (*(grent->gr_mem)); -- grent->gr_mem++; -+ if (NULL != grent->gr_passwd) { -+ memzero (grent->gr_passwd, strlen (grent->gr_passwd)); -+ free (grent->gr_passwd); - } -+ if (NULL != grent->gr_mem) { -+ for (i = 0; NULL != grent->gr_mem[i]; i++) { -+ free (grent->gr_mem[i]); -+ } -+ free (grent->gr_mem); -+ } - free (grent); - } - -Index: lib/sgroupio.c -=================================================================== ---- lib/sgroupio.c (revision 3061) -+++ lib/sgroupio.c (revision 3062) -@@ -51,7 +51,6 @@ - if (NULL == sg) { - return NULL; - } -- *sg = *sgent; - sg->sg_name = strdup (sgent->sg_name); - if (NULL == sg->sg_name) { - free (sg); -@@ -137,17 +136,20 @@ - - void sgr_free (/*@out@*/ /*@only@*/struct sgrp *sgent) - { -+ size_t i; - free (sgent->sg_name); -- memzero (sgent->sg_passwd, strlen (sgent->sg_passwd)); -- free (sgent->sg_passwd); -- while (NULL != *(sgent->sg_adm)) { -- free (*(sgent->sg_adm)); -- sgent->sg_adm++; -+ if (NULL != sgent->sg_passwd) { -+ memzero (sgent->sg_passwd, strlen (sgent->sg_passwd)); -+ free (sgent->sg_passwd); - } -- while (NULL != *(sgent->sg_mem)) { -- free (*(sgent->sg_mem)); -- sgent->sg_mem++; -+ for (i = 0; NULL != sgent->sg_adm[i]; i++) { -+ free (sgent->sg_adm[i]); - } -+ free (sgent->sg_adm); -+ for (i = 0; NULL != sgent->sg_mem[i]; i++) { -+ free (sgent->sg_mem[i]); -+ } -+ free (sgent->sg_mem); - free (sgent); - } - -Index: lib/pwmem.c -=================================================================== ---- lib/pwmem.c (revision 3061) -+++ lib/pwmem.c (revision 3062) -@@ -48,7 +48,8 @@ - if (NULL == pw) { - return NULL; - } -- *pw = *pwent; -+ pw->pw_uid = pwent->pw_uid; -+ pw->pw_gid = pwent->pw_gid; - pw->pw_name = strdup (pwent->pw_name); - if (NULL == pw->pw_name) { - free(pw); -@@ -91,8 +92,10 @@ - void pw_free (/*@out@*/ /*@only@*/struct passwd *pwent) - { - free (pwent->pw_name); -- memzero (pwent->pw_passwd, strlen (pwent->pw_passwd)); -- free (pwent->pw_passwd); -+ if (pwent->pw_passwd) { -+ memzero (pwent->pw_passwd, strlen (pwent->pw_passwd)); -+ free (pwent->pw_passwd); -+ } - free (pwent->pw_gecos); - free (pwent->pw_dir); - free (pwent->pw_shell); diff --git a/source/a/shadow/patches/r3090.diff b/source/a/shadow/patches/r3090.diff deleted file mode 100644 index 46057673e..000000000 --- a/source/a/shadow/patches/r3090.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- libmisc/env.c.orig 2011-02-13 11:58:11.000000000 -0600 -+++ libmisc/env.c 2012-08-14 10:38:25.304917619 -0500 -@@ -251,7 +251,7 @@ - if (strncmp (*cur, *bad, strlen (*bad)) != 0) { - continue; - } -- if (strchr (*cur, '/') != NULL) { -+ if (strchr (*cur, '/') == NULL) { - continue; /* OK */ - } - for (move = cur; NULL != *move; move++) { diff --git a/source/a/shadow/patches/r3096.diff b/source/a/shadow/patches/r3096.diff deleted file mode 100644 index 0e77ce6fe..000000000 --- a/source/a/shadow/patches/r3096.diff +++ /dev/null @@ -1,27 +0,0 @@ - -* lib/gshadow.c: Fix parsing of gshadow entries. - -Index: lib/gshadow.c -=================================================================== ---- lib/gshadow.c (revision 3095) -+++ lib/gshadow.c (revision 3096) -@@ -222,6 +222,7 @@ - if (NULL == buf) { - return NULL; - } -+ buflen = BUFSIZ; - } - - if (NULL == fp) { -@@ -229,9 +230,9 @@ - } - - #ifdef USE_NIS -- while (fgetsx (buf, (int) sizeof buf, fp) == buf) -+ while (fgetsx (buf, (int) buflen, fp) == buf) - #else -- if (fgetsx (buf, (int) sizeof buf, fp) == buf) -+ if (fgetsx (buf, (int) buflen, fp) == buf) - #endif - { - while ( ((cp = strrchr (buf, '\n')) == NULL) diff --git a/source/a/shadow/patches/r3160.diff b/source/a/shadow/patches/r3160.diff deleted file mode 100644 index 5aabbaa9e..000000000 --- a/source/a/shadow/patches/r3160.diff +++ /dev/null @@ -1,239 +0,0 @@ -Index: libmisc/limits.c -=================================================================== ---- libmisc/limits.c (revision 3159) -+++ libmisc/limits.c (revision 3160) -@@ -33,6 +33,7 @@ - /* - * Separated from setup.c. --marekm - * Resource limits thanks to Cristian Gafton. -+ * Enhancements of resource limit code by Thomas Orgis <thomas@orgis.org> ("thor"). - */ - - #include <config.h> -@@ -44,6 +45,7 @@ - #include <sys/types.h> - #include <sys/stat.h> - #include <stdio.h> -+#include <ctype.h> - #include "prototypes.h" - #include "defines.h" - #include <pwd.h> -@@ -69,17 +71,37 @@ - unsigned int multiplier) - { - struct rlimit rlim; -- long limit; -+ rlim_t limit; - -- if (getlong (value, &limit) == 0) { -- return 0; -+ /* The "-" is special, not belonging to a strange negative limit. -+ It is infinity, in a controlled way. --thor */ -+ if(value[0] == '-') { -+ limit = RLIM_INFINITY; - } -- limit *= multiplier; -- if (limit != (rlim_t) limit) { -- return 0; -+ else { -+ /* We cannot use getlong here because it fails when there -+ is more to the value than just this number! -+ Also, we are limited to base 10 here (hex numbers will not -+ work with the limit string parser as is anyway) --thor */ -+ char *endptr; -+ long longlimit = strtol(value, &endptr, 10); -+ if ((0 == longlimit) && (value == endptr)) { -+ /* No argument at all. No-op. -+ We could instead throw an error, though. --thor */ -+ return 0; -+ } -+ longlimit *= multiplier; -+ limit = (rlim_t)longlimit; -+ if(longlimit != limit) -+ { -+ /* Again, silent error handling... I left it that way. -+ Wouldn't screaming make more sense? --thor */ -+ return 0; -+ } - } -- rlim.rlim_cur = (rlim_t) limit; -- rlim.rlim_max = (rlim_t) limit; -+ -+ rlim.rlim_cur = limit; -+ rlim.rlim_max = limit; - if (setrlimit (resource, &rlim) != 0) { - return LOGIN_ERROR_RLIMIT; - } -@@ -199,6 +221,9 @@ - * [Ii]: i = RLIMIT_NICE max nice value (0..39 translates to 20..-19) - * [Oo]: o = RLIMIT_RTPRIO max real time priority (linux/sched.h 0..MAX_RT_PRIO) - * -+ * Remember to extend the "no-limits" string below when adding a new limit... -+ * --thor -+ * - * Return value: - * 0 = okay, of course - * LOGIN_ERROR_RLIMIT = error setting some RLIMIT -@@ -214,7 +239,20 @@ - bool reported = false; - - pp = buf; -+ /* Skip leading whitespace. --thor */ -+ while(*pp == ' ' || *pp == '\t') ++pp; - -+ /* The special limit string "-" results in no limit for all known limits. -+ We achieve that by parsing a full limit string, parts of it being ignored -+ if a limit type is not known to the system. -+ Though, there will be complaining for unknown limit types. --thor */ -+ if(strcmp(pp, "-") == 0) { -+ /* Remember to extend this, too, when adding new limits! -+ Oh... but "unlimited" does not make sense for umask, or does it? -+ --thor */ -+ pp = "A- C- D- F- M- N- R- S- T- P- I- O-"; -+ } -+ - while ('\0' != *pp) { - switch (*pp++) { - #ifdef RLIMIT_AS -@@ -316,6 +354,10 @@ - break; - default: - /* Only report invalid strings once */ -+ /* Note: A string can be invalid just because a specific (theoretically -+ valid) setting is not supported by this build. -+ It is just a warning in syslog anyway. The line is still processed -+ --thor */ - if (!reported) { - SYSLOG ((LOG_WARN, - "Invalid limit string: '%s'", -@@ -324,13 +366,51 @@ - retval |= LOGIN_ERROR_RLIMIT; - } - } -+ /* After parsing one limit setting (or just complaining about it), -+ one still needs to skip its argument to prevent a bogus warning on -+ trying to parse that as limit specification. -+ So, let's skip all digits, "-" and our limited set of whitespace. -+ --thor */ -+ while(isdigit(*pp) || *pp == '-' || *pp == ' ' || *pp == '\t') { -+ ++pp; -+ } - } - return retval; - } - -+/* Check if user uname is in the group gname. -+ * Can I be sure that gr_mem contains no UID as string? -+ * Returns true when user is in the group, false when not. -+ * Any error is treated as false. --thor -+ */ -+static bool user_in_group (const char *uname, const char *gname) -+{ -+ struct group *groupdata; -+ char **member; -+ if(uname == NULL || gname == NULL){ -+ return false; -+ } -+ /* We are not claiming to be re-entrant! -+ * In case of paranoia or a multithreaded login program, -+ * one needs to add some mess for getgrnam_r. */ -+ groupdata = getgrnam(gname); -+ if(groupdata == NULL) { -+ SYSLOG ((LOG_WARN, "Nonexisting group `%s' in limits file.", gname)); -+ return false; -+ } -+ /* Now look for our user in the list of members. */ -+ member = groupdata->gr_mem; -+ while(*member != NULL) { -+ if(strcmp(*member, uname) == 0) { -+ return true; -+ } -+ ++member; -+ } -+ return false; -+} -+ - static int setup_user_limits (const char *uname) - { -- /* TODO: allow and use @group syntax --cristiang */ - FILE *fil; - char buf[1024]; - char name[1024]; -@@ -352,7 +432,7 @@ - } - /* The limits file have the following format: - * - '#' (comment) chars only as first chars on a line; -- * - username must start on first column -+ * - username must start on first column (or *, or @group --thor) - * A better (smarter) checking should be done --cristiang */ - while (fgets (buf, 1024, fil) != NULL) { - if (('#' == buf[0]) || ('\n' == buf[0])) { -@@ -367,6 +447,13 @@ - * Imposing a limit should be done with care, so a wrong - * entry means no care anyway :-). A '-' as a limits - * strings means no limits --cristiang */ -+ /* In addition to the handling of * as name which was alrady present, -+ I added handling of the @group syntax. -+ To clarify: The first entry with matching user name rules, -+ everything after it is ignored. If there is no user entry, -+ the last encountered entry for a matching group rules. -+ If there is no matching group entry, the default limits rule. -+ --thor. */ - if (sscanf (buf, "%s%[ACDFMNRSTULPIOacdfmnrstulpio0-9 \t-]", - name, tempbuf) == 2) { - if (strcmp (name, uname) == 0) { -@@ -374,6 +461,12 @@ - break; - } else if (strcmp (name, "*") == 0) { - strcpy (deflimits, tempbuf); -+ } else if (name[0] == '@') { -+ /* If the user is in the group, the group limits apply unless -+ later a line for the specific user is found. --thor */ -+ if(user_in_group(uname, name+1)) { -+ strcpy (limits, tempbuf); -+ } - } - } - } -Index: man/limits.5.xml -=================================================================== ---- man/limits.5.xml (revision 3159) -+++ man/limits.5.xml (revision 3160) -@@ -64,7 +64,13 @@ - <emphasis remap='I'>user LIMITS_STRING</emphasis> - </para> - -+ <para>or in the form:</para> -+ - <para> -+ <emphasis remap='I'>@group LIMITS_STRING</emphasis> -+ </para> -+ -+ <para> - The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated - list of resource limits. Each limit consists of a letter identifier - followed by a numerical limit. -@@ -125,11 +131,23 @@ - </para> - - <para> -+ The limits specified in the form "<replaceable>@group</replaceable>" -+ apply to the members of the specified -+ <replaceable>group</replaceable>. -+ </para> -+ -+ <para> - To completely disable limits for a user, a single dash - "<emphasis>-</emphasis>" will do. - </para> - - <para> -+ To disable a limit for a user, a single dash -+ "<replaceable>-</replaceable>" can be used instead of the numerical -+ value for this limit. -+ </para> -+ -+ <para> - Also, please note that all limit settings are set PER LOGIN. They are - not global, nor are they permanent. Perhaps global limits will come, - but for now this will have to do ;) diff --git a/source/a/shadow/patches/r3194.diff b/source/a/shadow/patches/r3194.diff deleted file mode 100644 index 0eff631bb..000000000 --- a/source/a/shadow/patches/r3194.diff +++ /dev/null @@ -1,15 +0,0 @@ -* src/su.c: shell's name must be -su when a su fakes a login. - -=================================================================== ---- src/su.c (revision 3193) -+++ src/su.c (revision 3194) -@@ -1021,7 +1021,7 @@ - * Use the shell and create an argv - * with the rest of the command line included. - */ -- argv[-1] = shellstr; -+ argv[-1] = cp; - #ifndef USE_PAM - execve_shell (shellstr, &argv[-1], environ); - err = errno; - diff --git a/source/a/shadow/shadow.SlackBuild b/source/a/shadow/shadow.SlackBuild index 41e9353ba..8194930d6 100755 --- a/source/a/shadow/shadow.SlackBuild +++ b/source/a/shadow/shadow.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2005-2012 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2005-2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,7 +22,7 @@ PKGNAM=shadow VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-7} +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -63,8 +63,8 @@ for patch in $CWD/patches/*.diff.gz ; do zcat $patch | patch -p0 --verbose || exit 1 done -# Don't duplicate Russian man page installations: -zcat $CWD/shadow.man.nodups.diff.gz | patch -p1 --verbose || exit 1 +# Patch to handle newer crypt() that may return NULL: +zcat $CWD/shadow.glibc217-crypt.diff.gz | patch -p1 --verbose || exit 1 # Re-run automake because of r3299 patch to man/ru/Makefile.am: # (not used because it doesn't work... above patch does the intended fix) diff --git a/source/a/shadow/shadow.glibc217-crypt.diff b/source/a/shadow/shadow.glibc217-crypt.diff new file mode 100644 index 000000000..e26ca10bb --- /dev/null +++ b/source/a/shadow/shadow.glibc217-crypt.diff @@ -0,0 +1,258 @@ +From a616a72160c17fa193ad6ad95eb2c869633f4fe9 Mon Sep 17 00:00:00 2001 +From: mancha <mancha1@hush.com> +Date: Fri, 4 Oct 2013 11:25:43 +Subject: [PATCH] Improve handling of NULL returns from crypt(). + +Signed-off-by: mancha <mancha1@hush.com> +--- + ChangeLog | 15 +++++++++++++++ + lib/encrypt.c | 7 +++---- + lib/pwauth.c | 7 ++++++- + libmisc/valid.c | 1 + + src/chgpasswd.c | 4 ++++ + src/chpasswd.c | 4 ++++ + src/gpasswd.c | 4 ++++ + src/newgrp.c | 3 ++- + src/newusers.c | 26 +++++++++++++++++++++----- + src/passwd.c | 15 +++++++++++++++ + 10 files changed, 75 insertions(+), 11 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index aab00ae..1416a38 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,18 @@ ++2013-05-06 mancha <mancha1@hush.com> ++ ++ * lib/encrypt.c: crypt() in glibc/eglibc 2.17 now fails if passed ++ a salt that violates specs. On Linux, crypt() also fails with ++ DES/MD5 salts in FIPS140 mode. Rather than exit() on NULL returns ++ we send them back to the caller for appropriate handling. ++ * lib/pwauth.c: Handle NULL return from crypt(). ++ * libmisc/valid.c: Likewise. ++ * src/chgpasswd.c: Likewise. ++ * src/chpasswd.c: Likewise. ++ * src/gpasswd.c: Likewise. ++ * src/newgrp.c: Likewise. ++ * src/newusers.c: Likewise. ++ * src/passwd.c: Likewise. ++ + 2012-05-25 Nicolas François <nicolas.francois@centraliens.net> + + * NEWS: Set release date. +diff --git a/lib/encrypt.c b/lib/encrypt.c +index 7daa8da..49cb691 100644 +--- a/lib/encrypt.c ++++ b/lib/encrypt.c +@@ -49,11 +49,10 @@ + if (!cp) { + /* + * Single Unix Spec: crypt() may return a null pointer, +- * and set errno to indicate an error. The caller doesn't +- * expect us to return NULL, so... ++ * and set errno to indicate an error. In this case return ++ * the NULL so the caller can handle appropriately. + */ +- perror ("crypt"); +- exit (EXIT_FAILURE); ++ return cp; + } + + /* The GNU crypt does not return NULL if the algorithm is not +diff --git a/lib/pwauth.c b/lib/pwauth.c +index 4b26daa..086a72e 100644 +--- a/lib/pwauth.c ++++ b/lib/pwauth.c +@@ -73,6 +73,7 @@ int pw_auth (const char *cipher, + char prompt[1024]; + char *clear = NULL; + const char *cp; ++ const char *encrypted; + int retval; + + #ifdef SKEY +@@ -177,7 +178,11 @@ int pw_auth (const char *cipher, + * the results there as well. + */ + +- retval = strcmp (pw_encrypt (input, cipher), cipher); ++ encrypted = pw_encrypt (input, cipher); ++ if (encrypted!=NULL) ++ retval = strcmp (encrypted, cipher); ++ else ++ retval = -1; + + #ifdef SKEY + /* +diff --git a/libmisc/valid.c b/libmisc/valid.c +index aa0390a..4b85d67 100644 +--- a/libmisc/valid.c ++++ b/libmisc/valid.c +@@ -95,6 +95,7 @@ bool valid (const char *password, const struct passwd *ent) + */ + + if ( (NULL != ent->pw_name) ++ && (NULL != encrypted) + && (strcmp (encrypted, ent->pw_passwd) == 0)) { + return true; + } else { +diff --git a/src/chgpasswd.c b/src/chgpasswd.c +index 0f41d0b..6c42a09 100644 +--- a/src/chgpasswd.c ++++ b/src/chgpasswd.c +@@ -469,6 +469,10 @@ int main (int argc, char **argv) + #endif + cp = pw_encrypt (newpwd, + crypt_make_salt (crypt_method, arg)); ++ if (cp == NULL) { ++ perror ("crypt"); ++ exit (EXIT_FAILURE); ++ } + } + + /* +diff --git a/src/chpasswd.c b/src/chpasswd.c +index 928e2d7..4968b0d 100644 +--- a/src/chpasswd.c ++++ b/src/chpasswd.c +@@ -492,6 +492,10 @@ int main (int argc, char **argv) + #endif + cp = pw_encrypt (newpwd, + crypt_make_salt(crypt_method, arg)); ++ if (cp == NULL) { ++ perror ("crypt"); ++ exit (EXIT_FAILURE); ++ } + } + + /* +diff --git a/src/gpasswd.c b/src/gpasswd.c +index df8d714..0043610 100644 +--- a/src/gpasswd.c ++++ b/src/gpasswd.c +@@ -939,6 +939,10 @@ static void change_passwd (struct group *gr) + } + + cp = pw_encrypt (pass, crypt_make_salt (NULL, NULL)); ++ if (cp==NULL) { ++ perror ("crypt"); ++ exit (EXIT_FAILURE); ++ } + memzero (pass, sizeof pass); + #ifdef SHADOWGRP + if (is_shadowgrp) { +diff --git a/src/newgrp.c b/src/newgrp.c +index 9330c72..6b87761 100644 +--- a/src/newgrp.c ++++ b/src/newgrp.c +@@ -184,7 +184,8 @@ static void check_perms (const struct group *grp, + cpasswd = pw_encrypt (cp, grp->gr_passwd); + strzero (cp); + +- if (grp->gr_passwd[0] == '\0' || ++ if (cpasswd == NULL || ++ grp->gr_passwd[0] == '\0' || + strcmp (cpasswd, grp->gr_passwd) != 0) { + #ifdef WITH_AUDIT + snprintf (audit_buf, sizeof(audit_buf), +diff --git a/src/newusers.c b/src/newusers.c +index 994898e..5f83a6a 100644 +--- a/src/newusers.c ++++ b/src/newusers.c +@@ -387,6 +387,7 @@ static int add_user (const char *name, uid_t uid, gid_t gid) + static void update_passwd (struct passwd *pwd, const char *password) + { + void *crypt_arg = NULL; ++ char *cp; + if (crypt_method != NULL) { + #ifdef USE_SHA_CRYPT + if (sflg) { +@@ -398,9 +399,13 @@ static void update_passwd (struct passwd *pwd, const char *password) + if ((crypt_method != NULL) && (0 == strcmp(crypt_method, "NONE"))) { + pwd->pw_passwd = (char *)password; + } else { +- pwd->pw_passwd = pw_encrypt (password, +- crypt_make_salt (crypt_method, +- crypt_arg)); ++ cp=pw_encrypt (password, crypt_make_salt (crypt_method, ++ crypt_arg)); ++ if (cp == NULL) { ++ perror ("crypt"); ++ exit (EXIT_FAILURE); ++ } ++ pwd->pw_passwd = cp; + } + } + #endif /* !USE_PAM */ +@@ -412,6 +417,7 @@ static int add_passwd (struct passwd *pwd, const char *password) + { + const struct spwd *sp; + struct spwd spent; ++ char *cp; + + #ifndef USE_PAM + void *crypt_arg = NULL; +@@ -448,7 +454,12 @@ static int add_passwd (struct passwd *pwd, const char *password) + } else { + const char *salt = crypt_make_salt (crypt_method, + crypt_arg); +- spent.sp_pwdp = pw_encrypt (password, salt); ++ cp = pw_encrypt (password, salt); ++ if (cp == NULL) { ++ perror ("crypt"); ++ exit (EXIT_FAILURE); ++ } ++ spent.sp_pwdp = cp; + } + spent.sp_lstchg = (long) time ((time_t *) 0) / SCALE; + if (0 == spent.sp_lstchg) { +@@ -492,7 +503,12 @@ static int add_passwd (struct passwd *pwd, const char *password) + spent.sp_pwdp = (char *)password; + } else { + const char *salt = crypt_make_salt (crypt_method, crypt_arg); +- spent.sp_pwdp = pw_encrypt (password, salt); ++ cp = pw_encrypt (password, salt); ++ if (cp == NULL) { ++ perror ("crypt"); ++ exit (EXIT_FAILURE); ++ } ++ spent.sp_pwdp = cp; + } + #else + /* +diff --git a/src/passwd.c b/src/passwd.c +index ac90aa3..ae26666 100644 +--- a/src/passwd.c ++++ b/src/passwd.c +@@ -242,6 +242,17 @@ static int new_password (const struct pa + } + + cipher = pw_encrypt (clear, crypt_passwd); ++ if (cipher == NULL) { ++ strzero (clear); ++ (void) fprintf (stderr, ++ _("Failed to crypt password for %s.\n"), ++ pw->pw_name); ++ SYSLOG ((LOG_INFO, ++ "failed to crypt password for %s", ++ pw->pw_name)); ++ return -1; ++ } ++ + if (strcmp (cipher, crypt_passwd) != 0) { + strzero (clear); + strzero (cipher); +@@ -349,6 +360,10 @@ static int new_password (const struct pa + * Encrypt the password, then wipe the cleartext password. + */ + cp = pw_encrypt (pass, crypt_make_salt (NULL, NULL)); ++ if (cp == NULL) { ++ perror ("crypt"); ++ exit (EXIT_FAILURE); ++ } + memzero (pass, sizeof pass); + + #ifdef HAVE_LIBCRACK_HIST +-- +1.7.11.4 + diff --git a/source/a/shadow/shadow.man.nodups.diff b/source/a/shadow/shadow.man.nodups.diff deleted file mode 100644 index 425321b99..000000000 --- a/source/a/shadow/shadow.man.nodups.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- ./man/ru/Makefile.in.orig 2011-02-15 16:18:21.000000000 -0600 -+++ ./man/ru/Makefile.in 2012-06-26 23:21:34.866292111 -0500 -@@ -228,7 +228,7 @@ - grpunconv.8 gshadow.5 lastlog.8 login.1 login.defs.5 logoutd.8 \ - newgrp.1 newusers.8 nologin.8 passwd.1 passwd.5 pwck.8 \ - pwconv.8 pwunconv.8 sg.1 shadow.3 shadow.5 su.1 suauth.5 \ -- useradd.8 userdel.8 usermod.8 vigr.8 vipw.8 $(am__append_1) -+ useradd.8 userdel.8 usermod.8 vigr.8 vipw.8 - man_nopam = \ - limits.5 \ - login.access.5 \ diff --git a/source/a/sharutils/sharutils.SlackBuild b/source/a/sharutils/sharutils.SlackBuild index 5c1997ca2..cc4b5b136 100755 --- a/source/a/sharutils/sharutils.SlackBuild +++ b/source/a/sharutils/sharutils.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2008, 2009, 2010, 2011, 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,7 +22,7 @@ PKGNAM=sharutils -VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: @@ -55,7 +55,7 @@ mkdir -p $TMP $PKG cd $TMP rm -rf sharutils-$VERSION -tar xvf $CWD/sharutils-$VERSION.tar.?z* || exit 1 +tar xvf $CWD/sharutils-$VERSION.tar.?z || exit 1 cd sharutils-$VERSION || exit 1 chown -R root:root . find . \ diff --git a/source/a/slocate/slocate.SlackBuild b/source/a/slocate/slocate.SlackBuild index def08b8c8..83375a4d4 100755 --- a/source/a/slocate/slocate.SlackBuild +++ b/source/a/slocate/slocate.SlackBuild @@ -65,7 +65,7 @@ chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 2750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ -exec chmod 755 {} \; -o \ - \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; cd src diff --git a/source/a/sysklogd/sysklogd.SlackBuild b/source/a/sysklogd/sysklogd.SlackBuild index a5cd75e26..8ff3de9d2 100755 --- a/source/a/sysklogd/sysklogd.SlackBuild +++ b/source/a/sysklogd/sysklogd.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2005-2010 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2005-2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,7 +22,7 @@ VERSION=1.5 -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} if [ -z "$ARCH" ]; then case "$( uname -m )" in @@ -79,8 +79,9 @@ cat $CWD/config/rc.syslog.new > $PKG/etc/rc.d/rc.syslog.new chmod 0755 $PKG/etc/rc.d/rc.syslog.new mkdir -p $PKG/var/log -for i in cron debug maillog messages secure spooler syslog ; - do touch $PKG/var/log/$i.new ; +for i in cron debug maillog messages secure spooler syslog ; do + touch $PKG/var/log/$i.new + chmod 640 $PKG/var/log/$i.new done find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ diff --git a/source/a/syslinux/syslinux-4.05.tar.sign b/source/a/syslinux/syslinux-4.05.tar.sign deleted file mode 100644 index 892883aee..000000000 --- a/source/a/syslinux/syslinux-4.05.tar.sign +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.11 (GNU/Linux) - -iQIcBAABAgAGBQJO4mUDAAoJEIiuZH1Y96v+Dg8P/1Pn+22CIUHfgPtDse6U1+Wj -A7/c5AdtezK/UQlhCh/Po7mRdCGzm/Tb6pCnHOWvpEFMeRQARGx5ElqDUmH1Y6SW -NGrPxwj40eTdVrA6TE9/Jj1QkKnFZGTTzsSm5njt06cJM1s0kABlyS0MEx++YGyX -hEnO5C6oyfh30KkTsUFLljFev1wz5FdQVHtL4e0//dh5KXgulPCIDEufIdvdIM1o -4RB2vTwpcxm1Fuqd9Th73pD1u4V9mjCwKEazKpmmCkwebn6KAzyUlcKxXMUG+Q4C -mbqRDlNCL8ia9LajJKj00wz0428M3eIT9kVxROYWdZnQGC0gDbcD8/6AAvt06bL+ -ZrlUGl02JASMk2lO9QVp74zTdlnTKQef3V9/SIPk2zLcYuVsKni87ZnEEhDke6vn -DF4S2OySfZjBw7ohou7fkbiw/1uJTYLbh9gXXgEi+GKRkLEmEzrjalRc5I9X+D18 -kEg2rMZS4bpTKTk9IZEsCncyaO8tGrevLiMijoRnqDqzOPGjnYLBDrm+rNNn4cQ9 -biiF19uapF97goGzC315PKHKeMohFWhk3YGIUIwFzzShC0bKAYaZmMWC5Dcj1Udw -XOo0/CL0uRuneS5z4TfN4mh0nVZTTgUeY3n2SbIEpTPGJdT+GGGGg06uq9PpY5WS -Jx4uX40HrNIAw2qaR+fY -=gTaU ------END PGP SIGNATURE----- diff --git a/source/a/syslinux/syslinux-4.06.tar.sign b/source/a/syslinux/syslinux-4.06.tar.sign new file mode 100644 index 000000000..64496074b --- /dev/null +++ b/source/a/syslinux/syslinux-4.06.tar.sign @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.12 (GNU/Linux) + +iQIcBAABAgAGBQJQhnLhAAoJEC84WcCNIz1VmjsP/2hpcAmfvtC3fLqlHXs4z6sa +2Bk5sQryOEdxAiXPzzrt+vgoXHJC/Vc7nOD6Zroj1CZrCkaW69HzeKpCtUlOWv2s +bcj0ZUQQabBnTi3Pe2yDZeMdBfqOr1XE/0SLFqJfBfsmF9xfDVTrHJNKz9M/pPHY +/NKny4jhOV5y6wnBCn+8jE/LZAfORh1C4faVZ1m/kDUJcnLAqvop0hCde4PIIUZc +i9y8i1ZNXjghxtETxfBO7aqUt2rjndFd3kD9e0aGEfIZ/wMeQFlj5wsOjPEZFyBe +rnAA7UVZcaNFc/J15FPlyFKIn8Lel8tvC4FjoX0zWA1/kSKY5AkjHnqzIZudWAHv +ayq9wAAWzJUeBLsCSqruA2OYUdwFkL3kPURGB2rYM0O9LkijIJkqLoxRsnmA+lqd +G78QTrcszsvkxXSn3xVxejtMv6DdckRVeO0ahx7f3PROavdg3QXCy9uG28HVVyop +ABdSGMhgjdPXKhKpMHGzOx0XmUtvba+/4krqVTUeor2GnMe2gkXNh0lOjGoCJTTg +rd56fF0lBauk9wBwBoSx2z8wNzBxVpXeXsMicaB7M2AxhNYSVnDwzoEytsxCX4Ib +QNOJzxvPEqw8DIoKeR2EP8Tw1H/0DhsdMJyQXCgTPMnJjSVqY1OGrSj/p5Z7SWSF +iPKkqqj+N2GgNbbli07o +=5g4G +-----END PGP SIGNATURE----- diff --git a/source/a/syslinux/syslinux.SlackBuild b/source/a/syslinux/syslinux.SlackBuild index e7ec5fbbb..e879b9910 100755 --- a/source/a/syslinux/syslinux.SlackBuild +++ b/source/a/syslinux/syslinux.SlackBuild @@ -22,8 +22,8 @@ PKGNAM=syslinux -VERSION=${VERSION:-4.05} -BUILD=${BUILD:-2} +VERSION=${VERSION:-4.06} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -46,8 +46,6 @@ rm -rf ${PKGNAM}-${VERSION} tar xvf $CWD/${PKGNAM}-$VERSION.tar.xz || exit 1 cd ${PKGNAM}-$VERSION -zcat $CWD/syslinux.altmbr.diff.gz | patch -p1 --verbose || exit 1 - # Make sure ownerships and permissions are sane: chown -R root:root . find . \ diff --git a/source/a/syslinux/syslinux.altmbr.diff b/source/a/syslinux/syslinux.altmbr.diff deleted file mode 100644 index ee2dfbee1..000000000 --- a/source/a/syslinux/syslinux.altmbr.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- ./mbr/altmbr.S.orig 2011-12-09 12:28:17.000000000 -0600 -+++ ./mbr/altmbr.S 2012-08-17 17:10:33.903688084 -0500 -@@ -204,7 +204,7 @@ - 5: - decb (partition) - jz boot -- addw $16, %bx -+ addw $16, %si - loopw 5b - - popw %cx /* %cx <- 4 */ diff --git a/source/a/sysvinit-scripts/scripts/rc.6 b/source/a/sysvinit-scripts/scripts/rc.6 index 465a0a4a7..8288128c7 100644 --- a/source/a/sysvinit-scripts/scripts/rc.6 +++ b/source/a/sysvinit-scripts/scripts/rc.6 @@ -189,9 +189,9 @@ fi # Carry a random seed between reboots. echo "Saving random seed from /dev/urandom in /etc/random-seed." -# Use the pool size from /proc, or 512 bytes: +# Use the pool size from /proc, or 4096 bits: if [ -r /proc/sys/kernel/random/poolsize ]; then - /bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(cat /proc/sys/kernel/random/poolsize) 2> /dev/null + /bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(expr $(cat /proc/sys/kernel/random/poolsize) / 8) 2> /dev/null else /bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2> /dev/null fi diff --git a/source/a/sysvinit-scripts/scripts/rc.M b/source/a/sysvinit-scripts/scripts/rc.M index 63cb88015..d9b3fed3b 100644 --- a/source/a/sysvinit-scripts/scripts/rc.M +++ b/source/a/sysvinit-scripts/scripts/rc.M @@ -86,7 +86,7 @@ fi # Run rc.udev again. This will start udev if it is not already running # (for example, upon return from runlevel 1), otherwise it will trigger it # to look for device changes and to generate persistent rules if needed. -if grep -wq sysfs /proc/mounts && grep -q tmpfs /proc/filesystems ; then +if grep -wq sysfs /proc/mounts && grep -q devtmpfs /proc/filesystems ; then if ! grep -wq nohotplug /proc/cmdline ; then if [ -x /etc/rc.d/rc.udev ]; then /bin/sh /etc/rc.d/rc.udev start @@ -124,6 +124,7 @@ fi # Remove stale locks and junk files (must be done after mount -a!) /bin/rm -f /var/lock/* /var/spool/uucp/LCK..* /tmp/.X*lock /tmp/core /core 2> /dev/null +/bin/rm -rf /var/spool/cron/cron.?????? 2> /dev/null # Remove stale hunt sockets so the game can start. if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then @@ -206,6 +207,9 @@ fi if [ -x /usr/bin/update-pango-querymodules ]; then /usr/bin/update-pango-querymodules --verbose fi +if [ -x /usr/bin/glib-compile-schemas ]; then + /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas >/dev/null 2>&1 +fi # Start dnsmasq, a simple DHCP/DNS server: if [ -x /etc/rc.d/rc.dnsmasq ]; then @@ -239,16 +243,6 @@ fi # /usr/sbin/smartd #fi -# If we're using udev, make /dev/cdrom and any other optical drive symlinks -# if some udev rule hasn't made them already: -if grep -wq sysfs /proc/mounts && grep -q tmpfs /proc/filesystems; then - if ! grep -wq nohotplug /proc/cmdline ; then - if [ -x /lib/udev/rc.optical-symlinks -a -x /etc/rc.d/rc.udev ]; then - /bin/sh /lib/udev/rc.optical-symlinks - fi - fi -fi - # Monitor the UPS with genpowerd. # To use this, uncomment this section and edit your settings in # /etc/genpowerd.conf (serial device, UPS type, etc). For more information, diff --git a/source/a/sysvinit-scripts/scripts/rc.S b/source/a/sysvinit-scripts/scripts/rc.S index 97ff7be4c..7b152e90e 100644 --- a/source/a/sysvinit-scripts/scripts/rc.S +++ b/source/a/sysvinit-scripts/scripts/rc.S @@ -40,7 +40,7 @@ fi # all of them), and make any additional device nodes that you need in the # /dev directory. Even USB and IEEE1394 devices will need to have the # modules loaded by hand if udev is not used. So use it. :-) -if grep -wq sysfs /proc/mounts && grep -q tmpfs /proc/filesystems ; then +if grep -wq sysfs /proc/mounts && grep -q devtmpfs /proc/filesystems ; then if ! grep -wq nohotplug /proc/cmdline ; then if [ -x /etc/rc.d/rc.udev ]; then /bin/sh /etc/rc.d/rc.udev start @@ -51,7 +51,22 @@ fi # Mount Control Groups filesystem interface: if grep -wq cgroup /proc/filesystems ; then if [ -d /sys/fs/cgroup ]; then - mount -t cgroup cgroup /sys/fs/cgroup + # See linux-*/Documentation/cgroups/cgroups.txt (section 1.6) + # Check if we have some tools to autodetect the available cgroup controllers + if [ -x /usr/bin/lssubsys -a -x /usr/bin/tr -a -x /usr/bin/sed ]; then + # Mount a tmpfs as the cgroup filesystem root + mount -t tmpfs -o mode=0755 cgroup_root /sys/fs/cgroup + # Autodetect available controllers and mount them in subfolders + controllers="$(lssubsys -a 2>/dev/null | tr '\n' ' ' | sed s/.$//)" + for i in $controllers; do + mkdir /sys/fs/cgroup/$i + mount -t cgroup -o $i $i /sys/fs/cgroup/$i + done + unset i controllers + else + # We can't use autodetection so fall back mounting them all together + mount -t cgroup cgroup /sys/fs/cgroup + fi else mkdir -p /dev/cgroup mount -t cgroup cgroup /dev/cgroup @@ -63,6 +78,8 @@ fi # /etc/lvm/backup/ (LVM2). This is created by /sbin/vgscan, so to # use LVM you must run /sbin/vgscan yourself the first time (and # create some VGs and LVs). +# Create LVM lock/run directories: +mkdir -p -m 0700 /run/lvm /run/lock /run/lock/lvm if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then echo "Initializing LVM (Logical Volume Manager):" # Check for device-mapper support. @@ -385,9 +402,9 @@ if [ -f /etc/random-seed ]; then echo "Using /etc/random-seed to initialize /dev/urandom." cat /etc/random-seed > /dev/urandom fi -# Use the pool size from /proc, or 512 bytes: +# Use the pool size from /proc, or 4096 bits: if [ -r /proc/sys/kernel/random/poolsize ]; then - dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(cat /proc/sys/kernel/random/poolsize) 2> /dev/null + dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(expr $(cat /proc/sys/kernel/random/poolsize) / 8) 2> /dev/null else dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2> /dev/null fi diff --git a/source/a/sysvinit-scripts/sysvinit-scripts.SlackBuild b/source/a/sysvinit-scripts/sysvinit-scripts.SlackBuild index cbc120304..d59bbf4a1 100755 --- a/source/a/sysvinit-scripts/sysvinit-scripts.SlackBuild +++ b/source/a/sysvinit-scripts/sysvinit-scripts.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2005-2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2005-2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -23,7 +23,7 @@ VERSION=${VERSION:-2.0} ARCH=noarch -BUILD=${BUILD:-13} +BUILD=${BUILD:-17} CWD=$(pwd) TMP=${TMP:-/tmp} diff --git a/source/a/sysvinit/sysvinit.SlackBuild b/source/a/sysvinit/sysvinit.SlackBuild index 2a9459c2d..bb1f8ee6e 100755 --- a/source/a/sysvinit/sysvinit.SlackBuild +++ b/source/a/sysvinit/sysvinit.SlackBuild @@ -22,7 +22,7 @@ VERSION=${VERSION:-2.88dsf} -BUILD=${BUILD:-2} +BUILD=${BUILD:-3} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -70,7 +70,7 @@ for program in bootlogd halt init killall5 shutdown runlevel ; do chown root:root $PKG/sbin/$program done mkdir -p $PKG/usr/bin -for program in last mountpoint ; do +for program in last ; do strip --strip-unneeded $program cat $program > $PKG/usr/bin/$program chmod 755 $PKG/usr/bin/$program @@ -91,7 +91,7 @@ cp initscript.sample $PKG/sbin/initscript.sample cd ../man mkdir -p $PKG/usr/man/man{1,5,8} -for page in last.1 mountpoint.1 ; do +for page in last.1 ; do cat $page | gzip -9c > $PKG/usr/man/man1/$page.gz done for page in inittab.5 initscript.5 ; do diff --git a/source/a/tcsh/tcsh-6.18.01-crypt.diff b/source/a/tcsh/tcsh-6.18.01-crypt.diff new file mode 100644 index 000000000..db7306e2b --- /dev/null +++ b/source/a/tcsh/tcsh-6.18.01-crypt.diff @@ -0,0 +1,11 @@ +--- tc.func.c.orig 2013-05-16 ++++ tc.func.c 2013-05-16 +@@ -733,7 +733,7 @@ auto_lock(void) + pp = xgetpass("Password:"); + + crpp = XCRYPT(pw, pp, srpp); +- if ((strcmp(crpp, srpp) == 0) ++ if ((crpp && (strcmp(crpp, srpp) == 0)) + #ifdef AFS + || (ka_UserAuthenticateGeneral(KA_USERAUTH_VERSION, + afsname, /* name */ diff --git a/source/a/tcsh/tcsh.SlackBuild b/source/a/tcsh/tcsh.SlackBuild index c8134a80c..44e398c0a 100755 --- a/source/a/tcsh/tcsh.SlackBuild +++ b/source/a/tcsh/tcsh.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2012 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2008, 2009, 2010, 2012, 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,7 +22,7 @@ VERSION=6.18.01 -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -53,6 +53,8 @@ rm -rf tcsh-$VERSION tar xvf $CWD/tcsh-$VERSION.tar.?z* || exit 1 cd tcsh-$VERSION +zcat $CWD/tcsh-6.18.01-crypt.diff.gz | patch -p0 --verbose || exit 1 + # The LS_COLORS variable shared by tcsh has new options in recent # versions of coreutils that cause tcsh to exit, so disable the # built-in color ls: diff --git a/source/a/udev/60-cdrom_id.rules.diff b/source/a/udev/60-cdrom_id.rules.diff new file mode 100644 index 000000000..6ac5e2275 --- /dev/null +++ b/source/a/udev/60-cdrom_id.rules.diff @@ -0,0 +1,28 @@ +--- ./src/cdrom_id/60-cdrom_id.rules.orig 2012-01-30 12:02:56.526251552 -0600 ++++ ./src/cdrom_id/60-cdrom_id.rules 2013-01-17 21:11:20.821006629 -0600 +@@ -15,6 +15,24 @@ + # enable the receiving of media eject button events + IMPORT{program}="cdrom_id --lock-media $devnode" + +-KERNEL=="sr0", SYMLINK+="cdrom", OPTIONS+="link_priority=-100" ++# create default links to the first detected device ++KERNEL=="sr0", ENV{ID_CDROM}=="1", SYMLINK+="cdrom", OPTIONS+="link_priority=-100" ++KERNEL=="sr0", ENV{ID_CDROM_CD_R}=="1", SYMLINK+="cdr", OPTIONS+="link_priority=-100" ++KERNEL=="sr0", ENV{ID_CDROM_CD_R}=="1", SYMLINK+="cdwriter", OPTIONS+="link_priority=-100" ++KERNEL=="sr0", ENV{ID_CDROM_CD_RW}=="1", SYMLINK+="cdrw", OPTIONS+="link_priority=-100" ++KERNEL=="sr0", ENV{ID_CDROM_DVD}=="1", SYMLINK+="dvd", OPTIONS+="link_priority=-100" ++KERNEL=="sr0", ENV{ID_CDROM_DVD_R}=="1", SYMLINK+="dvdr", OPTIONS+="link_priority=-100" ++KERNEL=="sr0", ENV{ID_CDROM_DVD_R}=="1", SYMLINK+="dvdwriter", OPTIONS+="link_priority=-100" ++KERNEL=="sr0", ENV{ID_CDROM_DVD_RW}=="1", SYMLINK+="dvdrw", OPTIONS+="link_priority=-100" ++ ++# create all other device links ++KERNEL=="sr[0-9]*", ENV{ID_CDROM}=="1", SYMLINK+="cdrom%n", OPTIONS+="link_priority=-100" ++KERNEL=="sr[0-9]*", ENV{ID_CDROM_CD_R}=="1", SYMLINK+="cdr%n", OPTIONS+="link_priority=-100" ++KERNEL=="sr[0-9]*", ENV{ID_CDROM_CD_R}=="1", SYMLINK+="cdwriter%n", OPTIONS+="link_priority=-100" ++KERNEL=="sr[0-9]*", ENV{ID_CDROM_CD_RW}=="1", SYMLINK+="cdrw%n", OPTIONS+="link_priority=-100" ++KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD}=="1", SYMLINK+="dvd%n", OPTIONS+="link_priority=-100" ++KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD_R}=="1", SYMLINK+="dvdr%n", OPTIONS+="link_priority=-100" ++KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD_R}=="1", SYMLINK+="dvdwriter%n", OPTIONS+="link_priority=-100" ++KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD_RW}=="1", SYMLINK+="dvdrw%n", OPTIONS+="link_priority=-100" + + LABEL="cdrom_end" diff --git a/source/a/udev/config/rc.d/rc.udev.new b/source/a/udev/config/rc.d/rc.udev.new index 2bbd9819c..f000e938e 100644 --- a/source/a/udev/config/rc.d/rc.udev.new +++ b/source/a/udev/config/rc.d/rc.udev.new @@ -112,7 +112,7 @@ case "$1" in /sbin/udevadm trigger --type=devices --action=add else # trigger changes for already running udevd # If the persistent rules files do not exist, trigger an add event: - if [ ! -r /etc/udev/rules.d/70-persistent-net.rules ]; then + if [ ! -r /etc/udev/rules.d/70-persistent-net.rules -o ! -r /etc/udev/rules.d/70-persistent-cd.rules ]; then # Test that we can actually write to the directory first: if touch /etc/udev/rules.d/testfile 2> /dev/null ; then rm -f /etc/udev/rules.d/testfile @@ -120,6 +120,13 @@ case "$1" in echo "Triggering udev to write persistent rules to /etc/udev/rules.d/" /sbin/udevadm trigger --type=devices --action=add sleep 3 + # Create the files if they don't exist at this point. + # If a machine does not have a network device or an optical + # device, we don't want to waste time trying to generate + # rules at every boot. + # To force another attempt, delete the file(s). + touch /etc/udev/rules.d/70-persistent-net.rules + touch /etc/udev/rules.d/70-persistent-cd.rules fi fi # Since udevd is running, most of the time we only need change events: diff --git a/source/a/udev/rule_generator.diff b/source/a/udev/rule_generator.diff index 25c72b845..ff2acf808 100644 --- a/source/a/udev/rule_generator.diff +++ b/source/a/udev/rule_generator.diff @@ -1,17 +1,62 @@ -diff -Nur udev-182.orig/src/rule_generator/write_cd_rules udev-182/src/rule_generator/write_cd_rules ---- udev-182.orig/src/rule_generator/write_cd_rules 2012-03-24 22:47:53.138527732 -0500 -+++ udev-182/src/rule_generator/write_cd_rules 2012-03-24 22:59:42.595889830 -0500 +--- ./src/rule_generator/write_cd_rules.orig 2012-01-28 18:15:46.958827013 -0600 ++++ ./src/rule_generator/write_cd_rules 2013-01-17 22:58:27.294859303 -0600 @@ -3,7 +3,8 @@ # This script is run if an optical drive lacks a rule for persistent naming. # # It adds symlinks for optical drives based on the device class determined -# by cdrom_id and used ID_PATH to identify the device. -+# by cdrom_id and uses ID_PATH or ID_SERIAL or ID_MODEL and ID_REVISION to ++# by cdrom_id and uses ID_SERIAL or ID_MODEL and ID_REVISION to +# identify the device. # (C) 2006 Marco d'Itri <md@Linux.IT> # -@@ -105,18 +106,57 @@ +@@ -66,37 +67,16 @@ + exit 1 + fi + +-if [ "$1" ]; then +- METHOD="$1" ++# ID_PATH is gone from the ata subsystem used in recent kernels, so ++# always use the by-id method: ++if [ "$ID_SERIAL" ]; then ++ RULE="ENV{ID_SERIAL}==\"$ID_SERIAL\"" ++elif [ "$ID_MODEL" -a "$ID_REVISION" ]; then ++ RULE="ENV{ID_MODEL}==\"$ID_MODEL\", ENV{ID_REVISION}==\"$ID_REVISION\"" + else +- METHOD='by-path' +-fi +- +-case "$METHOD" in +- by-path) +- if [ -z "$ID_PATH" ]; then +- echo "$DEVPATH not supported by path_id. by-id may work." >&2 +- exit 1 +- fi +- RULE="ENV{ID_PATH}==\"$ID_PATH\"" +- ;; +- +- by-id) +- if [ "$ID_SERIAL" ]; then +- RULE="ENV{ID_SERIAL}==\"$ID_SERIAL\"" +- elif [ "$ID_MODEL" -a "$ID_REVISION" ]; then +- RULE="ENV{ID_MODEL}==\"$ID_MODEL\", ENV{ID_REVISION}==\"$ID_REVISION\"" +- else +- echo "$DEVPATH not supported by ata_id. by-path may work." >&2 +- exit 1 +- fi +- ;; +- +- *) +- echo "Invalid argument (must be either by-path or by-id)." >&2 ++ echo "$DEVPATH not supported by ata_id. Unable to generate persistent rules." >&2 + exit 1 +- ;; +-esac ++fi + + # Prevent concurrent processes from modifying the file at the same time. + lock_rules_file +@@ -105,18 +85,62 @@ choose_rules_file link_num=$(find_next_available 'cdrom[0-9]*') @@ -19,8 +64,9 @@ diff -Nur udev-182.orig/src/rule_generator/write_cd_rules udev-182/src/rule_gene match="SUBSYSTEM==\"block\", ENV{ID_CDROM}==\"?*\", $RULE" - comment="$ID_MODEL ($ID_PATH)" +-comment="$ID_MODEL ($ID_PATH)" - ++comment="$ID_MODEL ($ID_SERIAL)" write_rule "$match" "cdrom$link_num" "$comment" -[ "$ID_CDROM_CD_R" -o "$ID_CDROM_CD_RW" ] && \ - write_rule "$match" "cdrw$link_num" @@ -28,47 +74,52 @@ diff -Nur udev-182.orig/src/rule_generator/write_cd_rules udev-182/src/rule_gene - write_rule "$match" "dvd$link_num" -[ "$ID_CDROM_DVD_R" -o "$ID_CDROM_DVD_RW" -o "$ID_CDROM_DVD_RAM" ] && \ - write_rule "$match" "dvdrw$link_num" -+ if [ "$(find_all_rules 'SYMLINK+=' cdrom)" = "" ]; then ++ if [ "$link_num" = "0" ]; then + write_rule "$match" "cdrom" + fi + + if [ "$ID_CDROM_CD_R" ]; then -+ write_rule "$match" "cdr$link_num" -+ if [ "$(find_all_rules 'SYMLINK+=' cdr)" = "" ]; then ++ write_rule "$match" "cdr$link_num" ++ if [ "$link_num" = "0" ]; then + write_rule "$match" "cdr" + fi + + write_rule "$match" "cdwriter$link_num" -+ if [ "$(find_all_rules 'SYMLINK+=' cdwriter)" = "" ]; then ++ if [ "$link_num" = "0" ]; then + write_rule "$match" "cdwriter" + fi + + if [ "$ID_CDROM_CD_RW" ]; then + write_rule "$match" "cdrw$link_num" -+ if [ "$(find_all_rules 'SYMLINK+=' cdrw)" = "" ]; then ++ if [ "$link_num" = "0" ]; then + write_rule "$match" "cdrw" + fi + fi + -+ if [ "$(find_all_rules 'SYMLINK+=' writer)" = "" ]; then ++ if [ "$link_num" = "0" ]; then + write_rule "$match" "writer" + fi + fi + + if [ "$ID_CDROM_DVD" ]; then + write_rule "$match" "dvd$link_num" -+ if [ "$(find_all_rules 'SYMLINK+=' dvd)" = "" ]; then ++ if [ "$link_num" = "0" ]; then + write_rule "$match" "dvd" + fi + + if [ "$ID_CDROM_DVD_R" -o "$ID_CDROM_DVD_RW" -o "$ID_CDROM_DVD_RAM" ]; then ++ write_rule "$match" "dvdr$link_num" ++ if [ "$link_num" = "0" ]; then ++ write_rule "$match" "dvdr" ++ fi ++ + write_rule "$match" "dvdrw$link_num" -+ if [ "$(find_all_rules 'SYMLINK+=' dvdrw)" = "" ]; then ++ if [ "$link_num" = "0" ]; then + write_rule "$match" "dvdrw" + fi + + write_rule "$match" "dvdwriter$link_num" -+ if [ "$(find_all_rules 'SYMLINK+=' dvdwriter)" = "" ]; then ++ if [ "$link_num" = "0" ]; then + write_rule "$match" "dvdwriter" + fi + fi diff --git a/source/a/udev/udev.SlackBuild b/source/a/udev/udev.SlackBuild index 183c6667e..d39da2629 100755 --- a/source/a/udev/udev.SlackBuild +++ b/source/a/udev/udev.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2006, 2008, 2009, 2010, 2011, 2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006, 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,7 +21,7 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VERSION=${VERSION:-$(echo udev-*.tar.* | cut -d - -f 2 | rev | cut -f 3- -d . | rev)} -BUILD=${BUILD:-5} +BUILD=${BUILD:-7} NUMJOBS=${NUMJOBS:-" -j7 "} @@ -67,10 +67,17 @@ zcat $CWD/fix-42-usb-hid-pm.rules.diff.gz | patch -p1 --verbose || exit 1 # Fixup the rule generator for our use zcat $CWD/rule_generator.diff.gz | patch -p1 --verbose || exit 1 +# Patch 60-cdrom_id.rules to create a full set of symlinks. +# This is needed for a hotplugged optical device since the generated +# rules will not be used until the second time the device is plugged. +zcat $CWD/60-cdrom_id.rules.diff.gz | patch -p1 --verbose || exit 1 + # static libudev is needed for lvm2 # --enable-udev_acl was removed (will be part of future CK release) # --enable-floppy support was also disabled by default in 173 # --enable-rule_generator was disabled by default in 175 + +LDFLAGS="$LDFLAGS -lrt" \ ./configure \ --prefix=/usr \ --with-rootprefix=/ \ diff --git a/source/a/udisks/udisks.SlackBuild b/source/a/udisks/udisks.SlackBuild index 9d12e7837..86a90bdf4 100755 --- a/source/a/udisks/udisks.SlackBuild +++ b/source/a/udisks/udisks.SlackBuild @@ -27,7 +27,7 @@ PKGNAM=udisks VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} NUMJOBS=${NUMJOBS:--j7} diff --git a/source/a/usb_modeswitch/device_reference.txt b/source/a/usb_modeswitch/device_reference.txt index db7ac8c05..1a21efb3b 100644 --- a/source/a/usb_modeswitch/device_reference.txt +++ b/source/a/usb_modeswitch/device_reference.txt @@ -1,7 +1,7 @@ # # Device and Configuration Reference (UTF-8 encoding used) # -# Last modified: 2012-01-20 +# Last modified: 2013-10-16 # # Collection of configurations for usb_modeswitch, a mode switching # tool for controlling flip flop (multiple mode) USB devices @@ -115,7 +115,10 @@ # * SequansMode <0/1> -N # * MobileActionMode <0/1> -A # * QisdaMode <0/1> -B -# * CiscoMode <0/1> -B +# * QuantaMode <0/1> -E +# * PantechMode <0/1> -F +# * BlackberryMode <0/1> -Z +# * CiscoMode <0/1> -L # # # Flags to support devices that need special control messages. @@ -170,11 +173,17 @@ # Mostly useful for non-modem devices. # # -# * WaitBefore <seconds> (no command line parameter) +# * WaitBefore <seconds> (no command line parameter) # # Waiting time before taking any action. Helps with some sensitive setups. # # +# * NoMBIMCheck <0|1> (no command line parameter) +# +# Disable the check for new MBIM standard devices, which is always done +# by default. +# +# # # -> All other entries in config files are just ignored <- @@ -228,7 +237,7 @@ MessageContent="55534243123456780000000000000601000000000000000000000000000000" ######################################################## # Option GlobeTrotter GT MAX 3.6 (aka "T-Mobile Web'n'walk Card Compact II") # -# Contributor: Bernd Holzmüller +# Contributor: Bernd Holzmüller DefaultVendor= 0x05c6 DefaultProduct= 0x1000 @@ -447,7 +456,7 @@ HuaweiMode=1 # # Probably works with DetachStorageOnly too # -# Contributor: Flávio Moringa and others +# Contributor: Flávio Moringa and others DefaultVendor= 0x19d2 DefaultProduct= 0x2000 @@ -945,7 +954,7 @@ Configuration=2 # # Recommended init command: ATE0V1&D2&C1S0=0 # -# Contributor: Jérôme Oufella +# Contributor: Jérôme Oufella DefaultVendor= 0x1004 DefaultProduct= 0x1000 @@ -1504,7 +1513,7 @@ MessageContent="555342431234567824000000800006bc626563240000000000000000000000" ######################################################## # LG HDM-2100 (EVDO Rev.A USB modem) # -# Contributor: Jérôme Oufella +# Contributor: Jérôme Oufella DefaultVendor= 0x1004 DefaultProduct=0x607f @@ -1809,7 +1818,7 @@ ResponseNeeded=1 ######################################################## # Huawei U8110 / U8300 / Joy, Vodafone 845 (Android smartphone) # -# Contributor: David Erosa GarcÃÂa +# Contributor: David Erosa GarcÃÂÂa DefaultVendor= 0x12d1 DefaultProduct=0x1031 @@ -1826,7 +1835,7 @@ NoDriverLoading=1 ######################################################## # Nokia CS-10 # -# Contributor: WacÅ‚aw Sierek +# Contributor: WacÅ‚aw Sierek DefaultVendor= 0x0421 DefaultProduct=0x060c @@ -1868,7 +1877,7 @@ MessageContent="55534243123456780000000000000606f50402527000000000000000000000" ####################################################### # Samsung GT-B3730 # -# Contributor: Per Øyvind Karlsen +# Contributor: Per Øyvind Karlsen DefaultVendor= 0x04e8 DefaultProduct=0x689a @@ -1939,7 +1948,7 @@ NeedResponse=1 ####################################################### # Huawei EC168C (from Zantel) # -# Contributor: Ã…smund Hjulstad +# Contributor: Ã…smund Hjulstad DefaultVendor= 0x12d1 DefaultProduct=0x1446 @@ -2935,7 +2944,7 @@ NeedResponse=1 ######################################################## # ZTE MF652 # -# Contributor: Björn Andreas Höfer +# Contributor: Björn Andreas Höfer DefaultVendor= 0x19d2 DefaultProduct=0x1520 @@ -3260,7 +3269,7 @@ MessageContent="5553424312345678000000000000061b000000020000000000000000000000" ######################################################## # ZTE MF821D # -# Contributor: Thomas Schäfer +# Contributor: Thomas Schäfer DefaultVendor= 0x19d2 DefaultProduct=0x0325 @@ -3306,7 +3315,7 @@ MessageContent="555342431234567800000000000010ff000000000000000000000000000000" ######################################################## # Vodafone K5006Z (MF821) # -# Contributor: Thomas Schäfer +# Contributor: Thomas Schäfer DefaultVendor= 0x19d2 DefaultProduct=0x1017 @@ -3419,3 +3428,573 @@ MessageContent="55534243123456780000000000000011062000000100000000000000000000" ####################################################### +# ZTE MF190J +# +# Contributor: moma + +DefaultVendor= 0x19d2 +DefaultProduct=0x1542 + +TargetVendor= 0x19d2 +TargetProduct= 0x1544 + +MessageContent="5553424312345678000000000000061e000000000000000000000000000000" +MessageContent2="5553424312345679000000000000061b000000020000000000000000000000" + +NeedResponse=1 + + +####################################################### +# Huawei E171 + +DefaultVendor= 0x12d1 +DefaultProduct=0x155b + +TargetVendor= 0x12d1 +TargetProduct= 0x1506 + +MessageContent="55534243123456780000000000000011062000000100000000000000000000" + + +####################################################### +# Vodafone / Huawei K3772 + +DefaultVendor= 0x12d1 +DefaultProduct=0x1526 + +TargetVendor= 0x12d1 +TargetProduct= 0x14cf + +MessageContent="55534243123456780000000000000011062000000100000000000000000000" + + +####################################################### +# Vodafone / Huawei K3773 +# +# Contributor: Allwyn Fernandes + +DefaultVendor= 0x12d1 +DefaultProduct=0x1f11 + +TargetVendor= 0x12d1 +TargetProduct= 0x14bc + +MessageContent="55534243123456780000000000000011062000000100000000000000000000" + + +####################################################### +# Huawei E173u-2, E177 +# +# Contributor: Rob Spanton + +DefaultVendor= 0x12d1 +DefaultProduct=0x14ba + +TargetVendor= 0x12d1 +TargetProduct= 0x14d2 + +MessageContent="55534243123456780000000000000011062000000100000000000000000000" + + +####################################################### +# Option Beemo / Pantech P4200 LTE +# +# Contributor: Thomas Schäfer + +DefaultVendor= 0x106c +DefaultProduct=0x3b14 + +TargetVendor= 0x106c +TargetProduct= 0x3721 + +MessageContent="555342431234567824000000800008ff024445564348470000000000000000" + +# QMI device +NoDriverLoading=1 + + +####################################################### +# Huawei E355s-1 +# +# Contributor: Mihail Zenkov + +DefaultVendor= 0x12d1 +DefaultProduct=0x1f01 + +TargetVendor= 0x12d1 +TargetProduct= 0x14db + +MessageContent="55534243123456780000000000000011062000000100000000000000000000" + + +####################################################### +# Nokia CS-7M-01 +# +# Contributor: Krzysztof Luczak + +DefaultVendor= 0x0421 +DefaultProduct=0x0632 + +TargetVendor= 0x0421 +TargetProduct= 0x0632 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +######################################################### +# LG L-03D LTE/3G +# +# Contributor: Kentaro Kazuhama + +DefaultVendor= 0x1004 +DefaultProduct=0x6327 + +TargetVendor= 0x1004 +TargetProduct= 0x6326 + +MessageContent=555342431234567800000000000005f1010100000000000000000000000000 + +######################################################## +# Franklin Wireless U600 + +DefaultVendor= 0x1fac +DefaultProduct=0x0150 + +TargetVendor= 0x1fac +TargetProduct= 0x0151 + +MessageContent="555342431234567824000000800108df200000000000000000000000000000" + + +####################################################### +# Huawei E353 +# +# Contributor: koisoke + +DefaultVendor= 0x12d1 +DefaultProduct=0x151a + +TargetVendor= 0x12d1 +TargetProduct= 0x14ac + +MessageContent="55534243123456780000000000000011062000000100000000000000000000" + + +####################################################### +# Changhong CH690 + +DefaultVendor= 0x2077 +DefaultProduct=0x1000 + +TargetVendor= 0x2077 +TargetProduct= 0x7001 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +####################################################### +# Alcatel-Lucent T930S +# +# Contributor: areslee + +DefaultVendor= 0x04cc +DefaultProduct=0x225c + +Configuration=2 + + +####################################################### +# Axesstel MU130 +# +# Contributor: Jazb + +DefaultVendor= 0x1726 +DefaultProduct=0xf00e + +TargetVendor= 0x1726 +TargetProduct= 0xa000 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +####################################################### +# Explay Slim +# +# Contributor: vdsdmitry + +DefaultVendor= 0x1c9e +DefaultProduct=0x9e08 + +TargetVendor= 0x1c9e +TargetProduct= 0x9e18 + +SierraMode=1 +NoDriverLoading=1 + + +####################################################### +# Huawei GP02 (E587 Variant) +# +# Contributor: Genmei Mori + +DefaultVendor= 0x12d1 +DefaultProduct=0x1c1b + +TargetVendor= 0x12d1 +TargetProduct= 0x1506 + +MessageContent="55534243123456780000000000000011062000000100000000000000000000" +NoDriverLoading=1 + + +####################################################### +# Huawei U2800 Phone +# +# Contributor: Peter Fedorow + +DefaultVendor= 0x12d1 +DefaultProduct=0x1805 + +TargetClass=0xff + +MessageContent="55534243123456780600000080000601000000000000000000000000000000" + + +################################################### +# KDDI (Huawei) HWD12 LTE +# +# Contributor: nhe + +DefaultVendor= 0x12d1 +DefaultProduct=0x1f03 + +TargetVendor= 0x12d1 +TargetProduct= 0x14db + +#MessageContent="55534243123456780000000000000011062000000100000000000000000000" +MessageContent="55534243123456780000000000000a11062000000000000100000000000000" +NoDriverLoading=1 + + +######################################################## +# D-Link DWM-156 (Variant) +# +# Contributor: Bjørn Mork + +DefaultVendor= 0x2001 +DefaultProduct=0xa706 + +TargetVendor= 0x2001 +TargetProduct= 0x7d01 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +######################################################## +# D-Link DWM-156 (Variant) +# +# Contributor: Bjørn Mork + +DefaultVendor= 0x2001 +DefaultProduct=0xa707 + +TargetVendor= 0x2001 +TargetProduct= 0x7d02 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +######################################################## +# D-Link DWM-156 (Variant) +# +# Contributor: Bjørn Mork + +DefaultVendor= 0x2001 +DefaultProduct=0xa708 + +TargetVendor= 0x2001 +TargetProduct= 0x7d03 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +####################################################### +# Onda TM201 14.4 (TIM Italy) +# +# Contributor: Cristian Astorino + +DefaultVendor= 0x1ee8 +DefaultProduct=0x0063 + +TargetVendor= 0x1ee8 +TargetProduct= 0x0064 + +MessageContent="555342431234567800000000000008FF000000000000030000000000000000" + + +####################################################### +# Onda WM301 +# +# Contributor: Nicolas Carrier + +DefaultVendor= 0x1ee8 +DefaultProduct=0x0068 + +TargetVendor= 0x1ee8 +TargetProduct= 0x0069 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +####################################################### +# Nokia CS-12 +# +# Contributor: John Zouck + +DefaultVendor= 0x0421 +DefaultProduct=0x0618 + +TargetVendor= 0x0421 +TargetProduct= 0x0619 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +####################################################### +# Axesstel Modems (w/ initial idProduct 0x0010) +# +# Contributor: LOM + +DefaultVendor= 0x05c6 +DefaultProduct=0x0010 + +TargetVendor= 0x05c6 +TargetProduct= 0x00a0 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +####################################################### +# Onda MT8205 LTE +# +# Contributor: Vincenzo Ingrosso + +DefaultVendor= 0x19d2 +DefaultProduct=0x0266 + +TargetVendor= 0x19d2 +TargetProduct= 0x0265 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +####################################################### +# Pantech UML290 +# +# Contributor: Davis Ford + +DefaultVendor= 0x106c +DefaultProduct=0x3b11 + +TargetVendor= 0x106c +TargetProduct= 0x3718 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +####################################################### +# Novatel MC996D +# +# Contributor: David Caste + +DefaultVendor= 0x1410 +DefaultProduct=0x5023 + +TargetVendor= 0x1410 +TargetProduct= 0x7030 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +####################################################### +# D-Link DWR-510 +# +# Contributor: Nicolas Carrier + +DefaultVendor= 0x2001 +DefaultProduct=0xa805 + +TargetVendor= 0x2001 +TargetProduct= 0x7e12 + +MessageContent="5553424308407086000000000000061b000000020000000000000000000000" + + +####################################################### +# Mediatek MT6229 +# +# Contributor: Daniel Dongo + +DefaultVendor= 0x2020 +DefaultProduct=0x0002 + +TargetVendor= 0x2020 +TargetProduct= 0x2000 + +MessageContent="555342430820298900000000000003f0010100000000000000000000000000" + + +####################################################### +# ZTE MF196 +# +# Contributor: David Caste + +DefaultVendor= 0x19d2 +DefaultProduct=0x1528 + +TargetVendor= 0x19d2 +TargetProduct= 0x1527 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" +NeedResponse=1 + + +####################################################### +# ZTE MF656A, MF668A, MF669 +# +# Contributor: David Caste + +DefaultVendor= 0x19d2 +DefaultProduct=0x0150 + +TargetVendor= 0x19d2 +TargetProduct= 0x0124 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" +NeedResponse=1 + + +####################################################### +# ZTE MF680 +# +# Contributor: David Caste + +DefaultVendor= 0x19d2 +DefaultProduct=0x1227 + +TargetVendor= 0x19d2 +TargetProduct= 0x1252 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" +NeedResponse=1 + + +####################################################### +# WeTelecom WM-D200 +# +# Contributor: Kirill Roskoliy + +DefaultVendor= 0x22de +DefaultProduct=0x6801 + +TargetClass=0xff + +MessageContent="5553424312345678000000000000061e000000000000000000000000000000" +MessageContent2="5553424312345679000000000000061b000000020000000000000000000000" + + +####################################################### +# Quanta 1K3 LTE +# +# Contributor: Andrey Tikhomirov + +DefaultVendor= 0x0408 +DefaultProduct=0xea25 + +TargetVendor= 0x0408 +TargetProduct= 0xea26 + +QuantaMode=1 + + +####################################################### +# TP-Link MA260 +# +# Contributor: Bjørn Mork + +DefaultVendor= 0x2357 +DefaultProduct=0xf000 + +TargetVendor= 0x2357 +TargetProduct= 0x9000 + +MessageContent="5553424312345678000000000000061b000000020000000000000000000000" + + +####################################################### +# Teracom LW272 +# +# Contributor: Dheeraj Khanna + +DefaultVendor= 0x230d +DefaultProduct=0x0103 + +Configuration=2 + + +####################################################### +# Huawei E3276s-151 and E3251 +# +# Contributor: Nicholas Carrier + +DefaultVendor= 0x12d1 +DefaultProduct=0x156a + +TargetVendor= 0x12d1 +TargetProductList="156b,156c" + +MessageContent="55534243123456780000000000000011062000000100000000000000000000" + + +######################################################## +# Huawei K4305 +# +# Contributor: Dario + +DefaultVendor= 0x12d1 +DefaultProduct=0x1f15 + +TargetVendor= 0x12d1 +TargetProduct= 0x1400 + +MessageContent="55534243123456780000000000000011062000000000000100000000000000" + + +######################################################## +# BlackBerry Q10 and Z10 +# +# Contributor: Daniel Mende + +DefaultVendor= 0x0fca +DefaultProduct=0x8020 + +TargetVendor= 0x0fca +TargetProduct= 0x8012 + +BlackberryMode=1 + + +######################################################## +# Pantech LTE Modem +# +# Contributor: Adam Goode + +DefaultVendor= 0x10a9 +DefaultProduct=0x6080 + +TargetVendor= 0x10a9 +TargetProduct= 0x6085 + +PantechMode=1 + +######################################################## diff --git a/source/a/usb_modeswitch/usb_modeswitch.SlackBuild b/source/a/usb_modeswitch/usb_modeswitch.SlackBuild index e71d68761..ac26ff4d6 100755 --- a/source/a/usb_modeswitch/usb_modeswitch.SlackBuild +++ b/source/a/usb_modeswitch/usb_modeswitch.SlackBuild @@ -2,7 +2,7 @@ # Slackware build script for usb_modeswitch. -# Copyright 2010, 2012 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2010, 2012, 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA # Copyright 2010 David Somero, Athens, TN, USA # All rights reserved. # @@ -24,9 +24,9 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PKGNAM=usb_modeswitch -VERSION=${VERSION:-1.2.4} -DATAVER=${DATAVER:-20120812} -BUILD=${BUILD:-2} +VERSION=${VERSION:-2.0.1} +DATAVER=${DATAVER:-20130807} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then diff --git a/source/a/usbutils/usbutils-007.tar.sign b/source/a/usbutils/usbutils-007.tar.sign new file mode 100644 index 000000000..4c8ea414a --- /dev/null +++ b/source/a/usbutils/usbutils-007.tar.sign @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2.0.19 (GNU/Linux) + +iQIcBAABAgAGBQJRsR1jAAoJEDjbvchgkmk+jFsQAIHKnkijXjdzij6VEBqfq0RO +WrqhtR6EWOwo60/oYIzw0dLynZwBeA4OQ+QGAAA5XSfeSOEPcVRE06bN0Cv9omVj +GYJz5mBguAo6IfRf+rRXd8p9nnC0mS3qTpIA0/T2vSPopImrx2RfbzzpsAeEwTpg +K7qqcdwoApd3qvBCrmPWzSIvTEGnxZPpiy5cBVoZ9YhAx09PinbUGhz7Z3cc/VJZ +nFa+YfCie2P5eJtsv9EXudJs6NhUP02bUHtoDvktDPvQnXOtEqUBF3LsECX16kL3 +nwfWvpyDDRNEhu9jj2QspXHzROO435WTWQB81q0x1Qf14tsGa3SFgGj1mQhweAul +m9t4fo0T+/Kgl1P2kohwa/7ws6WDc1Sy7/sd7cOxDYNQZEH1lH4mja0Qm1ViZ0lR +ydpjHFtcjT/FHSYUOOIdIAg5NXrWhH1moAKduW9byAgM2q68nTGzs93j3uiundZv +knfhfO3WGUlXgLYznyUUTR5xAMLq0zQUV0sNiPLci/jU0dyPMmVhnPsfivK1xN4q +RnpU7cc3/IYYiTdlMz4jOJSMvNF2CU2ebLHEAuelbz9/jte2E+kwc3VAu5bWlSGb +REdcYVgyV+2nA/DU61+wCJC7QIFxC/zHYtQ6vdGIcTndST0fywmtyObuL7kTkmf7 +gDNrUyjKGdFMawPfSAcm +=Ku5j +-----END PGP SIGNATURE----- diff --git a/source/a/usbutils/usbutils.SlackBuild b/source/a/usbutils/usbutils.SlackBuild index 15694392b..0a9380258 100755 --- a/source/a/usbutils/usbutils.SlackBuild +++ b/source/a/usbutils/usbutils.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2011, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is diff --git a/source/a/util-linux/partx.data.type.diff b/source/a/util-linux/partx.data.type.diff new file mode 100644 index 000000000..9811c0bda --- /dev/null +++ b/source/a/util-linux/partx.data.type.diff @@ -0,0 +1,11 @@ +--- ./partx/partx.h.orig 2012-05-25 04:44:58.994195443 -0500 ++++ ./partx/partx.h 2013-08-07 21:06:30.899997659 -0500 +@@ -23,7 +23,7 @@ + } + + static inline int partx_add_partition(int fd, int partno, +- unsigned long start, unsigned long size) ++ long long start, long long size) + { + struct blkpg_ioctl_arg a; + struct blkpg_partition p; diff --git a/source/a/util-linux/util-linux.SlackBuild b/source/a/util-linux/util-linux.SlackBuild index 1fa74c832..b348d83eb 100755 --- a/source/a/util-linux/util-linux.SlackBuild +++ b/source/a/util-linux/util-linux.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011, 2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -23,7 +23,7 @@ # Slackware build script for util-linux VERSION=${VERSION:-$(echo util-linux*.tar.?z* | cut -d - -f 3 | rev | cut -f 3- -d . | rev)} -BUILD=${BUILD:-5} +BUILD=${BUILD:-6} ADJTIMEXVERS=1.29 SETSERIALVERS=2.17 @@ -95,6 +95,10 @@ zcat $CWD/0002-fdisk-don-t-ignore-1MiB-granularity-on-512-byte-sect.patch.gz | p # 20120814 bkw: fix "column --separator <anything>" segfault zcat $CWD/column-fix_long_opts.diff.gz | patch -p1 --verbose || exit 1 +# Fix data type in partx to prevent silently truncating partition sizes and +# offsets to 4GB on 32-bit platforms: +zcat $CWD/partx.data.type.diff.gz | patch -p1 --verbose || exit 1 + # Regenerate, since patch 0001 hits mount/Makefile.am: ./autogen.sh diff --git a/source/a/xz/xz.SlackBuild b/source/a/xz/xz.SlackBuild index 7c60ce6cf..75b4e5f4d 100755 --- a/source/a/xz/xz.SlackBuild +++ b/source/a/xz/xz.SlackBuild @@ -22,7 +22,7 @@ # SUCH DAMAGE. PKGNAM=xz -VERSION=${VERSION:-$(echo $PKGNAM-*.tar.bz2 | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: @@ -72,7 +72,7 @@ mkdir -p $TMP $PKG cd $TMP rm -rf $PKGNAM-$VERSION -tar xvf $CWD/$PKGNAM-$VERSION.tar.bz2 || exit 1 +tar xvf $CWD/$PKGNAM-$VERSION.tar.xz || exit 1 cd $PKGNAM-$VERSION chown -R root:root . find . \ |