mktemp
This commit is contained in:
parent
0e91bb1ec5
commit
a2fae4ab76
3
TODO
3
TODO
@ -1,8 +1,6 @@
|
|||||||
With "micro-" prefix
|
With "micro-" prefix
|
||||||
|
|
||||||
*Todo:
|
*Todo:
|
||||||
mktemp
|
|
||||||
ln
|
|
||||||
nice
|
nice
|
||||||
renice
|
renice
|
||||||
nohup
|
nohup
|
||||||
@ -12,6 +10,7 @@ split
|
|||||||
truncate
|
truncate
|
||||||
date
|
date
|
||||||
tee
|
tee
|
||||||
|
ln
|
||||||
tr
|
tr
|
||||||
cut
|
cut
|
||||||
shuf
|
shuf
|
||||||
|
94
coreutils/mktemp.c
Normal file
94
coreutils/mktemp.c
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
int make_temp_dir(char *tmp) {
|
||||||
|
if (!mkdtemp(tmp)) {
|
||||||
|
if (errno == EINVAL)
|
||||||
|
fprintf(stderr, "mktemp: template does not end in exactly 'XXXXX': %s\n", tmp);
|
||||||
|
|
||||||
|
else
|
||||||
|
fprintf(stderr, "mktemp: %s\n", strerror(errno));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_suffix(const char *str) {
|
||||||
|
size_t len = strlen(str);
|
||||||
|
for (size_t i = len - 1; i >= 0; i--)
|
||||||
|
if (str[i] == 'X')
|
||||||
|
return len - i - 1;
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int make_temp_file(char *tmp) {
|
||||||
|
if (!strstr(tmp, "XXXXXX")) {
|
||||||
|
fprintf(stderr, "mktemp: too few X's in template: %s\n", tmp);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fd = mkstemps(tmp, get_suffix(tmp));
|
||||||
|
if (fd < 0) {
|
||||||
|
fprintf(stderr, "mktemp: %s\n", strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(const int argc, char **argv) {
|
||||||
|
unsigned int d_flag = 0;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = 1; i < argc; i++) {
|
||||||
|
if (argv[i][0] != '-')
|
||||||
|
break;
|
||||||
|
|
||||||
|
else if (!strcmp(argv[i], "-d"))
|
||||||
|
d_flag = 1;
|
||||||
|
|
||||||
|
else if (!strcmp(argv[i], "--help")) {
|
||||||
|
printf("mktemp [-d] [file]\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc - i == 0) {
|
||||||
|
fprintf(stderr, "mktemp: missing operand\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc - 1 > i) {
|
||||||
|
fprintf(stderr, "mktemp: extra operands\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *path = getenv("TMPDIR");
|
||||||
|
if (!path || path[0] == '\0')
|
||||||
|
path = "/tmp";
|
||||||
|
|
||||||
|
if (chdir(path)) {
|
||||||
|
fprintf(stderr, "mktemp: %s\n", strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d_flag) {
|
||||||
|
if (make_temp_dir(argv[i]))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
if (make_temp_file(argv[i]))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%s/%s\n", path, argv[i]);
|
||||||
|
return 0;
|
||||||
|
}
|
@ -64,15 +64,16 @@ int main(const int argc, char **argv) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int status = 0;
|
||||||
for (int i = 1; i < argc; i++) {
|
for (int i = 1; i < argc; i++) {
|
||||||
if (argv[i][0] == '-')
|
if (argv[i][0] == '-')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int status = rmtree(argv[i]);
|
int status = rmtree(argv[i]);
|
||||||
if (status != 0)
|
if (status != 0)
|
||||||
|
status = 1;
|
||||||
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user