dotfiles

regexghost dotfiles and scripts
git clone https://git.regexghost.com/dotfiles.git
Log | Files | Refs | README

string-trunc.c (950B)


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 #include <unistd.h>
      5 
      6 int main(int argc, char* argv[]) {
      7 	if (argc != 3) {
      8 		printf("Usage: string-trunc <length> <suffix>\n");
      9 		return 1;
     10 	}
     11 
     12 	int length = atoi(argv[1]);
     13 	if (length == 0) {
     14 		printf("Usage: string-trunc <length> <suffix>\n");
     15 		return 1;
     16 	}
     17 	char* suffix = argv[2];
     18 
     19 	char buffer[length+5];
     20 	memset(buffer, 0, sizeof(buffer));
     21 
     22 	while(fgets(buffer, sizeof(buffer), stdin) != NULL) {
     23 
     24 		// https://stackoverflow.com/questions/59847042/how-to-read-only-first-n-characters-from-each-line-in-c-language/59847195#59847195
     25 		char* p = strchr(buffer, '\n');
     26 		if (!p) {
     27 			fscanf(stdin, "%*[^\n]\n");
     28 		} else {
     29 			*p = '\0';
     30 		}
     31 
     32 		if (strlen(buffer) >= length) {
     33 			char truncated[length+5];
     34 			memset(truncated, 0, sizeof(truncated));
     35 			strncpy(truncated, buffer, length-strlen(suffix));
     36 			printf("%s%s\n", truncated, suffix);
     37 		} else {
     38 			printf("%s\n", buffer);
     39 		}
     40 	}
     41 }