Reviewing the registry (thomasvs, April 8 2002)

* added a --gst-registry flag to the core which allows any gst app
  to specify a different registry for loading/saving

  some stuff to do this went into gstreamer/gst/gstregistry.h

* What location is used for writing ? (gst-register)

  - if specified (using --gst-registry) then use the specified location
  - if not specified :
       - it can be written in the global location, do it there
         (which should be sysconfdir/gstreamer) and reg.xml
       - if not writable, then try ~/.gstreamer/reg.xml

* What location is used for reading ? (gst-whatever)

  - if specified (using --gst-registry) then use the specified location
  - if not specified :
    - right now :
      if local exists, only read local
      if not, read global

    - TODO: try reading GST_CONFIG_DIR/reg.xml first
      then try reading ~/.gstreamer/reg.xml
      AND replace every namespace collision with the new one

* actual variables stuff (gstregistry.c)
  - use gst_registry_write_get to get a GstRegistryWrite struct back 
    listing the right location of dir, file and tmp file
  - use gst_registry_read_get to get a GstRegistryRead struct back
    listing the path of global and local file to read

* gst-register signals it's going to write to the registry (causing it to
  be unlinked before the read in post_init ()) by setting a global variable,
  _gst_init_write_registry
