Platon Technologies
neprihlásený Prihlásiť Registrácia
SlovakEnglish
open source software development oslavujeme 10 rokov vývoja otvoreného softvéru! Sobota, 20. apríl 2024

Rozdiely pre games/3do-view/dir.c medzi verziami 1.1 a 1.2

verzia 1.1, 2003/05/19 22:24:46 verzia 1.2, 2003/05/20 15:25:27
Riadok 11 
Riadok 11 
  *   *
  */   */
   
 /* $Platon$ */  /* $Platon: games/3do-view/dir.c,v 1.1 2003/05/19 22:24:46 nepto Exp $ */
   
 #include <stdio.h>  
 #include <string.h>  #include <string.h>
 #include <stdlib.h>  #include <stdlib.h>
   #include <unistd.h>
   #include <dirent.h>
   #include <sys/types.h>
   #include <sys/stat.h>
   
   #define DIR_REALLOC_STEP                        10
   
 void get_directories_and_files( /* ... ) {{{ */  void get_directories_and_files(char ***directories, char ***files) /* {{{ */
                 const char *path, char ***directories, char ***files)  
 {  {
         if (directories != NULL) {          DIR *dirp;
                 *directories = (char **) malloc(5 * sizeof(char *));          struct dirent *dp;
                 if (*directories != NULL) {          struct stat st;
                         (*directories)[0] = strdup("ATTEMPT0");          register char ***ptr;
                         (*directories)[1] = strdup("ATTEMPT1");          long int directories_size, files_size, *size;
                         (*directories)[2] = strdup("ATTEMPT2");  
                         (*directories)[3] = strdup("ATTEMPT3");          if (directories != NULL) *directories = NULL;
                         (*directories)[4] = NULL;          if (files       != NULL) *files       = NULL;
   
           /* If current directory cannot be opened, fallback to root directory. */
           if ((dirp = opendir(".")) == NULL
                           && !chdir("/") && (dirp = opendir(".")) == NULL)
                   return;
   
           directories_size = 0;
           files_size       = 0;
           for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) {
                   if (stat(dp->d_name, &st))
                           continue;
   
                   if (S_ISDIR(st.st_mode)) {
                           if (directories == NULL || ! strcmp(dp->d_name, "."))
                                   continue;
                           ptr  = directories;
                           size = &directories_size;
                   } else {
                           if (files == NULL)
                                   continue;
                           ptr  = files;
                           size = &files_size;
                 }                  }
         }                  if (! *size || !((*size + 1) % DIR_REALLOC_STEP)) {
         if (files != NULL) {                          register char **new_ptr;
                 *files = (char **) malloc(5 * sizeof(char *));                          new_ptr = (char **) realloc(*ptr,
                 if (*files != NULL) {                                          sizeof(char *) * (*size + 1 + DIR_REALLOC_STEP));
                         (*files)[0] = strdup("pokus0");                          if (new_ptr == NULL)
                         (*files)[1] = strdup("pokus1");                                  break;
                         (*files)[2] = strdup("pokus2");                          *ptr = new_ptr;
                         (*files)[3] = strdup("pokus3");  
                         (*files)[4] = NULL;  
                 }                  }
                   if (((*ptr)[*size] = strdup(dp->d_name)) == NULL)
                           break;
                   (*size)++;
                   (*ptr)[*size] = NULL;
         }          }
   
           closedir(dirp);
 } /* }}} */  } /* }}} */
   
 void free_directories_or_files(char **ar) /* {{{ */  void free_directories_or_files(char **ar) /* {{{ */
Riadok 50  void free_directories_or_files(char **ar
Riadok 80  void free_directories_or_files(char **ar
         free(ar);          free(ar);
 } /* }}} */  } /* }}} */
   
   #if defined(SELF) || defined(SELFTEST) || defined(SELF_DIR)
   
   #include <stdio.h>
   
   int main(int argc, char **argv) /* {{{ */
   {
           register int k;
           char **dirs, **files;
   
           get_directories_and_files(&dirs, &files);
   
           puts("Directories:");
           for (k = 0; dirs != NULL && dirs[k] != NULL; k++)
                   printf("%03d: %s\n", k, dirs[k]);
   
           puts("Files:");
           for (k = 0; files != NULL && files[k] != NULL; k++)
                   printf("%03d: %s\n", k, files[k]);
   
           return 0;
   } /* }}} */
   
   #endif /* #if defined(SELF) || defined(SELFTEST) || defined(SELF_DIR) */
   
 /* Modeline for ViM {{{  /* Modeline for ViM {{{
  * vim: set ts=4:   * vim: set ts=4:
  * vim600: fdm=marker fdl=0 fdc=0:   * vim600: fdm=marker fdl=0 fdc=0:

Legend:
Odstranené z verzie1.1  
zmenené riadky
  Pridané vo verzii1.2

Platon Group <platon@platon.sk> http://platon.sk/
Copyright © 2002-2006 Platon Group
Stránka používa redakčný systém Metafox
Na začiatok