⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mime.c

📁 The major functionality added in this release includes: - Rootless mode in X11 - Widget Templt
💻 C
字号:
/* $Id: mime.c,v 1.1 2002/07/08 04:29:43 bauermeister Exp $ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. *  * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. *  * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  *  */#include <stdio.h>#include <stddef.h>#include <regex.h>#include <string.h>#define DECLARE_MIME_TYPE_DESC#include "mime.h"#include "debug.h"/*****************************************************************************/static intmatch(const char* name, const char* pat_list, int is_ext){  char* pat;  const char* src;  char pat_buf[100];  /* no pattern => no good */  if(pat_list==0 || strlen(pat_list)==0) return 0;  /* copy the pattern list in the buffer so that we can tokenize it */  strncpy(pat_buf, pat_list, sizeof(pat_buf)-1);  pat_buf[sizeof(pat_buf)-1] = 0;  /* take just the extension or the whole object name as source */  src = is_ext ? strrchr(name, '.') : name;  /* no extension or no object name or => no good */  if(src==0) return 0;  /* do for each pattern (using the last one first) ... */  while(strlen(pat_buf)) {    /* extract last pattern and zero-terminate predecessor */    pat = (char*)strrchr(&pat_buf[0],' ');    if(pat) {      *pat = '\0';      ++pat; /* skip separating space */    }    else pat = pat_buf;    /* check for extension match... */    if(is_ext) {      if(!strcmp(src+1, pat)) return 1;    }    /* ...or for regex match */    else {      int match = 0;      regex_t preg;      if (regcomp(&preg, pat, REG_EXTENDED)) {	WARNF("libpgdirview: "__FILE__": warning: could not compile regex\n");      }      else {	/* consider substring, but do not care where they are */	if(!regexec(&preg, src, 0, NULL, 0)) {	  match = 1;	}	regfree(&preg);	if(match) return 1;      }    }        /* check if we have reached the beginning of the pattern list */    if(pat==pat_buf) break;  }  return 0;}/*****************************************************************************/LpgdvMimeTypeIdlpgdv_mime_type_id_of(const char* obj_name, int fd){  if(obj_name && strlen(obj_name)) {    int i;    LpgdvMimeTypeDesc* desc;    for(i=0, desc=MimeTypeDesc;	i<sizeof(MimeTypeDesc)/sizeof(LpgdvMimeTypeDesc);	++i, ++desc) {      if( match(obj_name, desc->obj_ext, 1) ||	  match(obj_name, desc->obj_regex, 0) ) {	return i;      }    }  }  if(fd!=-1) {    /* not yet implemented */  }  return MIME_UNKNOWN;}/*****************************************************************************/const char*lpgdv_mime_type_name_of(LpgdvMimeTypeId id){  if(id>=0 && id<sizeof(MimeTypeDesc)/sizeof(LpgdvMimeTypeDesc)) {    return MimeTypeDesc[id].mt_name;  }  else return "<unknown>";}/*****************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -