home *** CD-ROM | disk | FTP | other *** search
- To: vim-dev@vim.org
- Subject: patch 5.4o.9
- Fcc: outbox
- From: Bram Moolenaar <Bram@moolenaar.net>
- ------------
-
- This patch only applies to the DOS and Windows versions. And then only to the
- installation program.
-
-
- Patch 5.4o.9
- Problem: The DOS install.exe program used the "move" program. That doesn't
- work on Windows NT, where "move" is internal to cmd.exe.
- Solution: Don't use an external program for moving the executables. Use C
- functions to copy the file and delete the original.
- Files: src/dosinst.c
-
-
- *** ../vim-5.4o/src/dosinst.c Sun Jul 11 20:10:44 1999
- --- src/dosinst.c Fri Jul 16 16:06:19 1999
- ***************
- *** 12,23 ****
- --- 12,25 ----
- * Compile with Makefile.bcc or Makefile.djg.
- */
-
- + #include <io.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <string.h>
- #include <direct.h>
- #include <sys/stat.h>
- + #include <fcntl.h>
- #ifdef WIN32
- # include <windows.h>
- #else
- ***************
- *** 32,38 ****
- #define NUL 0
-
- /*
- ! * Return TRUE if the the user types a 'y' or 'Y', FALSE otherwise.
- */
- int
- confirm(void)
- --- 34,50 ----
- #define NUL 0
-
- /*
- ! * EMX doesn't have a global way of making open() use binary I/O.
- ! * Use O_BINARY for all open() calls.
- ! */
- ! #if defined(__EMX__) || defined(__CYGWIN32__)
- ! # define O_EXTRA O_BINARY
- ! #else
- ! # define O_EXTRA 0
- ! #endif
- !
- ! /*
- ! * Return TRUE if the user types a 'y' or 'Y', FALSE otherwise.
- */
- int
- confirm(void)
- ***************
- *** 291,313 ****
- #endif
-
- /*
- ! * Move a file to another directory.
- */
- void
- move_file(char *fname, char *dir)
- {
- struct stat st;
- ! char cmd[1000];
-
- /* if the file doesn't exist, silently skip it */
- if (stat(fname, &st) < 0)
- return;
-
- ! sprintf(cmd, "move %s %s", fname, dir);
- ! system(cmd);
-
- ! if (stat(fname, &st) >= 0)
- printf("ERROR: Moving \"%s\" to \"%s\" failed\n", fname, dir);
- }
-
- /*
- --- 303,366 ----
- #endif
-
- /*
- ! * Move file "fname" to directory "dir".
- ! * We actually copy the file and then delete the original, to avoid depending
- ! * on an external program.
- */
- void
- move_file(char *fname, char *dir)
- {
- struct stat st;
- ! char new_name[256];
- ! #define COPYBUFSIZE 4096
- ! char *buf;
- ! long len;
- ! int fdr, fdw;
- ! #ifndef __MINGW32__
- ! extern int _fmode;
- ! #endif
-
- /* if the file doesn't exist, silently skip it */
- if (stat(fname, &st) < 0)
- return;
-
- ! buf = malloc(COPYBUFSIZE);
- ! if (buf == NULL)
- ! {
- ! printf("ERROR: Out of memory!\n");
- ! return;
- ! }
- !
- ! _fmode = O_BINARY; /* Use binary I/O */
- !
- ! /* make the destination file name: "dir\fname" */
- ! strcpy(new_name, dir);
- ! if (dir[strlen(dir) - 1] != '\\' && dir[strlen(dir) - 1] != '/')
- ! strcat(new_name, "\\");
- ! strcat(new_name, fname);
-
- ! fdr = open(fname, O_RDONLY | O_EXTRA, 0);
- ! if (fdr >= 0)
- ! {
- ! fdw = open(new_name, O_WRONLY|O_CREAT|O_TRUNC|O_EXTRA, 0777);
- ! if (fdw >= 0)
- ! {
- ! /* copy the file. */
- ! while ((len = read(fdr, buf, COPYBUFSIZE)) > 0)
- ! if (write(fdw, buf, len) != len)
- ! break;
- ! close(fdw);
- ! }
- ! close(fdr);
- ! }
- ! if (fdr < 0 || fdw < 0 || len > 0 || len < 0)
- printf("ERROR: Moving \"%s\" to \"%s\" failed\n", fname, dir);
- + else
- + {
- + printf("%s moved to %s\n", fname, new_name);
- + unlink(fname);
- + }
- + free(buf);
- }
-
- /*
- ***************
- *** 422,427 ****
- --- 475,488 ----
- int i;
- char *p;
- int vimdirend;
- +
- + #ifdef DJGPP
- + /*
- + * Use Long File Names by default, if $LFN not set.
- + */
- + if (getenv("LFN") == NULL)
- + putenv("LFN=y");
- + #endif
-
- printf("This program sets up the installation of Vim %s\n\n",
- VIM_VERSION_MEDIUM);
-
- --
- hundred-and-one symptoms of being an internet addict:
- 127. You bring your laptop and cellular phone to church.
-
- --/-/---- Bram Moolenaar ---- Bram@moolenaar.net ---- Bram@vim.org ---\-\--
- \ \ www.vim.org/iccf www.moolenaar.net www.vim.org / /
-