64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
|  | #!/bin/bash
 | ||
|  | 
 | ||
|  | # Copyright 2019 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. | ||
|  | 
 | ||
|  | set -e | ||
|  | shopt -s nullglob | ||
|  | 
 | ||
|  | winerror="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/shared/winerror.h | sort -Vr | head -n 1)" | ||
|  | [[ -n $winerror ]] || { echo "Unable to find winerror.h" >&2; exit 1; } | ||
|  | 
 | ||
|  | declare -A errors | ||
|  | 
 | ||
|  | { | ||
|  | 	echo "// Code generated by 'mkerrors.bash'; DO NOT EDIT." | ||
|  | 	echo | ||
|  | 	echo "package windows" | ||
|  | 	echo "import \"syscall\"" | ||
|  | 	echo "const (" | ||
|  | 
 | ||
|  | 	while read -r line; do | ||
|  | 		unset vtype | ||
|  | 		if [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +([A-Z0-9_]+\()?([A-Z][A-Z0-9_]+k?)\)? ]]; then | ||
|  | 			key="${BASH_REMATCH[1]}" | ||
|  | 			value="${BASH_REMATCH[3]}" | ||
|  | 		elif [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +([A-Z0-9_]+\()?((0x)?[0-9A-Fa-f]+)L?\)? ]]; then | ||
|  | 			key="${BASH_REMATCH[1]}" | ||
|  | 			value="${BASH_REMATCH[3]}" | ||
|  | 			vtype="${BASH_REMATCH[2]}" | ||
|  | 		elif [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +\(\(([A-Z]+)\)((0x)?[0-9A-Fa-f]+)L?\) ]]; then | ||
|  | 			key="${BASH_REMATCH[1]}" | ||
|  | 			value="${BASH_REMATCH[3]}" | ||
|  | 			vtype="${BASH_REMATCH[2]}" | ||
|  | 		else | ||
|  | 			continue | ||
|  | 		fi | ||
|  | 		[[ -n $key && -n $value ]] || continue | ||
|  | 		[[ -z ${errors["$key"]} ]] || continue | ||
|  | 		errors["$key"]="$value" | ||
|  | 		if [[ -v vtype ]]; then | ||
|  | 			if [[ $key == FACILITY_* || $key == NO_ERROR ]]; then | ||
|  | 				vtype="" | ||
|  | 			elif [[ $vtype == *HANDLE* || $vtype == *HRESULT* ]]; then | ||
|  | 				vtype="Handle" | ||
|  | 			else | ||
|  | 				vtype="syscall.Errno" | ||
|  | 			fi | ||
|  | 			last_vtype="$vtype" | ||
|  | 		else | ||
|  | 			vtype="" | ||
|  | 			if [[ $last_vtype == Handle && $value == NO_ERROR ]]; then | ||
|  | 				value="S_OK" | ||
|  | 			elif [[ $last_vtype == syscall.Errno && $value == NO_ERROR ]]; then | ||
|  | 				value="ERROR_SUCCESS" | ||
|  | 			fi | ||
|  | 		fi | ||
|  | 
 | ||
|  | 		echo "$key $vtype = $value" | ||
|  | 	done < "$winerror" | ||
|  | 
 | ||
|  | 	echo ")" | ||
|  | } | gofmt > "zerrors_windows.go" |