diff options
| author | Michael Stapelberg <stapelberg@debian.org> | 2013-03-04 21:27:43 +0100 | 
|---|---|---|
| committer | Michael Stapelberg <michael@stapelberg.de> | 2013-03-04 21:27:43 +0100 | 
| commit | ad47422646a18ffcb47cec916ef7393c923f2e76 (patch) | |
| tree | 7c7861fb3d9539d61c1dcfd5b8dadee974c25760 /src/cmd/fix/osopen.go | |
| parent | 2c8d5d584a79781ca41bb6f4b396893fbbac5b97 (diff) | |
| parent | 04b08da9af0c450d645ab7389d1467308cfc2db8 (diff) | |
| download | golang-ad47422646a18ffcb47cec916ef7393c923f2e76.tar.gz | |
Merge tag 'upstream/1.1_hg20130304' into debian-sid
Upstream version 1.1~hg20130304
Diffstat (limited to 'src/cmd/fix/osopen.go')
| -rw-r--r-- | src/cmd/fix/osopen.go | 124 | 
1 files changed, 0 insertions, 124 deletions
| diff --git a/src/cmd/fix/osopen.go b/src/cmd/fix/osopen.go deleted file mode 100644 index af2796ac2..000000000 --- a/src/cmd/fix/osopen.go +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2011 The Go Authors.  All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -import ( -	"go/ast" -) - -func init() { -	register(osopenFix) -} - -var osopenFix = fix{ -	"osopen", -	"2011-04-04", -	osopen, -	`Adapt os.Open calls to new, easier API and rename O_CREAT O_CREATE. - -http://codereview.appspot.com/4357052 -`, -} - -func osopen(f *ast.File) bool { -	if !imports(f, "os") { -		return false -	} - -	fixed := false -	walk(f, func(n interface{}) { -		// Rename O_CREAT to O_CREATE. -		if expr, ok := n.(ast.Expr); ok && isPkgDot(expr, "os", "O_CREAT") { -			expr.(*ast.SelectorExpr).Sel.Name = "O_CREATE" -			fixed = true -			return -		} - -		// Fix up calls to Open. -		call, ok := n.(*ast.CallExpr) -		if !ok || len(call.Args) != 3 { -			return -		} -		if !isPkgDot(call.Fun, "os", "Open") { -			return -		} -		sel := call.Fun.(*ast.SelectorExpr) -		args := call.Args -		// os.Open(a, os.O_RDONLY, c) -> os.Open(a) -		if isPkgDot(args[1], "os", "O_RDONLY") || isPkgDot(args[1], "syscall", "O_RDONLY") { -			call.Args = call.Args[0:1] -			fixed = true -			return -		} -		// os.Open(a, createlike_flags, c) -> os.Create(a, c) -		if isCreateFlag(args[1]) { -			sel.Sel.Name = "Create" -			if !isSimplePerm(args[2]) { -				warn(sel.Pos(), "rewrote os.Open to os.Create with permission not 0666") -			} -			call.Args = args[0:1] -			fixed = true -			return -		} -		// Fallback: os.Open(a, b, c) -> os.OpenFile(a, b, c) -		sel.Sel.Name = "OpenFile" -		fixed = true -	}) -	return fixed -} - -func isCreateFlag(flag ast.Expr) bool { -	foundCreate := false -	foundTrunc := false -	// OR'ing of flags: is O_CREATE on?  + or | would be fine; we just look for os.O_CREATE -	// and don't worry about the actual operator. -	p := flag.Pos() -	for { -		lhs := flag -		expr, isBinary := flag.(*ast.BinaryExpr) -		if isBinary { -			lhs = expr.Y -		} -		sel, ok := lhs.(*ast.SelectorExpr) -		if !ok || !isTopName(sel.X, "os") { -			return false -		} -		switch sel.Sel.Name { -		case "O_CREATE": -			foundCreate = true -		case "O_TRUNC": -			foundTrunc = true -		case "O_RDONLY", "O_WRONLY", "O_RDWR": -			// okay  -		default: -			// Unexpected flag, like O_APPEND or O_EXCL. -			// Be conservative and do not rewrite. -			return false -		} -		if !isBinary { -			break -		} -		flag = expr.X -	} -	if !foundCreate { -		return false -	} -	if !foundTrunc { -		warn(p, "rewrote os.Open with O_CREATE but not O_TRUNC to os.Create") -	} -	return foundCreate -} - -func isSimplePerm(perm ast.Expr) bool { -	basicLit, ok := perm.(*ast.BasicLit) -	if !ok { -		return false -	} -	switch basicLit.Value { -	case "0666": -		return true -	} -	return false -} | 
