mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 22:32:25 -06:00 
			
		
		
		
	This allows for building GoToSocial with [SQLite transpiled to WASM](https://github.com/ncruces/go-sqlite3) and accessed through [Wazero](https://wazero.io/).
		
			
				
	
	
		
			98 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package sys
 | 
						|
 | 
						|
import "strconv"
 | 
						|
 | 
						|
// Errno is a subset of POSIX errno used by wazero interfaces. Zero is not an
 | 
						|
// error. Other values should not be interpreted numerically, rather by constants
 | 
						|
// prefixed with 'E'.
 | 
						|
//
 | 
						|
// See https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html
 | 
						|
type Errno uint16
 | 
						|
 | 
						|
// ^-- Note: This will eventually move to the public /sys package. It is
 | 
						|
// experimental until we audit the socket related APIs to ensure we have all
 | 
						|
// the Errno it returns, and we export fs.FS. This is not in /internal/sys as
 | 
						|
// that would introduce a package cycle.
 | 
						|
 | 
						|
// This is a subset of errors to reduce implementation burden. `wasip1` defines
 | 
						|
// almost all POSIX error numbers, but not all are used in practice. wazero
 | 
						|
// will add ones needed in POSIX order, as needed by functions that explicitly
 | 
						|
// document returning them.
 | 
						|
//
 | 
						|
// https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-errno-enumu16
 | 
						|
const (
 | 
						|
	EACCES Errno = iota + 1
 | 
						|
	EAGAIN
 | 
						|
	EBADF
 | 
						|
	EEXIST
 | 
						|
	EFAULT
 | 
						|
	EINTR
 | 
						|
	EINVAL
 | 
						|
	EIO
 | 
						|
	EISDIR
 | 
						|
	ELOOP
 | 
						|
	ENAMETOOLONG
 | 
						|
	ENOENT
 | 
						|
	ENOSYS
 | 
						|
	ENOTDIR
 | 
						|
	ERANGE
 | 
						|
	ENOTEMPTY
 | 
						|
	ENOTSOCK
 | 
						|
	ENOTSUP
 | 
						|
	EPERM
 | 
						|
	EROFS
 | 
						|
 | 
						|
	// NOTE ENOTCAPABLE is defined in wasip1, but not in POSIX. wasi-libc
 | 
						|
	// converts it to EBADF, ESPIPE or EINVAL depending on the call site.
 | 
						|
	// It isn't known if compilers who don't use ENOTCAPABLE would crash on it.
 | 
						|
)
 | 
						|
 | 
						|
// Error implements error
 | 
						|
func (e Errno) Error() string {
 | 
						|
	switch e {
 | 
						|
	case 0: // not an error
 | 
						|
		return "success"
 | 
						|
	case EACCES:
 | 
						|
		return "permission denied"
 | 
						|
	case EAGAIN:
 | 
						|
		return "resource unavailable, try again"
 | 
						|
	case EBADF:
 | 
						|
		return "bad file descriptor"
 | 
						|
	case EEXIST:
 | 
						|
		return "file exists"
 | 
						|
	case EFAULT:
 | 
						|
		return "bad address"
 | 
						|
	case EINTR:
 | 
						|
		return "interrupted function"
 | 
						|
	case EINVAL:
 | 
						|
		return "invalid argument"
 | 
						|
	case EIO:
 | 
						|
		return "input/output error"
 | 
						|
	case EISDIR:
 | 
						|
		return "is a directory"
 | 
						|
	case ELOOP:
 | 
						|
		return "too many levels of symbolic links"
 | 
						|
	case ENAMETOOLONG:
 | 
						|
		return "filename too long"
 | 
						|
	case ENOENT:
 | 
						|
		return "no such file or directory"
 | 
						|
	case ENOSYS:
 | 
						|
		return "functionality not supported"
 | 
						|
	case ENOTDIR:
 | 
						|
		return "not a directory or a symbolic link to a directory"
 | 
						|
	case ERANGE:
 | 
						|
		return "result too large"
 | 
						|
	case ENOTEMPTY:
 | 
						|
		return "directory not empty"
 | 
						|
	case ENOTSOCK:
 | 
						|
		return "not a socket"
 | 
						|
	case ENOTSUP:
 | 
						|
		return "not supported (may be the same value as [EOPNOTSUPP])"
 | 
						|
	case EPERM:
 | 
						|
		return "operation not permitted"
 | 
						|
	case EROFS:
 | 
						|
		return "read-only file system"
 | 
						|
	default:
 | 
						|
		return "Errno(" + strconv.Itoa(int(e)) + ")"
 | 
						|
	}
 | 
						|
}
 |