From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19393 invoked from network); 5 Apr 2000 09:10:24 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 5 Apr 2000 09:10:24 -0000 Received: (qmail 15555 invoked by alias); 5 Apr 2000 09:08:58 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 10502 Received: (qmail 15301 invoked from network); 5 Apr 2000 09:08:25 -0000 Date: Wed, 5 Apr 2000 11:08:20 +0200 (MET DST) Message-Id: <200004050908.LAA02509@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: Sven Wischnowsky's message of Tue, 4 Apr 2000 16:43:05 +0200 (MET DST) Subject: Re: PATCH: Re: zrecompile I wrote: > Bart Schaefer wrote: > > > ... > > > > Having thought about it a bit longer now, I have a suggestion: Put *both* > > a .zwc version number *and* $ZSH_VERSION into the header. When the .zwc > > version doesn't match, display the $ZSH_VERSION string in the error output. > > That completely hides the .zwc version from anyone who would be confused > > by it, while avoiding the need to recompile when the shell is upgraded. > > Wouldn't that be rather confusing? I mean: for some reason we have to > change the zwc-version, but the ZSH_VERSION is still the same. The shell > can't load an old zwc file and says: `wrong version (...)' where `...' > is the same as $ZSH_VERSION. > > This would only affect people upgrading their shell between releases, > though... hm. Because of that last one I could convince myself to make this change. So, zwc files now use their magic number as the zwc-file-version to compare. The zsh version is used to report version mismatches. Bye Sven Index: Src/parse.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/parse.c,v retrieving revision 1.3 diff -u -r1.3 parse.c --- Src/parse.c 2000/04/04 14:08:56 1.3 +++ Src/parse.c 2000/04/05 09:05:03 @@ -2197,7 +2197,10 @@ * the version string in a field of 40 characters and the descriptions * for the functions in the dump file. * - * NOTE: this layout has to be kept; everything after it may be changed. + * NOTES: + * - This layout has to be kept; everything after it may be changed. + * - When incompatible changes are made, the FD_MAGIC and FD_OMAGIC + * numbers have to be changed. * * Each description consists of a struct fdhead followed by the name, * aligned to sizeof(wordcode) (i.e. 4 bytes). @@ -2358,11 +2361,17 @@ } if (read(fd, buf, (FD_PRELEN + 1) * sizeof(wordcode)) != ((FD_PRELEN + 1) * sizeof(wordcode)) || - (fdmagic(buf) != FD_MAGIC && fdmagic(buf) != FD_OMAGIC) || - (v = strcmp(ZSH_VERSION, fdversion(buf)))) { - if (err) - zwarnnam(nam, (v ? "invalid zwc file, wrong version: %s" : - "invalid zwc file: %s") , name, 0); + (v = (fdmagic(buf) != FD_MAGIC && fdmagic(buf) != FD_OMAGIC))) { + if (err) { + if (v) { + char msg[80]; + + sprintf(msg, "zwc file has wrong version (zsh-%s): %%s", + fdversion(buf)); + zwarnnam(nam, msg , name, 0); + } else + zwarnnam(nam, "invalid zwc file: %s" , name, 0); + } close(fd); return NULL; } else { -- Sven Wischnowsky wischnow@informatik.hu-berlin.de