Correct long-size bug that resulted in checksum error.

Idea thanks tp Max Ninneman.
This commit is contained in:
Eric S. Raymond 2017-05-22 09:30:51 -04:00
parent f5831dbf39
commit 5286f6b3bd
2 changed files with 8 additions and 8 deletions

12
init.c
View file

@ -647,7 +647,7 @@ static bool quick_init(void) {
init_reading = true;
init_cksum = 1;
quick_io();
if(fread(&K,4,1,f) == 1) init_cksum -= K; else init_cksum = 1;
if(fread(&K,sizeof(long),1,f) == 1) init_cksum -= K; else init_cksum = 1;
fclose(f);
if(init_cksum != 0)printf("Checksum error!\n");
return(init_cksum == 0);
@ -660,7 +660,7 @@ static void quick_save(void) {
init_reading = false;
init_cksum = 1;
quick_io();
fwrite(&init_cksum,4,1,f);
fwrite(&init_cksum,sizeof(long),1,f);
fclose(f);
}
@ -695,13 +695,13 @@ static void quick_io(void) {
}
static void quick_item(W)long *W; {
if(init_reading && fread(W,4,1,f) != 1)return;
if(init_reading && fread(W,sizeof(long),1,f) != 1)return;
init_cksum = MOD(init_cksum*13+(*W),60000000);
if(!init_reading)fwrite(W,4,1,f);
if(!init_reading)fwrite(W,sizeof(long),1,f);
}
static void quick_array(A,N)long *A, N; { long I;
if(init_reading && fread(A,4,N+1,f) != N+1)printf("Read error!\n");
if(init_reading && fread(A,sizeof(long),N+1,f) != N+1)printf("Read error!\n");
for(I=1;I<=N;I++)init_cksum = MOD(init_cksum*13+A[I],60000000);
if(!init_reading && fwrite(A,4,N+1,f)!=N+1)printf("Write error!\n");
if(!init_reading && fwrite(A,sizeof(long),N+1,f)!=N+1)printf("Write error!\n");
}

4
misc.c
View file

@ -1004,8 +1004,8 @@ L20: printf("\nFile name: ");
if(F == NULL) {printf("Can't open file, try again.\n"); goto L20;}
return;
L30: if(IN)IGNORE(fread(ARR,4,250,F));
if(!IN)fwrite(ARR,4,250,F);
L30: if(IN)IGNORE(fread(ARR,sizeof(long),250,F));
if(!IN)fwrite(ARR,sizeof(long),250,F);
return;
}