OPENDISK(3)

OPENDISK(3) | Library Functions Manual | OPENDISK(3)

# NAME

`opendisk`, `opendisk1` —
open a disk partition

# LIBRARY

System Utilities Library (libutil, -lutil)

# SYNOPSIS

`#include <util.h>`

int
`opendisk`(const char *path, int flags, char *buf, size_t buflen, int iscooked);

int
`opendisk1`(const char *path, int flags, char *buf, size_t buflen, int iscooked, int (*ofn)(const char *, int, ...)));

# DESCRIPTION

`opendisk`() opens path, for reading and/or writing as specified by the argument flags using open(2), and the file descriptor is returned to the caller. buf is used to store the resultant filename. buflen is the size, in bytes, of the array referenced by buf (usually `MAXPATHLEN` bytes). iscooked controls which paths in /dev are tried.

`opendisk`() attempts to open the following variations of path, in order:

If path does not contain a slash (“/”), the following variations are attempted:

- If iscooked is zero:
  /dev/rpath
    path with a prefix of “/dev/r”.
  /dev/rpathX
    path with a prefix of “/dev/r” and a suffix of ‘X’ (q.v.).
- If iscooked is non-zero:
  /dev/path
    path with a prefix of “/dev/”.
  /dev/pathX
    path with a prefix of “/dev/” and a suffix of ‘X’ (q.v.).

If the above fails, then the original path is tried using the following two variations:

- The iscooked value is ignored:
  path
    The pathname as given.
  pathX
    path with a suffix of ‘X’, where ‘X’ represents the raw partition of the device, as determined by getrawpartition(3), usually “c” or “d”.

`opendisk1`() is identical to `opendisk`() except uses the supplied ofn function instead of open(2). This function must be compatible with open(2) in the parameters it takes, the value it returns, and way that errors are indicated.

# RETURN VALUES

An open file descriptor, or -1 if the open(2) failed.

# ERRORS

`opendisk`() and `opendisk1`() may set errno to one of the following values:

[`EFAULT`]
  buf was the `NULL` pointer.
[`EINVAL`]
  `O_CREAT` was set in flags, or getrawpartition(3) didn't return a valid partition.

The `opendisk`() function may also set errno to any value specified by the open(2) function.

The `opendisk1`() function may also set errno to any value set by the ofn function.

# SEE ALSO

open(2), getrawpartition(3)

# HISTORY

The `opendisk`() function first appeared in NetBSD 1.3.

The `opendisk1`() function first appeared in NetBSD 6.0, and was documented in NetBSD 8.0.

The lookup order of `opendisk`() was changed in NetBSD 7.1 to first look in /dev in order to avoid opening random files in the current working directory.

April 4, 2018 | NetBSD 9.4