Merge branch 'master' into free-refcount-ids
authorBastien Montagne <montagne29@wanadoo.fr>
Tue, 6 Oct 2015 10:19:29 +0000 (12:19 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Tue, 6 Oct 2015 10:19:29 +0000 (12:19 +0200)
1  2 
source/blender/blenkernel/BKE_font.h
source/blender/blenkernel/BKE_movieclip.h
source/blender/blenkernel/BKE_sound.h
source/blender/blenkernel/intern/font.c
source/blender/blenkernel/intern/image.c
source/blender/blenkernel/intern/movieclip.c
source/blender/blenkernel/intern/sequencer.c
source/blender/blenkernel/intern/sound.c
source/blender/makesrna/intern/rna_main_api.c

index 18bc22b87f09f8ef663fef200e1813ae7e393560,f20c166aa6dfdf7be4f49fbacd4f4d26051b2f58..0c96107a47f5b41f8329e7a1e78f5564eafd9148
@@@ -78,9 -78,11 +78,11 @@@ bool BKE_vfont_is_builtin(struct VFont 
  void BKE_vfont_builtin_register(void *mem, int size);
  
  void BKE_vfont_free_data(struct VFont *vfont);
 -void BKE_vfont_free(struct VFont *sc); 
 +void BKE_vfont_free(struct VFont *sc, const bool do_id_user);
  struct VFont *BKE_vfont_builtin_get(void);
- struct VFont *BKE_vfont_load(struct Main *bmain, const char *name);
+ struct VFont *BKE_vfont_load(struct Main *bmain, const char *filepath);
+ struct VFont *BKE_vfont_load_exists_ex(struct Main *bmain, const char *filepath, bool *r_exists);
+ struct VFont *BKE_vfont_load_exists(struct Main *bmain, const char *filepath);
  
  bool BKE_vfont_to_curve_ex(struct Main *bmain, struct Object *ob, int mode,
                             struct ListBase *r_nubase,
Simple merge
index 180c82f5c0008a7fae39c54a874316a1f26d05f1,7e7cc8745fde1a7465a1d3ebf0e64ef2eeab9b8e..53d6d8b5d10407eae77c8512c4276813a554861f
@@@ -99,17 -92,39 +92,48 @@@ bSound *BKE_sound_new_file(struct Main 
        return sound;
  }
  
 -void BKE_sound_free(bSound *sound)
+ bSound *BKE_sound_new_file_exists_ex(struct Main *bmain, const char *filepath, bool *r_exists)
+ {
+       bSound *sound;
+       char str[FILE_MAX], strtest[FILE_MAX];
+       BLI_strncpy(str, filepath, sizeof(str));
+       BLI_path_abs(str, bmain->name);
+       /* first search an identical filepath */
+       for (sound = bmain->sound.first; sound; sound = sound->id.next) {
+               BLI_strncpy(strtest, sound->name, sizeof(sound->name));
+               BLI_path_abs(strtest, ID_BLEND_PATH(bmain, &sound->id));
+               if (BLI_path_cmp(strtest, str) == 0) {
+                       sound->id.us++;  /* officially should not, it doesn't link here! */
+                       if (r_exists)
+                               *r_exists = true;
+                       return sound;
+               }
+       }
+       if (r_exists)
+               *r_exists = false;
+       return BKE_sound_new_file(bmain, filepath);
+ }
+ bSound *BKE_sound_new_file_exists(struct Main *bmain, const char *filepath)
+ {
+       return BKE_sound_new_file_exists_ex(bmain, filepath, NULL);
+ }
 +/**
 + * Free (or release) any data used by this sound (does not free the sound itself).
 + *
 + * \param sound The sound to free.
 + * \param do_id_user When \a true, ID datablocks used (referenced) by this sound are 'released'
 + *                   (their user count is decreased).
 + */
 +void BKE_sound_free(bSound *sound, const bool UNUSED(do_id_user))
  {
 +      /* No animdata here. */
 +
        if (sound->packedfile) {
                freePackedFile(sound->packedfile);
                sound->packedfile = NULL;