X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ffilesys%2Ffilehdr.c;h=58179128ae27782bfbc5c4b1fdf5af244484ec4f;hb=f2f8875638593bd5365cfd6a5ba7c9578e52322f;hp=1f35946479070e15884f839dfd3c58cbb097c94f;hpb=97dcefb4742e13df9eb22c3aa00bb802bdc55c60;p=pintos-anon diff --git a/src/filesys/filehdr.c b/src/filesys/filehdr.c index 1f35946..5817912 100644 --- a/src/filesys/filehdr.c +++ b/src/filesys/filehdr.c @@ -1,9 +1,9 @@ -#include "filehdr.h" -#include "bitmap.h" -#include "debug.h" -#include "malloc.h" -#include "filesys.h" -#include "lib.h" +#include "filesys/filehdr.h" +#include +#include +#include +#include "filesys/filesys.h" +#include "threads/malloc.h" /* Allocates sectors from bitmap B for the content of a file whose size is LENGTH bytes, and returns a new `struct filehdr' @@ -22,12 +22,15 @@ filehdr_allocate (struct bitmap *b, off_t length) ASSERT (b != NULL); ASSERT (length >= 0); + sector_cnt = (length / DISK_SECTOR_SIZE) + (length % DISK_SECTOR_SIZE > 0); + if (sector_cnt > DIRECT_CNT) + return false; + h = calloc (1, sizeof *h); if (h == NULL) return NULL; h->length = length; - sector_cnt = (length / DISK_SECTOR_SIZE) + (length % DISK_SECTOR_SIZE > 0); while (h->sector_cnt < sector_cnt) { size_t sector = bitmap_find_and_set (b); @@ -119,7 +122,7 @@ filehdr_print (const struct filehdr *h) { size_t i; - printk ("File header: %jd bytes, %zd sectors (", + printf ("File header: %jd bytes, %zd sectors (", (intmax_t) h->length, h->sector_cnt); /* This loop could be unsafe for large h->sector_cnt, can you @@ -127,8 +130,8 @@ filehdr_print (const struct filehdr *h) for (i = 0; i < h->sector_cnt; i++) { if (i != 0) - printk (", "); - printk ("%jd", (intmax_t) h->sectors[i]); + printf (", "); + printf ("%jd", (intmax_t) h->sectors[i]); } - printk (")\n"); + printf (")\n"); }