static void PRS(int argc, char *argv[])
{
- int b, c;
+ int b, c, flags;
int cluster_size = 0;
char *tmp, **cpp;
int blocksize = 0;
profile_get_integer(profile, "options", "proceed_delay", 0, 0,
&proceed_delay);
- if (!check_plausibility(device_name, CREATE_FILE,
- &is_device) && !force)
+ /* The isatty() test is so we don't break existing scripts */
+ flags = CREATE_FILE;
+ if (isatty(0) && isatty(1))
+ flags |= CHECK_FS_EXIST;
+ if (!check_plausibility(device_name, flags, &is_device) && !force)
proceed_question(proceed_delay);
check_mount(device_name, force, _("filesystem"));
int fd, is_dev = 0;
ext2fs_struct_stat s;
int fl = O_RDONLY;
+ blkid_cache cache = NULL;
+ char *fs_type = NULL;
+ char *fs_label = NULL;
if (flags & CREATE_FILE)
fl |= O_CREAT;
return 0;
}
+ if ((flags & CHECK_FS_EXIST) && blkid_get_cache(&cache, NULL) >= 0) {
+ fs_type = blkid_get_tag_value(cache, "TYPE", device);
+ if (fs_type)
+ fs_label = blkid_get_tag_value(cache, "LABEL", device);
+ blkid_put_cache(cache);
+ }
+
+ if (fs_type) {
+ if (fs_label)
+ printf(_("%s contains a %s file system "
+ "labelled '%s'\n"), device, fs_type, fs_label);
+ else
+ printf(_("%s contains a %s file system\n"), device,
+ fs_type);
+ free(fs_type);
+ free(fs_label);
+ return 0;
+ }
+
+ /*
+ * We should eventually replace this with a test for the
+ * presence of a partition table. Unfortunately the blkid
+ * library doesn't test for partition tabels, and checking for
+ * valid GPT and MBR and possibly others isn't quite trivial.
+ */
+
#ifdef HAVE_LINUX_MAJOR_H
#ifndef MAJOR
#define MAJOR(dev) ((dev)>>8)
*/
#define CHECK_BLOCK_DEV 0x0001
#define CREATE_FILE 0x0002
+#define CHECK_FS_EXIST 0x0004
#ifndef HAVE_STRCASECMP
extern int strcasecmp (char *s1, char *s2);