Skip to content

Commit 84a9a94

Browse files
committed
serial: Use newFileHandleDupFd in newVZFileHandleSerialPortAttachment
NewFileHandleSerialPortAttachment has similar limitations as NewDiskBlockDeviceStorageDeviceAttachment. This commit fixes this by using newFileHandleDupFd to implement it. Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
1 parent b0149a0 commit 84a9a94

3 files changed

Lines changed: 16 additions & 4 deletions

File tree

serial_console.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,19 @@ func NewFileHandleSerialPortAttachment(read, write *os.File) (*FileHandleSerialP
4949
return nil, err
5050
}
5151

52+
nserrPtr := newNSErrorAsNil()
5253
attachment := &FileHandleSerialPortAttachment{
5354
pointer: objc.NewPointer(
5455
C.newVZFileHandleSerialPortAttachment(
5556
C.int(read.Fd()),
5657
C.int(write.Fd()),
58+
&nserrPtr,
5759
),
5860
),
5961
}
62+
if err := newNSError(nserrPtr); err != nil {
63+
return nil, err
64+
}
6065
objc.SetFinalizer(attachment, func(self *FileHandleSerialPortAttachment) {
6166
objc.Release(self)
6267
})

virtualization_11.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ void setStorageDevicesVZVirtualMachineConfiguration(void *config,
8686
void *storageDevicesVZVirtualMachineConfiguration(void *config);
8787

8888
/* Configurations */
89-
void *newVZFileHandleSerialPortAttachment(int readFileDescriptor, int writeFileDescriptor);
89+
void *newVZFileHandleSerialPortAttachment(int readFileDescriptor, int writeFileDescriptor, void **error);
9090
void *newVZFileSerialPortAttachment(const char *filePath, bool shouldAppend, void **error);
9191
void *newVZVirtioConsoleDeviceSerialPortConfiguration(void *attachment);
9292
void *VZBridgedNetworkInterface_networkInterfaces(void);

virtualization_11.m

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -448,13 +448,20 @@ void setStorageDevicesVZVirtualMachineConfiguration(void *config,
448448
@discussion
449449
Each file descriptor must a valid.
450450
*/
451-
void *newVZFileHandleSerialPortAttachment(int readFileDescriptor, int writeFileDescriptor)
451+
void *newVZFileHandleSerialPortAttachment(int readFileDescriptor, int writeFileDescriptor, void **error)
452452
{
453453
if (@available(macOS 11, *)) {
454454
VZFileHandleSerialPortAttachment *ret;
455455
@autoreleasepool {
456-
NSFileHandle *fileHandleForReading = [[NSFileHandle alloc] initWithFileDescriptor:readFileDescriptor];
457-
NSFileHandle *fileHandleForWriting = [[NSFileHandle alloc] initWithFileDescriptor:writeFileDescriptor];
456+
NSFileHandle *fileHandleForReading = newFileHandleDupFd(readFileDescriptor, error);
457+
if (error != nil) {
458+
return nil;
459+
}
460+
461+
NSFileHandle *fileHandleForWriting = newFileHandleDupFd(writeFileDescriptor, error);
462+
if (error != nil) {
463+
return nil;
464+
}
458465
ret = [[VZFileHandleSerialPortAttachment alloc]
459466
initWithFileHandleForReading:fileHandleForReading
460467
fileHandleForWriting:fileHandleForWriting];

0 commit comments

Comments
 (0)