예제 #1
0
///
/// DeleteMailTransferList
// remove all nodes from a list and free it completely
void DeleteMailTransferList(struct MailTransferList *tlist)
{
  ENTER();

  if(tlist != NULL)
  {
    struct MailTransferNode *tnode;
    struct MailTransferNode *next;

    // lock the list just, just for safety reasons
    LockMailTransferList(tlist);

    // remove and free all remaining nodes in the list
    SafeIterateList(&tlist->list, struct MailTransferNode *, tnode, next)
    {
      DeleteMailTransferNode(tnode);
    }
    NewMinList(&tlist->list);

    // unlock the list again
    UnlockMailTransferList(tlist);

    // free the semaphore
    FreeSysObject(ASOT_SEMAPHORE, tlist->lockSemaphore);
    tlist->lockSemaphore = NULL;

    // free the list itself
    FreeSysObject(ASOT_LIST, tlist);
  }

  LEAVE();
}
예제 #2
0
void ami_schedule_close_timer(void)
{
	if(ITimer)
	{
		DropInterface((struct Interface *)ITimer);
	}

	CloseDevice((struct IORequest *) tioreq);
	FreeSysObject(ASOT_IOREQUEST,tioreq);
	FreeSysObject(ASOT_PORT,msgport);
}
예제 #3
0
///
/// CreateMailTransferList
// create a new list for transfers
struct MailTransferList *CreateMailTransferList(void)
{
  struct MailTransferList *tlist;

  ENTER();

  // at first create the list itself
  if((tlist = AllocSysObjectTags(ASOT_LIST,
    ASOLIST_Size, sizeof(*tlist),
    ASOLIST_Min,  TRUE,
    TAG_DONE)) != NULL)
  {
    // now create the arbitration semaphore
    if((tlist->lockSemaphore = AllocSysObjectTags(ASOT_SEMAPHORE, TAG_DONE)) != NULL)
    {
      // no transfers in the list so far
      tlist->count = 0;
    }
    else
    {
      // free the list again on failure
      FreeSysObject(ASOT_LIST, tlist);
      tlist = NULL;
    }
  }

  RETURN(tlist);
  return tlist;
}
예제 #4
0
파일: misc.c 프로젝트: EyMenZ/NetSurf-OS3
void ami_misc_itempool_delete(APTR pool)
{
#ifdef __amigaos4__
	FreeSysObject(ASOT_ITEMPOOL, pool);
#else
	DeletePool(pool);
#endif
}
예제 #5
0
파일: NewReadArgs.c 프로젝트: blmara/yam
void NewFreeArgs(struct NewRDArgs *rdargs)
{
  ENTER();

  D(DBF_STARTUP, "FreeArgs(rdargs->FreeArgs)");
  FreeArgs(rdargs->FreeArgs);

  if(rdargs->RDArgs != NULL)
  {
    free((void *)rdargs->RDArgs->RDA_Source.CS_Buffer);

    D(DBF_STARTUP, "FreeDosObject(DOS_RDARGS, rdargs->RDArgs)");
    FreeDosObject(DOS_RDARGS, rdargs->RDArgs);
  }

  if(rdargs->Args != NULL)
  {
    ULONG i;

    for(i=0; i < rdargs->MaxArgs; i++)
    {
      if(rdargs->Args[i] != NULL)
        FreeVecPooled(rdargs->Pool, rdargs->Args[i]);
    }
    FreeVecPooled(rdargs->Pool, rdargs->Args);
    rdargs->Args = NULL;
  }

  if(rdargs->ToolWindow != NULL)
  {
    FreeVecPooled(rdargs->Pool, rdargs->ToolWindow);
    rdargs->ToolWindow = NULL;
  }

  if(rdargs->WinFH != 0)
  {
    D(DBF_STARTUP, "SelectOutput( .. ) .. Close( ... )");
    SelectOutput(rdargs->OldOutput);
    SelectInput(rdargs->OldInput);
    Close(rdargs->WinFH);
    rdargs->WinFH = 0;
  }

  if(rdargs->Pool != NULL)
  {
    #if defined(__amigaos4__)
    FreeSysObject(ASOT_MEMPOOL, rdargs->Pool);
    #else
    DeletePool(rdargs->Pool);
    #endif
    rdargs->Pool = NULL;
  }

  D(DBF_STARTUP, "memory freed");

  LEAVE();
}
예제 #6
0
ULONG freeBase(struct LibraryHeader *lib)
{
  ENTER();

  D(DBF_STARTUP, "freeing all resources of codesets.library");

  // cleanup also the internal public codesets list
  codesetsCleanup(&lib->codesets);

  // close locale.library
  if(LocaleBase != NULL)
  {
    DROPINTERFACE(ILocale);
    CloseLibrary((struct Library *)LocaleBase);
    LocaleBase = NULL;
  }

  #if defined(__amigaos4__)
  // close diskfont.library
  if(DiskfontBase != NULL)
  {
    DROPINTERFACE(IDiskfont);
    CloseLibrary((struct Library *)DiskfontBase);
    DiskfontBase = NULL;
  }
  #endif

  // delete our private memory pool
  if(lib->pool != NULL)
  {
    #if defined(__amigaos4__)
    FreeSysObject(ASOT_MEMPOOL, lib->pool);
    #else
    DeletePool(lib->pool);
    #endif
    lib->pool = NULL;
  }

  // close utility.library
  if(UtilityBase != NULL)
  {
    DROPINTERFACE(IUtility);
    CloseLibrary((struct Library *)UtilityBase);
    UtilityBase = NULL;
  }

  // close dos.library
  if(DOSBase != NULL)
  {
    DROPINTERFACE(IDOS);
    CloseLibrary((struct Library *)DOSBase);
    DOSBase = NULL;
  }

  RETURN(TRUE);
  return TRUE;
}
예제 #7
0
파일: handler.c 프로젝트: michalsc/AROS
void SAVEDS handler(void)
{
  struct Process *me = (struct Process *)FindTask(NULL);
  struct startMsg *smsg;
  struct MsgPort *port;
  BOOL res = FALSE;

  ENTER();

  WaitPort(&me->pr_MsgPort);
  smsg = (struct startMsg *)GetMsg(&me->pr_MsgPort);

  #if defined(__amigaos4__)
  port = AllocSysObject(ASOT_PORT, TAG_DONE);
  #else
  port = CreateMsgPort();
  #endif

  if(port != NULL)
    res = localSendRexxMsg(port, smsg->port, smsg->cmd);

  smsg->res = res;
  ReplyMsg((struct Message *)smsg);

  if(res == TRUE)
  {
    struct RexxMsg *rxmsg;

    WaitPort(port);
    rxmsg = (struct RexxMsg *)GetMsg(port);

    DeleteArgstring((APTR)rxmsg->rm_Args[0]);
    DeleteRexxMsg(rxmsg);
  }

  if(port != NULL)
  {
    #if defined(__amigaos4__)
    FreeSysObject(ASOT_PORT, port);
    #else
    DeleteMsgPort(port);
    #endif
  }

  ObtainSemaphore(&OpenURLBase->libSem);
  OpenURLBase->rexx_use--;
  ReleaseSemaphore(&OpenURLBase->libSem);

  #if !defined(__amigaos4__)
  // all systems except OS4 should leave this function in forbidden state
  Forbid();
  #endif

  LEAVE();
}
예제 #8
0
///
/// DeleteMailTransferNode
// free a transfer node that does not belong to a list
void DeleteMailTransferNode(struct MailTransferNode *tnode)
{
  ENTER();

  DereferenceMail(tnode->mail);

  free(tnode->uidl);
  FreeSysObject(ASOT_NODE, tnode);

  LEAVE();
}
예제 #9
0
파일: Signature.c 프로젝트: jens-maus/yam
///
/// FreeSignatureList
void FreeSignatureList(struct MinList *signatureList)
{
  struct SignatureNode *sn;
  struct SignatureNode *next;

  ENTER();

  // we have to free the signatureList
  SafeIterateList(signatureList, struct SignatureNode *, sn, next)
  {
    dstrfree(sn->signature);
    FreeSysObject(ASOT_NODE, sn);
  }
예제 #10
0
파일: print.c 프로젝트: arczi84/NetSurf-68k
void ami_print_close_device(void)
{
	CloseDevice((struct IORequest *)ami_print_info.PReq);
	FreeSysObject(ASOT_IOREQUEST,ami_print_info.PReq);
}
예제 #11
0
파일: print.c 프로젝트: arczi84/NetSurf-68k
void ami_print_free(void)
{
	FreeSysObject(ASOT_PORT, ami_print_info.msgport);
	ami_print_info.msgport = NULL;
}
예제 #12
0
void ami_print_close_device(void)
{
	CloseDevice(ami_print_info.PReq);
	FreeSysObject(ASOT_IOREQUEST,ami_print_info.PReq);
}