6 Commits

Author SHA1 Message Date
DTB
09d9c93ff3 Merge branch 'pschdir' into overgrown 2024-07-23 18:08:14 -06:00
DTB
f4514592bd pschdir(1): license 2024-07-23 18:07:59 -06:00
DTB
87b063f7bd Merge branch 'retval' into overgrown 2024-07-23 18:00:01 -06:00
DTB
1c6e2970f7 retval(1) sans documentation 2024-07-23 17:58:49 -06:00
DTB
46f0d4955f pschdir(1): add source file 2024-07-23 17:39:55 -06:00
DTB
a8c40de747 pschdir(1) sans documentation, from trinity/src 2024-07-23 17:39:03 -06:00
4 changed files with 79 additions and 43 deletions

View File

@@ -32,7 +32,7 @@ RUSTLIBS = --extern getopt=build/o/libgetopt.rlib \
CFLAGS += -I$(SYSEXITS)
.PHONY: all
all: argued dj false fop hru intcmp mm npc rpn scrut str strcmp swab true
all: dj false fop hru intcmp mm npc pschdir retval rpn scrut str strcmp swab true
# keep build/include until bindgen(1) has stdin support
# https://github.com/rust-lang/rust-bindgen/issues/2703
@@ -87,11 +87,6 @@ build/o/libsysexits.rlib: build/include/sysexits.h
build/include/sysexits.h: build $(SYSEXITS)sysexits.h
printf '\043define EXIT_FAILURE 1\n' | cat - $(SYSEXITS)sysexits.h > $@
.PHONY: argued
argued: build/bin/argued
build/bin/argued: src/argued.rs build
$(RUSTC) $(RUSTFLAGS) -o $@ src/argued.rs
.PHONY: dj
dj: build/bin/dj
build/bin/dj: src/dj.c build
@@ -127,6 +122,16 @@ npc: build/bin/npc
build/bin/npc: src/npc.c build
$(CC) $(CFLAGAS) -o $@ src/npc.c
.PHONY: pschdir
pschdir: build/bin/pschdir
build/bin/pschdir: src/pschdir.c build
$(CC) $(CFLAGS) -o $@ src/pschdir.c
.PHONY: retval
retval: build/bin/retval
build/bin/retval: src/retval.rs build rustlibs
$(RUSTC) $(RUSTFLAGS) $(RUSTLIBS) -o $@ src/retval.rs
.PHONY: rpn
rpn: build/bin/rpn
build/bin/rpn: src/rpn.rs build rustlibs

View File

@@ -1,28 +0,0 @@
.\" Copyright (c) 20222024 DTB <trinity@trinity.moe>
.\"
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\"
.TH ARGUED 1 2024-07-23 "Harakit-overgrown X.X.X"
.SH NAME
argued \(en check for arguments
.\"
.SH DESCRIPTION
.BR argued (1)
exits successfully if any arguments are provided, and unsuccessfully
otherwise.
.\"
.SH AUTHOR
Written by DTB
.MT trinity@trinity.moe
.ME .
.\"
.SH COPYRIGHT
This work is marked with CC0 1.0. To see a copy of this license, visit
<http://creativecommons.org/publicdomain/zero/1.0>.
.\"
.SH SEE ALSO
.BR test (1)

48
src/pschdir.c Normal file
View File

@@ -0,0 +1,48 @@
/*
* Copyright (c) 2024 DTB <trinity@trinity.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any
* later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
#include <errno.h> /* EACCESS, ELOOP, ENAMETOOLONG, ENOENT, ENOTDIR, errno */
#include <stdio.h> /* fprintf(3), stderr */
#include <string.h> /* strerror(3) */
#include <sysexits.h> /* EX_OSERR, EX_NOPERM, EX_NOINPUT, EX_UNAVAILABLE,
* EX_USAGE */
#include <unistd.h> /* chdir(2) */
char *program_name = "pschdir";
int main(int argc, char *argv[]){
if (argc < 3) {
fprintf(stderr, "Usage: %s directory command [argument...]\n",
argv[0] == NULL ? program_name : argv[0]);
return EX_USAGE;
}
if(chdir(argv[1]) != 0){
fprintf(stderr, "%s: %s: %s\n", argv[0], argv[1], strerror(errno));
switch (errno) {
case ENAMETOOLONG: return EX_OSERR;
case EACCES: return EX_NOPERM;
case ENOENT:
case ENOTDIR: return EX_NOINPUT;
default: return EX_UNAVAILABLE;
}
}
execvp(argv[2], &argv[2]);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022_2024 DTB <trinity@trinity.moe>
* Copyright (c) 2024 DTB <trinity@trinity.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*
* This program is free software: you can redistribute it and/or modify it under
@@ -18,11 +18,22 @@
use std::{ env::args, process::ExitCode };
extern crate sysexits;
use sysexits::EX_USAGE;
fn usage(s: &str) -> ExitCode {
eprintln!("Usage: {} status", s);
ExitCode::from(EX_USAGE)
}
fn main() -> ExitCode {
let argv = args().collect::<Vec<String>>();
match argv.len() {
0 | 1 => ExitCode::FAILURE,
_ => ExitCode::SUCCESS
2 => match argv[1].parse::<u8>() {
Ok(e) => ExitCode::from(e),
_ => usage(&argv[0])
},
_ => usage(&argv[0])
}
}