* GNU General Public License for more details.
*/
+#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <syslog.h>
static int mount_device(struct blkid_struct_probe *pr, int hotplug)
{
struct mount *m;
- char *device = basename(pr->dev);
+ char *device;
if (!pr)
return -1;
+ device = basename(pr->dev);
+
if (!strcmp(pr->id->name, "swap")) {
if (hotplug && !auto_swap)
return -1;
if (m) {
char *target = m->target;
- char _target[] = "/mnt/mmcblk123";
+ char _target[32];
int err = 0;
if (!target) {
if (!strcmp(pr->dev, fs)) {
struct stat s;
FILE *fp = NULL;
- char tag[32];
- char uuid[32] = { 0 };
+ char tag[64];
+ char uuid[64] = { 0 };
snprintf(tag, sizeof(tag), "%s/etc/.extroot-uuid", path);
if (stat(tag, &s)) {
static int mount_extroot(char *cfg)
{
- char overlay[] = "/tmp/overlay";
- char mnt[] = "/tmp/mnt";
+ char overlay[] = "/tmp/extroot/overlay";
+ char mnt[] = "/tmp/extroot/mnt";
char *path = mnt;
struct blkid_struct_probe *pr;
struct mount *m;
pr = find_block_info(m->uuid, m->label, NULL);
if (!pr && delay_root){
- fprintf(stderr, "extroot: is not ready yet, retrying in %ui seconds\n", delay_root);
+ fprintf(stderr, "extroot: is not ready yet, retrying in %u seconds\n", delay_root);
sleep(delay_root);
mkblkdev();
cache_load(0);
if (config_load(NULL))
return -1;
- cache_load(0);
+ cache_load(1);
list_for_each_entry(pr, &devices, list)
mount_device(pr, 0);
printf("\toption\tanon_mount\t'0'\n");
printf("\toption\tauto_swap\t'1'\n");
printf("\toption\tauto_mount\t'1'\n");
- printf("\toption\tdelay_root\t'0'\n");
+ printf("\toption\tdelay_root\t'5'\n");
printf("\toption\tcheck_fs\t'0'\n\n");
list_for_each_entry(pr, &devices, list)
print_block_uci(pr);
static int main_swapon(int argc, char **argv)
{
if (argc != 2) {
- fprintf(stderr, "Usage: swapoff [-a] [DEVICE]\n\nStop swapping on DEVICE\n\n\t-a Stop swapping on all swap devices\n");
+ fprintf(stderr, "Usage: swapon <-s> <-a> [DEVICE]\n\n\tStart swapping on [DEVICE]\n -a\tStart swapping on all swap devices\n -s\tShow summary\n");
return -1;
}
- if (!strcmp(argv[1], "-a")) {
+ if (!strcmp(argv[1], "-s")) {
+ FILE *fp = fopen("/proc/swaps", "r");
+ char *lineptr = NULL;
+ size_t s;
+
+ if (!fp) {
+ fprintf(stderr, "failed to open /proc/swaps\n");
+ return -1;
+ }
+ while (getline(&lineptr, &s, fp) > 0)
+ printf(lineptr);
+ if (lineptr)
+ free(lineptr);
+ fclose(fp);
+ } else if (!strcmp(argv[1], "-a")) {
struct blkid_struct_probe *pr;
cache_load(0);
struct stat s;
int err;
- if (stat(argv[1], &s) || !S_ISBLK(s.st_mode)) {
- fprintf(stderr, "%s is not a block device\n", argv[1]);
+ if (stat(argv[1], &s) || (!S_ISBLK(s.st_mode) && !S_ISREG(s.st_mode))) {
+ fprintf(stderr, "%s is not a block device or file\n", argv[1]);
return -1;
}
err = swapon(argv[1], 0);
static int main_swapoff(int argc, char **argv)
{
if (argc != 2) {
- fprintf(stderr, "Usage: swapoff [-a] [DEVICE]\n\nStop swapping on DEVICE\n\n\t-a Stop swapping on all swap devices\n");
+ fprintf(stderr, "Usage: swapoff [-a] [DEVICE]\n\n\tStop swapping on DEVICE\n -a\tStop swapping on all swap devices\n");
return -1;
}
struct stat s;
int err;
- if (stat(argv[1], &s) || !S_ISBLK(s.st_mode)) {
- fprintf(stderr, "%s is not a block device\n", argv[1]);
+ if (stat(argv[1], &s) || (!S_ISBLK(s.st_mode) && !S_ISREG(s.st_mode))) {
+ fprintf(stderr, "%s is not a block device or file\n", argv[1]);
return -1;
}
err = swapoff(argv[1]);