Fixed bugs in fsutil.

This commit is contained in:
Sergey
2014-07-20 17:23:57 -07:00
parent 61ce169328
commit 2293493bfd
4 changed files with 17 additions and 10 deletions

View File

@@ -158,7 +158,7 @@ dumpregs (frame)
printf( "*******STACK DUMP START*************\n"); printf( "*******STACK DUMP START*************\n");
printf( "frame = %8x\n", frame ); printf( "frame = %8x\n", frame );
printf( "stack data\n" ); printf( "stack data\n" );
while( p <= stacktop ) while( p <= stacktop )
{ {
printf( " %8x", *p++ ); printf( " %8x", *p++ );
if( p <= stacktop ) printf( " %8x", *p++ ); if( p <= stacktop ) printf( " %8x", *p++ );
@@ -343,14 +343,14 @@ exception (frame)
mips_write_c0_register (C0_COMPARE, 0, c); mips_write_c0_register (C0_COMPARE, 0, c);
} while ((int) (c - (unsigned)mips_read_c0_register (C0_COUNT, 0)) < 0); } while ((int) (c - (unsigned)mips_read_c0_register (C0_COUNT, 0)) < 0);
hardclock ((caddr_t) frame [FRAME_PC], status); hardclock ((caddr_t) frame [FRAME_PC], status);
#ifdef POWER_ENABLED #ifdef POWER_ENABLED
power_switch_check(); power_switch_check();
#endif #endif
#ifdef UARTUSB_ENABLED #ifdef UARTUSB_ENABLED
/* Poll USB on every timer tick. */ /* Poll USB on every timer tick. */
usbintr(0); usbintr(0);
#endif #endif
break; break;
#ifdef UART1_ENABLED #ifdef UART1_ENABLED
@@ -389,7 +389,7 @@ exception (frame)
#ifdef UARTUSB_ENABLED #ifdef UARTUSB_ENABLED
case PIC32_VECT_USB: /* USB */ case PIC32_VECT_USB: /* USB */
IFSCLR(1) = 1 << (PIC32_IRQ_USB - 32); IFSCLR(1) = 1 << (PIC32_IRQ_USB - 32);
usbintr(0); usbintr(0);
break; break;
#endif #endif
@@ -418,7 +418,7 @@ exception (frame)
if (sp < u.u_procp->p_daddr + u.u_dsize) { if (sp < u.u_procp->p_daddr + u.u_dsize) {
/* Process has trashed its stack; give it an illegal /* Process has trashed its stack; give it an illegal
* instruction violation to halt it in its tracks. */ * instruction violation to halt it in its tracks. */
panic ("unexpected exception 2"); panic ("unexpected exception 2");
psig = SIGSEGV; psig = SIGSEGV;
break; break;
} }

View File

@@ -26,6 +26,7 @@
#include <string.h> #include <string.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <time.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <errno.h> #include <errno.h>
#include <getopt.h> #include <getopt.h>
@@ -354,6 +355,7 @@ void add_device (fs_t *fs, char *name, char *spec)
return; return;
} }
dev.addr[1] = majr << 8 | minr; dev.addr[1] = majr << 8 | minr;
time (&dev.mtime);
fs_inode_save (&dev, 1); fs_inode_save (&dev, 1);
} }
@@ -408,6 +410,7 @@ void add_file (fs_t *fs, char *name)
} }
} }
file.inode.mtime = st.st_mtime; file.inode.mtime = st.st_mtime;
file.inode.dirty = 1;
fs_file_close (&file); fs_file_close (&file);
fclose (fd); fclose (fd);
} }

View File

@@ -161,7 +161,6 @@ int fs_inode_save (fs_inode_t *inode, int force)
BSDFS_BSIZE / BSDFS_INODES_PER_BLOCK; BSDFS_BSIZE / BSDFS_INODES_PER_BLOCK;
time (&inode->atime); time (&inode->atime);
//time (&inode->mtime);
if (! fs_seek (inode->fs, offset)) if (! fs_seek (inode->fs, offset))
return 0; return 0;

View File

@@ -56,6 +56,11 @@ static void printlog(const char *format, ...)
} }
} }
static dev_t make_rdev(unsigned raw)
{
return makedev (raw >> 8, raw & 0xff);
}
/* /*
* Copy data to struct stat. * Copy data to struct stat.
*/ */
@@ -66,7 +71,7 @@ static int getstat (fs_inode_t *inode, struct stat *statbuf)
statbuf->st_nlink = inode->nlink; /* number of hard links */ statbuf->st_nlink = inode->nlink; /* number of hard links */
statbuf->st_uid = inode->uid; /* user ID of owner */ statbuf->st_uid = inode->uid; /* user ID of owner */
statbuf->st_gid = inode->gid; /* group ID of owner */ statbuf->st_gid = inode->gid; /* group ID of owner */
statbuf->st_rdev = 0; /* device ID (if special file) */ statbuf->st_rdev = 0; /* device ID (if special file) */
statbuf->st_size = inode->size; /* total size, in bytes */ statbuf->st_size = inode->size; /* total size, in bytes */
statbuf->st_blocks = inode->size >> 9; /* number of blocks allocated */ statbuf->st_blocks = inode->size >> 9; /* number of blocks allocated */
statbuf->st_atime = inode->atime; /* time of last access */ statbuf->st_atime = inode->atime; /* time of last access */
@@ -82,11 +87,11 @@ static int getstat (fs_inode_t *inode, struct stat *statbuf)
break; break;
case INODE_MODE_FCHR: /* character special */ case INODE_MODE_FCHR: /* character special */
statbuf->st_mode |= S_IFCHR; statbuf->st_mode |= S_IFCHR;
statbuf->st_rdev = inode->addr[1]; statbuf->st_rdev = make_rdev (inode->addr[1]);
break; break;
case INODE_MODE_FBLK: /* block special */ case INODE_MODE_FBLK: /* block special */
statbuf->st_mode |= S_IFBLK; statbuf->st_mode |= S_IFBLK;
statbuf->st_rdev = inode->addr[1]; statbuf->st_rdev = make_rdev (inode->addr[1]);
break; break;
case INODE_MODE_FLNK: /* symbolic link */ case INODE_MODE_FLNK: /* symbolic link */
statbuf->st_mode |= S_IFLNK; statbuf->st_mode |= S_IFLNK;
@@ -527,7 +532,7 @@ int op_mknod(const char *path, mode_t mode, dev_t dev)
return -EIO; return -EIO;
} }
if (S_ISCHR(mode) || S_ISBLK(mode)) { if (S_ISCHR(mode) || S_ISBLK(mode)) {
inode.addr[1] = dev; inode.addr[1] = major(dev) << 8 | minor(dev);
} }
inode.mtime = time(0); inode.mtime = time(0);
inode.dirty = 1; inode.dirty = 1;