forked from bonsai/harakit
		
	cat(1p), true(1p), false(1p): added source files & Makefile
This commit is contained in:
		
							parent
							
								
									3b58aa764a
								
							
						
					
					
						commit
						bb099036fb
					
				
							
								
								
									
										28
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | |||||||
|  | # Copyright (c) 2023 YAC
 | ||||||
|  | # SPDX-License-Identifier: FSFAP
 | ||||||
|  | #
 | ||||||
|  | # Copying and distribution of this file, with or without modification, are
 | ||||||
|  | # permitted in any medium without royalty provided the copyright notice and this
 | ||||||
|  | # notice are preserved.  This file is offered as-is, without any warranty.
 | ||||||
|  | 
 | ||||||
|  | .POSIX: | ||||||
|  | 
 | ||||||
|  | PREFIX=/usr/local/bin | ||||||
|  | 
 | ||||||
|  | build: build_dir cat false true | ||||||
|  | 
 | ||||||
|  | cat: build_dir | ||||||
|  | 	cc -o build/cat src/cat.c | ||||||
|  | 
 | ||||||
|  | false: build_dir | ||||||
|  | 	cc -o build/false src/false.c | ||||||
|  | 
 | ||||||
|  | true: build_dir | ||||||
|  | 	cc -o build/true src/true.c | ||||||
|  | 
 | ||||||
|  | build_dir: | ||||||
|  | 	mkdir -p build | ||||||
|  | 
 | ||||||
|  | install: build | ||||||
|  | 	mkdir -p $(PREFIX) | ||||||
|  | 	cp -f build/* $(PREFIX)/ | ||||||
							
								
								
									
										99
									
								
								src/cat.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								src/cat.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,99 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2023 YAC | ||||||
|  |  * SPDX-License-Identifier: AGPL-3.0-or-later | ||||||
|  |  * | ||||||
|  |  * This file is part of YAC coreutils. | ||||||
|  |  * | ||||||
|  |  * YAC coreutils 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. | ||||||
|  |  *  | ||||||
|  |  * YAC coreutils 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 <fcntl.h> | ||||||
|  | #include <sysexits.h> | ||||||
|  | #include <stdbool.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <unistd.h> | ||||||
|  | 
 | ||||||
|  | int main(int argc, char *argv[]) { | ||||||
|  | 	int i = 1; | ||||||
|  | 	bool u = false; | ||||||
|  | 
 | ||||||
|  | 	char *usage_text = "(-u) [file...]"; | ||||||
|  | 	int buf_size = strlen(argv[0]) + strlen("Usage: ") + strlen(usage_text) + 3; | ||||||
|  | 	char *usage = calloc(buf_size, buf_size); | ||||||
|  | 
 | ||||||
|  | 	if (( | ||||||
|  | 		snprintf(usage, buf_size, "Usage: %s (-u) [file...]\n", argv[0]) | ||||||
|  | 	) < 0 ) {} | ||||||
|  | 
 | ||||||
|  | 	int opt; | ||||||
|  | 
 | ||||||
|  | 	while ((opt = getopt(argc, argv, "u")) != -1) { | ||||||
|  | 		switch(opt) { | ||||||
|  | 			/*
 | ||||||
|  | 			 * From cat(1p): | ||||||
|  | 			 * | ||||||
|  | 			 * -u        Write bytes from the input file to the standard output | ||||||
|  | 			 *           without delay as each is read. | ||||||
|  | 			 */ | ||||||
|  | 			case 'u': | ||||||
|  | 				i = 2; | ||||||
|  | 				u = true; | ||||||
|  | 				break; | ||||||
|  | 			default: | ||||||
|  | 				break; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	FILE *file; | ||||||
|  | 
 | ||||||
|  | 	for (; i <= (argc - 1); i++) { | ||||||
|  | 	  /*
 | ||||||
|  | 		 * From cat(1p): | ||||||
|  | 		 * | ||||||
|  | 		 * file      A pathname of an input file. If no file operands are | ||||||
|  | 		 *           specified, the standard input shall be used. If a file is | ||||||
|  | 		 *           '-', the cat utility shall read from the standard input at | ||||||
|  | 		 *           that point in the sequence. The cat utility shall not close | ||||||
|  | 		 *           and reopen standard input when it is referenced in this way, | ||||||
|  | 		 *           but shall accept multiple occurrences of '-' as a file | ||||||
|  | 		 *           operand. | ||||||
|  | 		 */ | ||||||
|  | 		printf("argv[%d]: %s\n", i, argv[1]); | ||||||
|  | 
 | ||||||
|  | 		if (argc == 1 || argv[i] == "-") { file = fdopen(1, "r"); } | ||||||
|  | 		else if ((file = fopen(argv[i], O_RDONLY)) == NULL) { | ||||||
|  | 			fputs(usage, stderr);  | ||||||
|  | 			return EX_NOINPUT; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		int byte = 0; | ||||||
|  | 
 | ||||||
|  | 		if (u) { | ||||||
|  | 			while (byte != EOF) { | ||||||
|  | 				byte = fgetc(file); | ||||||
|  | 				putchar(byte); | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			char *buf = calloc(4096, 1); | ||||||
|  | 		} | ||||||
|  | 		if (fclose(file) == -1) { | ||||||
|  | 			fprintf(stderr, "%s: %s: Error closing file.\n", argv[0], argv[i]); | ||||||
|  | 			return EX_OSERR; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return EX_OK; | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								src/false.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/false.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2023 YAC | ||||||
|  |  * SPDX-License-Identifier: AGPL-3.0-or-later | ||||||
|  |  * | ||||||
|  |  * This file is part of YAC coreutils. | ||||||
|  |  * | ||||||
|  |  * YAC coreutils 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. | ||||||
|  |  *  | ||||||
|  |  * YAC coreutils 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/.
 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | int main() { return 1; } | ||||||
							
								
								
									
										21
									
								
								src/true.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/true.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2023 YAC | ||||||
|  |  * SPDX-License-Identifier: AGPL-3.0-or-later | ||||||
|  |  * | ||||||
|  |  * This file is part of YAC coreutils. | ||||||
|  |  * | ||||||
|  |  * YAC coreutils 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. | ||||||
|  |  *  | ||||||
|  |  * YAC coreutils 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/.
 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | int main() {} | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user