#ifdef PINTOS
#include <syscall.h>
#else
-#include <unistd.h>
-#include <fcntl.h>
+#include "posix-compat.h"
#endif
-#include "arc4.h"
+#include "../lib/arc4.h"
-#define CHUNK_SIZE (63 * 1024) /* Max file size. */
+/* This is the max file size for an older version of the Pintos
+ file system that had 126 direct blocks each pointing to a
+ single disk sector. We could raise it now. */
+#define CHUNK_SIZE (126 * 512)
#define CHUNK_CNT 16 /* Number of chunks. */
#define DATA_SIZE (CHUNK_CNT * CHUNK_SIZE) /* Buffer size. */
{
size_t i;
-#ifdef PINTOS
create ("buffer", CHUNK_SIZE);
-#endif
for (i = 0; i < CHUNK_CNT; i++)
{
int fd;
printf ("(page-merge-seq) sort chunk %zu\n", i);
/* Write this chunk to a file. */
-#ifdef PINTOS
fd = open ("buffer");
-#else
- fd = open ("buffer", O_WRONLY | O_CREAT, 0660);
-#endif
+
if (fd < 0)
{
printf ("(page-merge-seq) open() failed\n");
close (fd);
/* Sort with subprocess. */
-#ifdef PINTOS
- pid_t child = exec ("child-sort");
+ pid_t child = exec ("child-sort buffer");
if (child == -1)
{
printf ("(page-merge-seq) exec() failed\n");
exit (1);
}
- if (join (child) != 0x123)
+ if (join (child) != 123)
{
printf ("(page-merge-seq) join(exec()) returned bad value\n");
exit (1);
}
-#else
- system ("./child-sort");
-#endif
/* Read chunk back from file. */
-#ifdef PINTOS
fd = open ("buffer");
-#else
- fd = open ("buffer", O_RDONLY);
-#endif
if (fd < 0)
{
printf ("(page-merge-seq) open() failed\n");