summaryrefslogtreecommitdiffstats
path: root/libblkid/cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'libblkid/cache.c')
-rw-r--r--libblkid/cache.c275
1 files changed, 0 insertions, 275 deletions
diff --git a/libblkid/cache.c b/libblkid/cache.c
deleted file mode 100644
index cc2cf8e94..000000000
--- a/libblkid/cache.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * cache.c - allocation/initialization/free routines for cache
- *
- * Copyright (C) 2001 Andreas Dilger
- * Copyright (C) 2003 Theodore Ts'o
- *
- * %Begin-Header%
- * This file may be redistributed under the terms of the
- * GNU Lesser General Public License.
- * %End-Header%
- */
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#include "blkidP.h"
-#include "env.h"
-
-int blkid_debug_mask = 0;
-
-/**
- * SECTION:cache
- * @title: Cache
- * @short_description: basic routines to work with libblkid cache
- *
- * Block device information is normally kept in a cache file blkid.tab and is
- * verified to still be valid before being returned to the user (if the user has
- * read permission on the raw block device, otherwise not). The cache file also
- * allows unprivileged users (normally anyone other than root, or those not in the
- * "disk" group) to locate devices by label/id. The standard location of the
- * cache file can be overridden by the environment variable BLKID_FILE.
- *
- * In situations where one is getting information about a single known device, it
- * does not impact performance whether the cache is used or not (unless you are
- * not able to read the block device directly). If you are dealing with multiple
- * devices, use of the cache is highly recommended (even if empty) as devices will
- * be scanned at most one time and the on-disk cache will be updated if possible.
- * There is rarely a reason not to use the cache.
- *
- * In some cases (modular kernels), block devices are not even visible until after
- * they are accessed the first time, so it is critical that there is some way to
- * locate these devices without enumerating only visible devices, so the use of
- * the cache file is required in this situation.
- */
-
-#if 0 /* ifdef CONFIG_BLKID_DEBUG */
-static blkid_debug_dump_cache(int mask, blkid_cache cache)
-{
- struct list_head *p;
-
- if (!cache) {
- printf("cache: NULL\n");
- return;
- }
-
- printf("cache: time = %lu\n", cache->bic_time);
- printf("cache: flags = 0x%08X\n", cache->bic_flags);
-
- list_for_each(p, &cache->bic_devs) {
- blkid_dev dev = list_entry(p, struct blkid_struct_dev, bid_devs);
- blkid_debug_dump_dev(dev);
- }
-}
-#endif
-
-#ifdef CONFIG_BLKID_DEBUG
-void blkid_init_debug(int mask)
-{
- if (blkid_debug_mask & DEBUG_INIT)
- return;
-
- if (!mask)
- {
- char *dstr = getenv("LIBBLKID_DEBUG");
-
- if (!dstr)
- dstr = getenv("BLKID_DEBUG"); /* for backward compatibility */
- if (dstr)
- blkid_debug_mask = strtoul(dstr, 0, 0);
- } else
- blkid_debug_mask = mask;
-
- if (blkid_debug_mask)
- printf("libblkid: debug mask set to 0x%04x.\n", blkid_debug_mask);
-
- blkid_debug_mask |= DEBUG_INIT;
-}
-#endif
-
-static const char *get_default_cache_filename(void)
-{
- struct stat st;
-
- if (stat(BLKID_RUNTIME_TOPDIR, &st) == 0 && S_ISDIR(st.st_mode))
- return BLKID_CACHE_FILE; /* cache in /run */
-
- return BLKID_CACHE_FILE_OLD; /* cache in /etc */
-}
-
-/* returns allocated path to cache */
-char *blkid_get_cache_filename(struct blkid_config *conf)
-{
- char *filename;
-
- filename = safe_getenv("BLKID_FILE");
- if (filename)
- filename = strdup(filename);
- else if (conf)
- filename = conf->cachefile ? strdup(conf->cachefile) : NULL;
- else {
- struct blkid_config *c = blkid_read_config(NULL);
- if (!c)
- filename = strdup(get_default_cache_filename());
- else {
- filename = c->cachefile; /* already allocated */
- c->cachefile = NULL;
- blkid_free_config(c);
- }
- }
- return filename;
-}
-
-/**
- * blkid_get_cache:
- * @cache: pointer to return cache handler
- * @filename: path to the cache file or NULL for the default path
- *
- * Allocates and initialize librray cache handler.
- *
- * Returns: 0 on success or number less than zero in case of error.
- */
-int blkid_get_cache(blkid_cache *ret_cache, const char *filename)
-{
- blkid_cache cache;
-
- if (!ret_cache)
- return -BLKID_ERR_PARAM;
-
- blkid_init_debug(0);
-
- DBG(DEBUG_CACHE, printf("creating blkid cache (using %s)\n",
- filename ? filename : "default cache"));
-
- if (!(cache = (blkid_cache) calloc(1, sizeof(struct blkid_struct_cache))))
- return -BLKID_ERR_MEM;
-
- INIT_LIST_HEAD(&cache->bic_devs);
- INIT_LIST_HEAD(&cache->bic_tags);
-
- if (filename && !*filename)
- filename = NULL;
- if (filename)
- cache->bic_filename = strdup(filename);
- else
- cache->bic_filename = blkid_get_cache_filename(NULL);
-
- blkid_read_cache(cache);
- *ret_cache = cache;
- return 0;
-}
-
-/**
- * blkid_put_cache:
- * @cache: cache handler
- *
- * Saves changes to cache file.
- */
-void blkid_put_cache(blkid_cache cache)
-{
- if (!cache)
- return;
-
- (void) blkid_flush_cache(cache);
-
- DBG(DEBUG_CACHE, printf("freeing cache struct\n"));
-
- /* DBG(DEBUG_CACHE, blkid_debug_dump_cache(cache)); */
-
- while (!list_empty(&cache->bic_devs)) {
- blkid_dev dev = list_entry(cache->bic_devs.next,
- struct blkid_struct_dev,
- bid_devs);
- blkid_free_dev(dev);
- }
-
- while (!list_empty(&cache->bic_tags)) {
- blkid_tag tag = list_entry(cache->bic_tags.next,
- struct blkid_struct_tag,
- bit_tags);
-
- while (!list_empty(&tag->bit_names)) {
- blkid_tag bad = list_entry(tag->bit_names.next,
- struct blkid_struct_tag,
- bit_names);
-
- DBG(DEBUG_CACHE, printf("warning: unfreed tag %s=%s\n",
- bad->bit_name, bad->bit_val));
- blkid_free_tag(bad);
- }
- blkid_free_tag(tag);
- }
-
- blkid_free_probe(cache->probe);
-
- free(cache->bic_filename);
- free(cache);
-}
-
-/**
- * blkid_gc_cache:
- * @cache: cache handler
- *
- * Removes garbage (non-existing devices) from the cache.
- */
-void blkid_gc_cache(blkid_cache cache)
-{
- struct list_head *p, *pnext;
- struct stat st;
-
- if (!cache)
- return;
-
- list_for_each_safe(p, pnext, &cache->bic_devs) {
- blkid_dev dev = list_entry(p, struct blkid_struct_dev, bid_devs);
- if (stat(dev->bid_name, &st) < 0) {
- DBG(DEBUG_CACHE,
- printf("freeing %s\n", dev->bid_name));
- blkid_free_dev(dev);
- cache->bic_flags |= BLKID_BIC_FL_CHANGED;
- } else {
- DBG(DEBUG_CACHE,
- printf("Device %s exists\n", dev->bid_name));
- }
- }
-}
-
-#ifdef TEST_PROGRAM
-int main(int argc, char** argv)
-{
- blkid_cache cache = NULL;
- int ret;
-
- blkid_init_debug(DEBUG_ALL);
-
- if ((argc > 2)) {
- fprintf(stderr, "Usage: %s [filename] \n", argv[0]);
- exit(1);
- }
-
- if ((ret = blkid_get_cache(&cache, argv[1])) < 0) {
- fprintf(stderr, "error %d parsing cache file %s\n", ret,
- argv[1] ? argv[1] : blkid_get_cache_filename(NULL));
- exit(1);
- }
- if ((ret = blkid_get_cache(&cache, "/dev/null")) != 0) {
- fprintf(stderr, "%s: error creating cache (%d)\n",
- argv[0], ret);
- exit(1);
- }
- if ((ret = blkid_probe_all(cache)) < 0)
- fprintf(stderr, "error probing devices\n");
-
- blkid_put_cache(cache);
-
- return ret;
-}
-#endif