/[osn-commons]/trunk/uar/uar.c
ViewVC logotype

Diff of /trunk/uar/uar.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 29 by rakinar2, Tue Aug 6 13:06:45 2024 UTC revision 30 by rakinar2, Tue Aug 6 14:24:41 2024 UTC
# Line 38  struct uar_header Line 38  struct uar_header
38      uint64_t size;      uint64_t size;
39  } __attribute__ ((packed));  } __attribute__ ((packed));
40    
 enum uar_file_type  
 {  
     UF_FILE,  
     UF_DIR,  
     UF_LINK,  
 };  
   
41  struct uar_file  struct uar_file
42  {  {
43      enum uar_file_type type;      enum uar_file_type type;
# Line 433  path_concat (const char *p1, const char Line 426  path_concat (const char *p1, const char
426  }  }
427    
428  struct uar_file *  struct uar_file *
429  uar_add_dir (struct uar_archive *uar, const char *dname, const char *path)  uar_add_dir (struct uar_archive *uar, const char *dname, const char *path,
430                 bool (*callback) (struct uar_file *file, const char *fullname,
431                                   const char *fullpath))
432  {  {
433      assert (uar != NULL && "uar is NULL");      assert (uar != NULL && "uar is NULL");
434      assert (dname != NULL && "dname is NULL");      assert (dname != NULL && "dname is NULL");
# Line 475  uar_add_dir (struct uar_archive *uar, co Line 470  uar_add_dir (struct uar_archive *uar, co
470          = uar_file_create (name, namelen, 0, uar->header.size);          = uar_file_create (name, namelen, 0, uar->header.size);
471      uint64_t dir_size = 0;      uint64_t dir_size = 0;
472    
473        dir_file->type = UF_DIR;
474    
475        if (callback != NULL && !callback (dir_file, name, path))
476            {
477                uar_set_error (uar, UAR_SUCCESS);
478                uar_file_destroy (dir_file);
479                return NULL;
480            }
481    
482      if (!uar_add_file_entry (uar, dir_file))      if (!uar_add_file_entry (uar, dir_file))
483          {          {
484              uar_file_destroy (dir_file);              uar_file_destroy (dir_file);
# Line 523  uar_add_dir (struct uar_archive *uar, co Line 527  uar_add_dir (struct uar_archive *uar, co
527                              goto uar_add_dir_error;                              goto uar_add_dir_error;
528                          }                          }
529    
530                        if (callback != NULL
531                            && !callback (file, fullname, fullpath))
532                            {
533                                uar_set_error (uar, UAR_SUCCESS);
534                                goto uar_add_dir_error;
535                            }
536    
537                      file->mode = stinfo.st_mode & 07777;                      file->mode = stinfo.st_mode & 07777;
538                      dir_size += file->data.size;                      dir_size += file->data.size;
539                  }                  }
540              else if (S_ISDIR (stinfo.st_mode))              else if (S_ISDIR (stinfo.st_mode))
541                  {                  {
542                      struct uar_file *direntry                      struct uar_file *direntry
543                          = uar_add_dir (uar, fullname, fullpath);                          = uar_add_dir (uar, fullname, fullpath, callback);
544    
545                      if (direntry == NULL)                      if (direntry == NULL)
546                          {                          {
# Line 556  uar_add_dir (struct uar_archive *uar, co Line 567  uar_add_dir (struct uar_archive *uar, co
567              goto uar_add_dir_end;              goto uar_add_dir_end;
568          }          }
569    
     dir_file->type = UF_DIR;  
570      dir_file->data.size = dir_size;      dir_file->data.size = dir_size;
571    
572  uar_add_dir_end:  uar_add_dir_end:
# Line 706  uar_get_file_name (const struct uar_file Line 716  uar_get_file_name (const struct uar_file
716                 : file->name;                 : file->name;
717  }  }
718    
719    enum uar_file_type
720    uar_get_entry_type (const struct uar_file *file)
721    {
722        return file->type;
723    }
724    
725  bool  bool
726  uar_extract (struct uar_archive *uar, const char *cwd,  uar_extract (struct uar_archive *uar, const char *cwd,
727               bool (*callback) (struct uar_file *file))               bool (*callback) (struct uar_file *file))

Legend:
Removed from v.29  
changed lines
  Added in v.30

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26