Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

153 lines
4.0 KiB

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include "msf.h"
#include "assert.h"
const int cbPg = 4096;
#define check(x) if (!(x)) { fprintf(stderr, #x ## " failed (%d)\n", __LINE__); } else
int __cdecl main()
{
MSF* pmsf;
int i;
const int cpg = 3;
char buf[32768];
char buf2[32768];
MSF_EC ec;
CB rgcb[] = { 7, 3000, 4000, 4096, 5000, 11000, 11, 5, 8192, 4096, 8192, 16384, 4096, 4095, 4097, 12000, -1 };
CB cb;
for (int icb = 0; (cb = rgcb[icb]) > 0; icb++) {
for (i = 0; i < cb; i++)
buf[i] = i;
check(pmsf = MSFOpen("jan.msf", 1, &ec));
const SN snMac = 20;
// first write
for (SN sn = 0; sn < snMac; sn++) {
buf[0] = (char)sn;
buf[1] = 2*sn;
check(MSFReplaceStream(pmsf, sn, buf, cb));
check(MSFReadStream(pmsf, sn, buf2, cb));
check(memcmp(buf, buf2, cb) == 0);
CB cbBuf = cb - 1;
check(MSFReadStream2(pmsf, sn, 1, buf2, &cbBuf));
check(memcmp(buf+1, buf2, cb - 1) == 0);
}
check(MSFCommit(pmsf));
check(MSFClose(pmsf));
// first read back
check(pmsf = MSFOpen("jan.msf", 0, &ec));
for (sn = 0; sn < snMac; sn++) {
buf[0] = (char)sn;
buf[1] = 2*sn;
check(MSFReadStream(pmsf, sn, buf2, cb));
check(memcmp(buf, buf2, cb) == 0);
CB cbBuf = cb - 1;
check(MSFReadStream2(pmsf, sn, 1, buf2, &cbBuf));
check(memcmp(buf+1, buf2, cb - 1) == 0);
}
check(MSFClose(pmsf));
// overwrite w/o commit
check(pmsf = MSFOpen("jan.msf", 1, &ec));
for (sn = snMac-1; sn != snNil; sn--) {
buf[0] = 2*sn;
buf[1] = (char)sn;
check(MSFReplaceStream(pmsf, sn, buf, cb));
check(MSFReadStream(pmsf, sn, buf2, cb));
check(memcmp(buf, buf2, cb) == 0);
CB cbBuf = cb - 1;
check(MSFReadStream2(pmsf, sn, 1, buf2, &cbBuf));
check(memcmp(buf+1, buf2, cb - 1) == 0);
}
check(MSFClose(pmsf));
// read back uncommitted changes (previous state)
check(pmsf = MSFOpen("jan.msf", 0, &ec));
for (sn = 0; sn < snMac; sn++) {
buf[0] = (char)sn;
buf[1] = 2*sn;
check(MSFReadStream(pmsf, sn, buf2, cb));
check(memcmp(buf, buf2, cb) == 0);
CB cbBuf = cb - 1;
check(MSFReadStream2(pmsf, sn, 1, buf2, &cbBuf));
check(memcmp(buf+1, buf2, cb - 1) == 0);
}
check(MSFClose(pmsf));
// overwrite w/ commit
check(pmsf = MSFOpen("jan.msf", 1, &ec));
for (sn = snMac-1; sn != snNil; sn--) {
buf[0] = 2*sn;
buf[1] = (char)sn;
check(MSFReplaceStream(pmsf, sn, buf, cb));
check(MSFReadStream(pmsf, sn, buf2, cb));
check(memcmp(buf, buf2, cb) == 0);
CB cbBuf = cb - 1;
check(MSFReadStream2(pmsf, sn, 1, buf2, &cbBuf));
check(memcmp(buf+1, buf2, cb - 1) == 0);
}
check(MSFCommit(pmsf));
check(MSFClose(pmsf));
// read back committed changes
check(pmsf = MSFOpen("jan.msf", 0, &ec));
for (sn = 0; sn < snMac; sn++) {
buf[0] = 2*sn;
buf[1] = (char)sn;
check(MSFReadStream(pmsf, sn, buf2, cb));
check(memcmp(buf, buf2, cb) == 0);
CB cbBuf = cb - 1;
check(MSFReadStream2(pmsf, sn, 1, buf2, &cbBuf));
check(memcmp(buf+1, buf2, cb - 1) == 0);
}
check(MSFClose(pmsf));
// append a bunch of different sized blocks
CB cb2;
for (int icb2 = 0; (cb2 = rgcb[icb2]) > 0; icb2++) {
char bufa[32768];
for (int i = 0; i < cb2; i++)
bufa[i] = -i;
check(pmsf = MSFOpen("jan.msf", 1, &ec));
for (sn = 0; sn < snMac; sn++) {
buf[0] = (char)sn;
buf[1] = 2*sn;
bufa[0] = 3*sn;
bufa[1] = 4*sn;
check(MSFReplaceStream(pmsf, sn, buf, cb));
check(MSFAppendStream(pmsf, sn, bufa, cb2));
check(MSFReadStream(pmsf, sn, buf2, cb + cb2));
check(memcmp(buf, buf2, cb) == 0);
check(memcmp(bufa, buf2+cb, cb2) == 0);
}
check(MSFCommit(pmsf));
check(MSFClose(pmsf));
check(pmsf = MSFOpen("jan.msf", 0, &ec));
for (sn = 0; sn < snMac; sn++) {
buf[0] = (char)sn;
buf[1] = 2*sn;
bufa[0] = 3*sn;
bufa[1] = 4*sn;
check(MSFReadStream(pmsf, sn, buf2, cb + cb2));
check(memcmp(buf, buf2, cb) == 0);
check(memcmp(bufa, buf2+cb, cb2) == 0);
}
check(MSFClose(pmsf));
}
}
printf("done\n");
getchar();
return 0;
}