
#include <libraries/dosextens.h>
#include <exec/ports.h>
#include <functions.h>

#include <string.h>

#include "dos37em.h"

BOOL
ryb_SetFileDate (char *name, struct DateStamp *date)
{
  char xfib[sizeof(struct FileInfoBlock) + 3];
  int length;
  struct MsgPort *port;
  char *bname = 0;
  BPTR lock = 0;
  BPTR plock = 0;
  BOOL success = DOSFALSE;
  struct FileInfoBlock *fib;

  fib = (struct FileInfoBlock *)(((ULONG)xfib + 3) & ~3);
  lock = Lock (name, ACCESS_READ);
  if (!lock)
    goto fail;
  plock = ParentDir (lock);
  if (!plock)
    goto fail;
  if (Examine (lock, fib) == DOSFALSE)
    goto fail;
  port = ((struct FileLock *) (lock << 2))->fl_Task;
  UnLock (lock);
  lock = 0;
  bname = fib->fib_FileName;
  length = strlen (bname);
  memmove (bname + 1, bname, length);
  *bname = length;
  success = DoPkt (port, ACTION_SET_DATE,
		   0, plock, (BPTR)((LONG)bname >> 2), (LONG)date, 0);
fail:
  if (lock)
    UnLock (lock);
  if (plock)
    UnLock (plock);
  return success;
}
