/* vi: set sw=4 ts=4: */
/*
 * freeramdisk and fdflush implementations for busybox
 *
 * Copyright (C) 2000 and written by Emanuele Caratti <wiz@iol.it>
 * Adjusted a bit by Erik Andersen <andersen@codepoet.org>
 * Unified with fdflush by Tito Ragusa <farmatito@tiscali.it>
 *
 * Licensed under GPLv2, see file LICENSE in this source tree.
 */
//config:config FDFLUSH
//config:	bool "fdflush"
//config:	default y
//config:	select PLATFORM_LINUX
//config:	help
//config:	  fdflush is only needed when changing media on slightly-broken
//config:	  removable media drives. It is used to make Linux believe that a
//config:	  hardware disk-change switch has been actuated, which causes Linux to
//config:	  forget anything it has cached from the previous media. If you have
//config:	  such a slightly-broken drive, you will need to run fdflush every time
//config:	  you change a disk. Most people have working hardware and can safely
//config:	  leave this disabled.
//config:
//config:config FREERAMDISK
//config:	bool "freeramdisk"
//config:	default y
//config:	select PLATFORM_LINUX
//config:	help
//config:	  Linux allows you to create ramdisks. This utility allows you to
//config:	  delete them and completely free all memory that was used for the
//config:	  ramdisk. For example, if you boot Linux into a ramdisk and later
//config:	  pivot_root, you may want to free the memory that is allocated to the
//config:	  ramdisk. If you have no use for freeing memory from a ramdisk, leave
//config:	  this disabled.

//applet:IF_FDFLUSH(APPLET_ODDNAME(fdflush, freeramdisk, BB_DIR_BIN, BB_SUID_DROP, fdflush))
//applet:IF_FREERAMDISK(APPLET(freeramdisk, BB_DIR_SBIN, BB_SUID_DROP))

//kbuild:lib-$(CONFIG_FDFLUSH) += freeramdisk.o
//kbuild:lib-$(CONFIG_FREERAMDISK) += freeramdisk.o

//usage:#define freeramdisk_trivial_usage
//usage:       "DEVICE"
//usage:#define freeramdisk_full_usage "\n\n"
//usage:       "Free all memory used by the specified ramdisk"
//usage:
//usage:#define freeramdisk_example_usage
//usage:       "$ freeramdisk /dev/ram2\n"
//usage:
//usage:#define fdflush_trivial_usage
//usage:       "DEVICE"
//usage:#define fdflush_full_usage "\n\n"
//usage:       "Force floppy disk drive to detect disk change"

#include <sys/mount.h>
#include "libbb.h"

/* From <linux/fd.h> */
#define FDFLUSH  _IO(2,0x4b)

int freeramdisk_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int freeramdisk_main(int argc UNUSED_PARAM, char **argv)
{
	int fd;

	fd = xopen(single_argv(argv), O_RDWR);

	// Act like freeramdisk, fdflush, or both depending on configuration.
	ioctl_or_perror_and_die(fd, (ENABLE_FREERAMDISK && applet_name[1] == 'r')
			|| !ENABLE_FDFLUSH ? BLKFLSBUF : FDFLUSH, NULL, "%s", argv[1]);

	if (ENABLE_FEATURE_CLEAN_UP) close(fd);

	return EXIT_SUCCESS;
}
