You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.5 KiB

// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved.
* Author: Vatsal Avasthi
*
* Test Description:
* 1) flock() returns -1 and sets error number to EBADF if the file descriptor
* is invalid.
* 2) flock() returns -1 and sets error number to EINVAL if the argument
* operation does not include LOCK_SH,LOCK_EX,LOCK_UN.
* 3) flock() returns -1 and sets error number to EINVAL if an invalid
* combination of locking modes is used i.e LOCK_SH with LOCK_EX
*/
#include <errno.h>
#include <sys/file.h>
#include "tst_test.h"
static int badfd = -1;
static int fd;
static struct tcase {
int *fd;
int operation;
int exp_err;
} tcases[] = {
{&badfd, LOCK_SH, EBADF},
{&fd, LOCK_NB, EINVAL},
{&fd, LOCK_SH | LOCK_EX, EINVAL},
};
static void verify_flock(unsigned n)
{
struct tcase *tc = &tcases[n];
fd = SAFE_OPEN("testfile", O_RDWR);
TEST(flock(*tc->fd, tc->operation));
if (TST_RET == 0) {
tst_res(TFAIL | TTERRNO, "flock() succeeded unexpectedly");
SAFE_CLOSE(fd);
return;
}
if (tc->exp_err == TST_ERR) {
tst_res(TPASS | TTERRNO, "flock() failed expectedly");
} else {
tst_res(TFAIL | TTERRNO, "flock() failed unexpectedly, "
"expected %s", tst_strerrno(tc->exp_err));
}
SAFE_CLOSE(fd);
}
static void setup(void)
{
int fd1;
fd1 = SAFE_OPEN("testfile", O_CREAT | O_TRUNC | O_RDWR, 0666);
SAFE_CLOSE(fd1);
}
static struct tst_test test = {
.tcnt = ARRAY_SIZE(tcases),
.test = verify_flock,
.needs_tmpdir = 1,
.setup = setup,
};