瀏覽代碼

httpd: allow suffixes on /sys/lang

Allow suffixes for /sys/lang, so e.g. if LANG=sv, then:

	/sys/lang	-> /lang/sv
	/sys/lang.css	-> /lang/sv.css

The uses should be rather obvious...
H. Peter Anvin 2 年之前
父節點
當前提交
0074da1694
共有 4 個文件被更改,包括 7 次插入4 次删除
  1. 7 4
      esp32/max80/httpd.c
  2. 二進制
      esp32/output/max80.ino.bin
  3. 二進制
      fpga/output/v1.fw
  4. 二進制
      fpga/output/v2.fw

+ 7 - 4
esp32/max80/httpd.c

@@ -434,15 +434,18 @@ static esp_err_t httpd_get_lang(httpd_req_t *req)
 
 static esp_err_t httpd_lang_redirect(httpd_req_t *req)
 {
-    char lang_buf[sizeof("/lang/") + MAX_LANG_LEN];
-    int len = snprintf(lang_buf, sizeof lang_buf, "/lang/%s",
-		       getenv_def("LANG", fallback_language));
+    char lang_buf[sizeof req->uri + MAX_LANG_LEN];
+    int len = snprintf(lang_buf, sizeof lang_buf, "/lang/%s%s",
+		       getenv_def("LANG", fallback_language),
+		       req->uri + (sizeof("/sys/lang")-1));
 
     return httpd_send_plain(req, 302, lang_buf, len, 0, 0);
 }
 
 #define STRING_MATCHES(str, len, what) \
     (((len) == sizeof(what)-1) && !memcmp((str), (what), sizeof(what)-1))
+#define STRING_MATCHES_PREFIX(str, len, what) \
+    (((len) >= sizeof(what)-1) && !memcmp((str), (what), sizeof(what)-1))
 
 static esp_err_t httpd_sys_handler(httpd_req_t *req)
 {
@@ -463,7 +466,7 @@ static esp_err_t httpd_sys_handler(httpd_req_t *req)
 
     query = *query == '?' ? query+1 : NULL;
 
-    if (STRING_MATCHES(file, filelen, "lang"))
+    if (STRING_MATCHES_PREFIX(file, filelen, "lang"))
 	return httpd_lang_redirect(req);
 
     if (STRING_MATCHES(file, filelen, "getstatus"))

二進制
esp32/output/max80.ino.bin


二進制
fpga/output/v1.fw


二進制
fpga/output/v2.fw