blob: e052e5a80700bb77c573692a0a44b8b66be51398 [file] [log] [blame]
/* magic */
// Do not edit the line above.
// RUN: %empty-directory(%t)
// RUN: %target-run-simple-swift %s %t | %FileCheck %s
// REQUIRES: executable_test
// TODO: rdar://problem/33388782
// REQUIRES: CPU=x86_64
#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS)
import Darwin
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android)
import Glibc
#elseif os(Windows)
import MSVCRT
#endif
let sourcePath = CommandLine.arguments[1]
let tempPath = CommandLine.arguments[2] + "/libc.txt"
// CHECK: Hello world
fputs("Hello world", stdout)
// CHECK: 4294967295
print("\(UINT32_MAX)")
// CHECK: the magic word is ///* magic *///
let sourceFile = open(sourcePath, O_RDONLY)
assert(sourceFile >= 0)
var bytes = UnsafeMutablePointer<CChar>.allocate(capacity: 12)
var readed = read(sourceFile, bytes, 11)
close(sourceFile)
assert(readed == 11)
bytes[11] = CChar(0)
print("the magic word is //\(String(cString: bytes))//")
// CHECK: O_CREAT|O_EXCL returned errno *17*
let errFile =
open(sourcePath, O_RDONLY | O_CREAT | O_EXCL)
if errFile != -1 {
print("O_CREAT|O_EXCL failed to return an error")
} else {
let e = errno
print("O_CREAT|O_EXCL returned errno *\(e)*")
}
// CHECK-NOT: error
// CHECK: created mode *33216* *33216*
let tempFile =
open(tempPath, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR | S_IXUSR)
if tempFile == -1 {
let e = errno
print("error: open(tempPath \(tempPath)) returned -1, errno \(e)")
abort()
}
let written = write(tempFile, bytes, 11)
if (written != 11) {
print("error: write(tempFile) returned \(written), errno \(errno)")
abort()
}
var err: Int32
var statbuf1 = stat()
err = fstat(tempFile, &statbuf1)
if err != 0 {
let e = errno
print("error: fstat returned \(err), errno \(e)")
abort()
}
close(tempFile)
var statbuf2 = stat()
err = stat(tempPath, &statbuf2)
if err != 0 {
let e = errno
print("error: stat returned \(err), errno \(e)")
abort()
}
print("created mode *\(statbuf1.st_mode)* *\(statbuf2.st_mode)*")
assert(statbuf1.st_mode == S_IFREG | S_IRUSR | S_IWUSR | S_IXUSR)
assert(statbuf1.st_mode == statbuf2.st_mode)