github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+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 }