1 /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 3 #include <stdbool.h> 4 5 #include "string-util.h" 6 #include "strv.h" 7 #include "utf8.h" 8 #include "web-util.h" 9 http_etag_is_valid(const char * etag)10bool http_etag_is_valid(const char *etag) { 11 if (isempty(etag)) 12 return false; 13 14 if (!endswith(etag, "\"")) 15 return false; 16 17 if (!STARTSWITH_SET(etag, "\"", "W/\"")) 18 return false; 19 20 return true; 21 } 22 http_url_is_valid(const char * url)23bool http_url_is_valid(const char *url) { 24 const char *p; 25 26 if (isempty(url)) 27 return false; 28 29 p = STARTSWITH_SET(url, "http://", "https://"); 30 if (!p) 31 return false; 32 33 if (isempty(p)) 34 return false; 35 36 return ascii_is_valid(p); 37 } 38 file_url_is_valid(const char * url)39bool file_url_is_valid(const char *url) { 40 const char *p; 41 42 if (isempty(url)) 43 return false; 44 45 p = startswith(url, "file:/"); 46 if (isempty(p)) 47 return false; 48 49 return ascii_is_valid(p); 50 } 51 documentation_url_is_valid(const char * url)52bool documentation_url_is_valid(const char *url) { 53 const char *p; 54 55 if (isempty(url)) 56 return false; 57 58 if (http_url_is_valid(url) || file_url_is_valid(url)) 59 return true; 60 61 p = STARTSWITH_SET(url, "info:", "man:"); 62 if (isempty(p)) 63 return false; 64 65 return ascii_is_valid(p); 66 } 67