gitlab.com/apertussolutions/u-root@v7.0.0+incompatible/cmds/core/losetup/losetup.go (about)

     1  // Copyright 2012-2017 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // losetup sets up and controls loop devices.
     6  //
     7  // Synopsis:
     8  //     losetup [-Ad] FILE
     9  //     losetup [-Ad] DEV FILE
    10  //
    11  // Options:
    12  //     -A: pick any device
    13  //     -d: detach the device
    14  package main
    15  
    16  import (
    17  	"flag"
    18  	"log"
    19  	"os"
    20  
    21  	"github.com/u-root/u-root/pkg/mount/loop"
    22  )
    23  
    24  var (
    25  	detach = flag.Bool("d", false, "Detach the device")
    26  )
    27  
    28  func main() {
    29  	var (
    30  		filename, devicename string
    31  		err                  error
    32  	)
    33  
    34  	flag.Parse()
    35  	args := flag.Args()
    36  	if *detach {
    37  		if len(args) == 1 {
    38  			if err := loop.ClearFile(args[0]); err != nil {
    39  				log.Fatal("Error clearing device: ", err)
    40  			}
    41  			log.Println("Detached", args[0])
    42  			os.Exit(0)
    43  		}
    44  		flag.Usage()
    45  		log.Fatal("Syntax Error")
    46  	}
    47  
    48  	if len(args) == 1 {
    49  		devicename, err = loop.FindDevice()
    50  		if err != nil {
    51  			log.Fatalf("can't find a loop: %v", err)
    52  			os.Exit(1)
    53  		}
    54  		filename = args[0]
    55  	} else if len(args) == 2 {
    56  		devicename = args[0]
    57  		filename = args[1]
    58  	} else {
    59  		flag.Usage()
    60  		log.Fatal("Syntax Error")
    61  	}
    62  
    63  	if err := loop.SetFile(devicename, filename); err != nil {
    64  		log.Fatal("Could not set loop device:", err)
    65  	}
    66  
    67  	log.Printf("Attached %s to %s", devicename, filename)
    68  
    69  }