Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/openzfs/tests/zfs-tests/cmd/truncate_test.c
48529 views
1
// SPDX-License-Identifier: CDDL-1.0
2
/*
3
* This file and its contents are supplied under the terms of the
4
* Common Development and Distribution License ("CDDL"), version 1.0.
5
* You may only use this file in accordance with the terms of version
6
* 1.0 of the CDDL.
7
*
8
* A full copy of the text of the CDDL should have accompanied this
9
* source. A copy of the CDDL is also available via the Internet at
10
* http://www.illumos.org/license/CDDL.
11
*/
12
13
/*
14
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
15
* Copyright 2017, loli10K <[email protected]>. All rights reserved.
16
*/
17
18
#include <fcntl.h>
19
#include <sys/stat.h>
20
#include <sys/types.h>
21
#include <unistd.h>
22
#include <errno.h>
23
#include <stdio.h>
24
#include <stdlib.h>
25
26
#define FSIZE 256*1024*1024
27
28
static long fsize = FSIZE;
29
static int errflag = 0;
30
static char *filename = NULL;
31
static int ftruncflag = 0;
32
33
static void parse_options(int argc, char *argv[]);
34
35
static void
36
usage(char *execname)
37
{
38
(void) fprintf(stderr,
39
"usage: %s [-s filesize] [-f] /path/to/file\n", execname);
40
(void) exit(1);
41
}
42
43
int
44
main(int argc, char *argv[])
45
{
46
int fd;
47
48
parse_options(argc, argv);
49
50
if (ftruncflag) {
51
fd = open(filename, O_RDWR|O_CREAT, 0666);
52
if (fd < 0) {
53
perror("open");
54
return (1);
55
}
56
if (ftruncate(fd, fsize) < 0) {
57
perror("ftruncate");
58
return (1);
59
}
60
if (close(fd)) {
61
perror("close");
62
return (1);
63
}
64
} else {
65
if (truncate(filename, fsize) < 0) {
66
perror("truncate");
67
return (1);
68
}
69
}
70
return (0);
71
}
72
73
static void
74
parse_options(int argc, char *argv[])
75
{
76
int c;
77
extern char *optarg;
78
extern int optind, optopt;
79
80
while ((c = getopt(argc, argv, "s:f")) != -1) {
81
switch (c) {
82
case 's':
83
fsize = atoi(optarg);
84
break;
85
case 'f':
86
ftruncflag++;
87
break;
88
case ':':
89
(void) fprintf(stderr,
90
"Option -%c requires an operand\n", optopt);
91
errflag++;
92
break;
93
}
94
if (errflag) {
95
(void) usage(argv[0]);
96
}
97
}
98
99
if (argc <= optind) {
100
(void) fprintf(stderr, "No filename specified\n");
101
usage(argv[0]);
102
}
103
filename = argv[optind];
104
}
105
106