SNMP Subagent Programmer's Guide
Dynamic Directory Program
2-56 119728—SNMP Subagent Programmer’s Guide
Programming Tutorials
/*****************************************************************************
 *  build_files    Build the list of file names.      <-- 
19
 ****************************************************************************/
void build_files(struct directory *dir)
{
 struct dirent     *dirent;
 struct file_entry    *file;
 struct file_entry    *file_list = NULL;
 int          len;
#define MAX_dirName 255 /* from GDMOC dynamls.h output */     
#define MAX_fileName 255
 char         searchsubvol [(MAX_dirName+1)];
 short         search_id;
 short         error;
 short         findnext_len;
 if (dir->files)
  { return; }
 /* ensure NULL termination of directory name. */
 dir->dir_name.val[dir->dir_name.len] = '\0';
 strcpy((char *) &searchsubvol, dir->dir_name.val); /* FINDSTART needs this */
 strncat((char *) &searchsubvol, ".*", MAX_dirName);
 findnext_len = strlen((char *) &searchsubvol);
 error = FILENAME_FINDSTART_(&search_id, (char *)&searchsubvol,
       (short) findnext_len, 2 /* this subvol only */);
 while (!error) {
 /* Build and fill in new entry.   */
  file = (struct file_entry *)safe_malloc(sizeof(*file));
 file->file_name.val = (ubyte *) safe_malloc(MAX_fileName+1);
 if (!(error = FILENAME_FINDNEXT_(search_id, (char*)file->file_name.val,
                MAX_fileName, &findnext_len)))
  {  /* Insert new entry in the list.      */
    file->file_name.len = findnext_len;
    file_list = insert_new_file(file_list, file);           
  }
 }
 free(file)->file_name.val); /* get rid of storage allocated */
 free(file);       /* before FILENAME_FINDNEXT_ failed... */
 error = FILENAME_FINDFINISH_(search_id);
 dir->files = file_list;
}
/*****************************************************************************
 *  free_files    Free a list of file names.        <-- 
20
 ****************************************************************************/
void
free_files(struct file_entry *files)
...
{
   struct file_entry   *last;
   while (files)
   {
       last = files;
       files = files->next;
       (void) free((void *)last->file_name.val);
       (void) free((void *)last);
   }
}
Example 2-11. Dynamic Directory Include File dirC (page 3 of 3)










