Changeset 23 in Main for trunk/Server/server.c


Ignore:
Timestamp:
Sep 14, 2024, 10:31:16 PM (2 months ago)
Author:
Nishi
Message:

icon works

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Server/server.c

    r22 r23  
    4040SOCKADDR addresses[MAX_PORTS];
    4141int sockets[MAX_PORTS];
     42
     43/* https://qiita.com/gyu-don/items/5a640c6d2252a860c8cd */
     44int tw_wildcard_match(const char* wildcard, const char* target) {
     45        const char *pw = wildcard, *pt = target;
     46
     47        while(1) {
     48                if(*pt == 0) {
     49                        while(*pw == '*') pw++;
     50                        return *pw == 0;
     51                } else if(*pw == 0) {
     52                        return 0;
     53                } else if(*pw == '*') {
     54                        return *(pw + 1) == 0 || tw_wildcard_match(pw, pt + 1) || tw_wildcard_match(pw + 1, pt);
     55                } else if(*pw == '?' || (*pw == *pt)) {
     56                        pw++;
     57                        pt++;
     58                        continue;
     59                } else {
     60                        return 0;
     61                }
     62        }
     63}
    4264
    4365void close_socket(int sock) {
     
    275297        int i;
    276298        for(i = 0; i < vhost_entry->mime_count; i++) {
    277                 if(strcmp(vhost_entry->mimes[i].ext, "all") == 0 || (ext != NULL && strcmp(vhost_entry->mimes[i].ext, ext) == 0)) {
     299                if(strcmp(vhost_entry->mimes[i].ext, "all") == 0 || (ext != NULL && tw_wildcard_match(vhost_entry->mimes[i].ext, ext))) {
    278300                        mime = vhost_entry->mimes[i].mime;
    279301                        set = true;
     
    282304        if(!set) {
    283305                for(i = 0; i < config.root.mime_count; i++) {
    284                         if(strcmp(config.root.mimes[i].ext, "all") == 0 || (ext != NULL && strcmp(config.root.mimes[i].ext, ext) == 0)) {
     306                        if(strcmp(config.root.mimes[i].ext, "all") == 0 || (ext != NULL && tw_wildcard_match(config.root.mimes[i].ext, ext))) {
    285307                                mime = config.root.mimes[i].mime;
    286308                        }
     
    296318        int i;
    297319        for(i = 0; i < vhost_entry->icon_count; i++) {
    298                 if(strcmp(vhost_entry->icons[i].mime, "all") == 0 || (mime != NULL && strcmp(vhost_entry->icons[i].mime, mime) == 0)) {
     320                if(strcmp(vhost_entry->icons[i].mime, "all") == 0 || (mime != NULL && tw_wildcard_match(vhost_entry->icons[i].mime, mime))) {
    299321                        icon = vhost_entry->icons[i].icon;
    300322                        set = true;
     
    303325        if(!set) {
    304326                for(i = 0; i < config.root.icon_count; i++) {
    305                         if(strcmp(config.root.icons[i].mime, "all") == 0 || (mime != NULL && strcmp(config.root.icons[i].mime, mime) == 0)) {
     327                        if(strcmp(config.root.icons[i].mime, "all") == 0 || (mime != NULL && tw_wildcard_match(config.root.icons[i].mime, mime))) {
    306328                                icon = config.root.icons[i].icon;
    307329                        }
Note: See TracChangeset for help on using the changeset viewer.