2023-03-28 16:16:14 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <string.h>
|
2022-12-18 16:54:07 +00:00
|
|
|
|
2024-03-23 20:35:44 +00:00
|
|
|
#include "../strings/strings.h"
|
2022-12-18 16:54:07 +00:00
|
|
|
|
2023-07-12 12:44:56 +00:00
|
|
|
#define LIBRE_N 50
|
2022-12-18 16:54:07 +00:00
|
|
|
|
2022-12-17 19:47:44 +00:00
|
|
|
/* Inspired by https://libredirect.github.io/, but in C. */
|
2022-12-18 16:54:07 +00:00
|
|
|
int libre_redirect(const char* uri, char* output)
|
|
|
|
{
|
2024-03-23 19:44:01 +00:00
|
|
|
int len_uri = strlen(uri);
|
|
|
|
int len_output = strlen(output);
|
2022-12-18 16:54:07 +00:00
|
|
|
|
2024-03-23 19:44:01 +00:00
|
|
|
if ((len_output - len_uri) < LIBRE_N) {
|
2024-03-23 20:54:15 +00:00
|
|
|
fprintf(stderr, "Not enough memory\n");
|
2023-03-28 16:16:14 +00:00
|
|
|
return 1; // not enough memory.
|
|
|
|
} else {
|
|
|
|
char* annoying_sites[] = {
|
|
|
|
"https://www.reddit.com",
|
2023-05-03 22:02:49 +00:00
|
|
|
"https://www.youtube.com",
|
2023-06-25 22:22:15 +00:00
|
|
|
"https://google.com",
|
2023-03-28 16:16:14 +00:00
|
|
|
"https://medium.com",
|
|
|
|
"https://translate.google.com",
|
|
|
|
"https://www.bloomberg.com",
|
2023-06-05 01:15:32 +00:00
|
|
|
"https://www.royalroad.com",
|
2023-10-06 14:44:47 +00:00
|
|
|
"https://genius.com",
|
|
|
|
// "https://archive.org",
|
2023-05-05 23:42:19 +00:00
|
|
|
// "https://twitter.com"
|
2023-03-28 16:16:14 +00:00
|
|
|
};
|
2022-12-18 16:54:07 +00:00
|
|
|
|
2023-03-28 16:16:14 +00:00
|
|
|
char* alternatives[] = {
|
2023-07-27 12:34:16 +00:00
|
|
|
"https://old.reddit.com", // "https://teddit.nunosempere.com",
|
2024-03-22 12:40:21 +00:00
|
|
|
"https://invidious.private.coffee",
|
2023-06-25 22:22:15 +00:00
|
|
|
"https://search.nunosempere.com",
|
2023-03-28 16:16:14 +00:00
|
|
|
"https://scribe.rip",
|
2024-03-22 12:40:21 +00:00
|
|
|
"https://translate.riverside.rocks",
|
2024-03-20 07:18:51 +00:00
|
|
|
"https://archive.is/https://www.bloomberg.com",
|
2023-06-05 01:11:45 +00:00
|
|
|
"https://royalread.nunosempere.com",
|
2023-10-06 14:44:47 +00:00
|
|
|
"https://dumb.vern.cc",
|
|
|
|
// "https://wayback.nunosempere.com",
|
2023-05-05 23:42:19 +00:00
|
|
|
// "https://nitter.net"
|
2023-03-28 16:16:14 +00:00
|
|
|
};
|
2022-12-18 16:54:07 +00:00
|
|
|
|
2024-03-23 19:44:01 +00:00
|
|
|
int len = sizeof(annoying_sites) / sizeof(annoying_sites[0]);
|
2023-03-28 16:16:14 +00:00
|
|
|
for (int i = 0; i < len; i++) {
|
2024-03-23 19:44:01 +00:00
|
|
|
str_init(output, len_output);
|
2024-03-23 19:58:23 +00:00
|
|
|
int replace_check = str_replace_start(uri, annoying_sites[i],
|
2023-03-28 16:16:14 +00:00
|
|
|
alternatives[i], output);
|
2024-03-23 20:35:44 +00:00
|
|
|
switch (replace_check) {
|
2024-03-23 20:48:42 +00:00
|
|
|
case 0: // no match found
|
|
|
|
break;
|
|
|
|
case 1: // str_replace_start somehow failed
|
2024-03-23 20:54:15 +00:00
|
|
|
fprintf(stderr, "str_replace_start failed\n");
|
2024-03-23 20:48:42 +00:00
|
|
|
return 1;
|
|
|
|
break;
|
|
|
|
case 2: // match succeeded
|
|
|
|
return 2;
|
|
|
|
break;
|
|
|
|
default:
|
2024-03-23 20:54:15 +00:00
|
|
|
fprintf(stderr, "Unreachable state\n");
|
2023-03-28 16:16:14 +00:00
|
|
|
}
|
|
|
|
}
|
2024-03-23 19:44:01 +00:00
|
|
|
strcpy(output, uri);
|
2023-03-28 16:16:14 +00:00
|
|
|
}
|
|
|
|
return 0;
|
2022-12-17 19:47:44 +00:00
|
|
|
}
|