home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / maint / part01 / mem.c < prev    next >
C/C++ Source or Header  |  1992-05-13  |  7KB  |  239 lines

  1. /******************************************************************************
  2. *******************************************************************************
  3.  
  4.    Site:    Western Michigan University Academic Computer Center
  5.  
  6.    System:    Directory/File System Maintenance
  7.   
  8.    Program:    maint
  9.  
  10.    Version=01    Level=00    01/24/92    Leonard J. Peirce
  11.  
  12.    Purpose:    Memory allocation/initialization routines for command
  13.         structures.
  14.  
  15.    Arguments:    See individual routines
  16.  
  17.    External variables:    See individual routines
  18.  
  19.    External functions:
  20.  
  21.           Defined:    free_com, free_comstr, new_comm
  22.  
  23.           Called:    None
  24.  
  25.    Files accessed:    None
  26.  
  27.    Return codes:    See individual routines
  28.  
  29.    Compiling instructions:    See Makefile
  30.  
  31.    Linking instructions:    See Makefile
  32.  
  33.    Other information:    (C) Copyright 1992, Leonard J. Peirce
  34.  
  35. ********************************************************************************
  36. *******************************************************************************/
  37.  
  38. /******************************************************************************/
  39. /*                                                                            */
  40. /*                        # I N C L U D E   F I L E S                         */
  41. /*                                                                            */
  42. /******************************************************************************/
  43.  
  44. #include <malloc.h>
  45. #if defined(SYSV) || !defined(sun)
  46. #include <stdio.h>
  47. #endif
  48. #include "maint.h"
  49.  
  50. /******************************************************************************/
  51. /*                                                                            */
  52. /*                             # D E F I N E S                                */
  53. /*                                                                            */
  54. /******************************************************************************/
  55.  
  56. /******************************************************************************/
  57. /*                                                                            */
  58. /*          S T R U C T U R E S ,   U N I O N S ,   T Y P E D E F S           */
  59. /*                                                                            */
  60. /******************************************************************************/
  61.  
  62. /******************************************************************************/
  63. /*                                                                            */
  64. /*   E X T E R N A L   D E F I N I T I O N S   &   D E C L A R A T I O N S    */
  65. /*                                                                            */
  66. /******************************************************************************/
  67.  
  68. #ifndef ultrix
  69. extern     void      free();
  70. #endif
  71.  
  72.      void      free_comm(),
  73.           free_comstr();
  74.  
  75.      COM_DEF  *new_comm();
  76.  
  77. /******************************************************************************/
  78. /*                                                                            */
  79. /*     ST A T I C   D E F I N I T I O N S   &   D E C L A R A T I O N S       */
  80. /*                                                                            */
  81. /******************************************************************************/
  82.  
  83. /*******************************************************************************
  84. ********************************************************************************
  85.  
  86.   Function:    free_com
  87.  
  88.   Purpose:    Free the memory that was allocated for all of the command
  89.         structures for a directory, including all of the memory that
  90.         may have been allocated to hold things such as the copy name,
  91.         the rename name, and the text descriptor.
  92.  
  93.   Global variables:
  94.  
  95.     Name            Examine/Modify/Use/Read/Write
  96.     ----            -----------------------------
  97.     none
  98.  
  99.   Return Codes:
  100.  
  101.     Code            Reason
  102.     ----            ------
  103.     none
  104.  
  105. ********************************************************************************
  106. *******************************************************************************/
  107.  
  108. void free_comm(dirptr,num_file)
  109.                     /*******   FORMAL  PARAMETERS   *******/
  110. register ENT_DEF  *dirptr;        /* pointer to directory entries          */
  111. register short      num_file;        /* number of files in directory          */
  112.  
  113. {    /*** free_comm ***/
  114.  
  115.  
  116.    while(num_file-- > 0)        /* delete all command structs          */
  117.    {
  118.       if(dirptr->command != NULL)     /* command struct for this entry?     */
  119.       {
  120.      /* free up the command structure and everything associated with it */
  121.  
  122.      free_comstr(dirptr->command);
  123.       }
  124.  
  125.       dirptr++;                /* go to next command strucure          */
  126.    }
  127.  
  128.    return;
  129.  
  130. }    /*** free_comm ***/
  131.  
  132. /*******************************************************************************
  133. ********************************************************************************
  134.  
  135.   Function:    free_comstr
  136.  
  137.   Purpose:    Free the memory that belongs to a specific command structure.
  138.  
  139.   Global variables:
  140.  
  141.     Name            Examine/Modify/Use/Read/Write
  142.     ----            -----------------------------
  143.     none
  144.  
  145.   Return Codes:
  146.  
  147.     Code            Reason
  148.     ----            ------
  149.     none
  150.  
  151.   Termination Codes:
  152.  
  153.     Code            Reason
  154.     ----            ------
  155.     status            failure freeing memory
  156.  
  157. ********************************************************************************
  158. *******************************************************************************/
  159.  
  160. void free_comstr(command_str)
  161.                            /*******   FORMAL  PARAMETERS   *******/
  162. register COM_DEF  *command_str;        /* pointer to structure to be freed   */
  163.  
  164. {    /*** free_comstr ***/
  165.  
  166.    if(command_str->copy_name != NULL)
  167.    {
  168.       /* free up the memory for the copy name */
  169.  
  170.       free(command_str->copy_name);
  171.    }
  172.  
  173.    if(command_str->ren_name != NULL)
  174.    {
  175.       /* free up the memory for the rename name */
  176.  
  177.       free(command_str->ren_name);
  178.    }
  179.  
  180.    if(command_str->text != NULL)
  181.    {
  182.       /* free up the memory for the copy name */
  183.  
  184.       free(command_str->text);
  185.    }
  186.  
  187.    /* now free up the command structure itself */
  188.  
  189.    free((char *) command_str);
  190.  
  191.    return;
  192.  
  193. }    /*** free_comstr ***/
  194.  
  195. /*******************************************************************************
  196. ********************************************************************************
  197.  
  198.   Function:    new_comm
  199.  
  200.   Purpose:    Allocate memory for a new command structure and return a
  201.         pointer to the memory.
  202.  
  203.   Global variables:
  204.  
  205.     Name            Examine/Modify/Use/Read/Write
  206.     ----            -----------------------------
  207.     none
  208.  
  209.   Return Codes:
  210.  
  211.     Code            Reason
  212.     ----            ------
  213.     ptr            pointer to allocated memory
  214.     NULL            problems allocating memory
  215.  
  216. ********************************************************************************
  217. *******************************************************************************/
  218.  
  219. COM_DEF *new_comm()
  220.  
  221. {    /*** new_comm ***/
  222.                     /*******   FORMAL  PARAMETERS   *******/
  223. register COM_DEF  *ptr;            /* pointer to allocated memory          */
  224.  
  225.  
  226.    ptr = (COM_DEF *) malloc((u_int) sizeof(COM_DEF));
  227.  
  228.    if(ptr == NULL)
  229.       return(NULL);
  230.  
  231.    memset(ptr,0,sizeof(COM_DEF));    /* initialize it              */
  232.    ptr->copy_name = NULL;
  233.    ptr->text = NULL;
  234.    ptr->ren_name = NULL;
  235.  
  236.    return(ptr);                /* return pointer to the structure    */
  237.  
  238. }    /*** new_comm ***/
  239.