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

📄 protocol.c

📁 The major functionality added in this release includes: - Rootless mode in X11 - Widget Templt
💻 C
字号:
/* $Id: protocol.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 <stdlib.h>#include <string.h>#include "protocol.h"#include "debug.h"/*****************************************************************************/extern LpgdvProtocol file_protocol;const LpgdvProtocol *protocols[] = {  &file_protocol,  0};/*****************************************************************************/const LpgdvProtocol*lpgdv_protocol_find(const char* name){  int i;  const LpgdvProtocol *prot;  if(name) {    for(i=0; prot=protocols[i]; ++i) {      if(!strcasecmp(prot->name, name))	return prot;    }  }  return 0;}/*****************************************************************************/int lpgdv_protocol_split_url(const char* url,			     const LpgdvProtocol* prot,			     LpgdvSplittedUrl* su){  ENTER("lpgdv_protocol_split_url");  char* url_copy = 0;  char* p;  char* login = 0;  char* host = 0;  int err = 1;  if(su) memset(su, 0, sizeof(LpgdvSplittedUrl));  if(su==0 || url==0 || strlen(url)==0) goto done;  if(prot && prot->has_host) {    if(strncmp(url, "//", 2))  goto done; /* invalid url */    else if(strlen(url)>=2) url+=2;    else goto done; /* invalid url */  }  url_copy = strdup(url);  if(url_copy==0) {    WARNF("warning: strdup(url) failed\n");    goto done;  }  err = 0;  /* extract arguments */  p = (prot==0 || prot->has_arguments) ? strchr(url_copy, '?') : 0;  if(p) {    *p = '\0';    su->arguments = strdup(p+1);    if(su->arguments==0) err |= 1;  }  /* extract path */  if(prot && !prot->has_host && !prot->has_login) p = url_copy;  else p = strchr(url_copy, '/');  if(p) {    char* z = p;    if(!strncmp(p, "//", 2)) p+=2;    su->path = strdup(p);    *z = '\0';    if(su->path==0) err |= 1;  }  /* split login from host */  if(prot==0 || prot->has_login) {    p = strchr(url_copy, '@');    if(p) {      *p = '\0';      login = url_copy;      host = p+1;    }    else {      login = 0;      host = url_copy;    }  }  /* extract host name and port */  su->port = prot ? prot->default_port : 0;  if(host) {    p = strchr(host, ':');    if(p) {      *p = '\0';      su->port = atoi(p+1);    }    if(strlen(host)) {      su->host = strdup(host);      if(su->host==0) err |= 1;    }  }  /* extract user name and password */  if(login) {    p = strchr(login, ':');    if(p) {      *p = '\0';      su->password = strdup(p+1);      if(su->password==0) err |= 1;    }    su->username = strdup(login);    if(su->username==0) err |= 1;  }  /* done */ done:  if(err) lpgdv_protocol_free_url(su);  if(url_copy) free(url_copy);  LEAVE;  return !err;  }/*****************************************************************************/voidlpgdv_protocol_free_url(LpgdvSplittedUrl* su){  ENTER("lpgdv_protocol_free_url");  if(su) {    if(su->username)  free((void*)su->username);    if(su->password)  free((void*)su->password);    if(su->host)      free((void*)su->host);    if(su->path)      free((void*)su->path);    if(su->arguments) free((void*)su->arguments);    memset(su, 0, sizeof(LpgdvSplittedUrl));  }  LEAVE;}/*****************************************************************************/

⌨️ 快捷键说明

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