用C语言实现PHP的basename函数

来源:互联网 发布:c语言 void关键字 编辑:程序博客网 时间:2024/06/02 06:11

 

#include <stdio.h>#include <stdlib.h>#include <string.h>/***********************************Author  : DemonWebsite : http://demon.twE-mail  : 380401911@qq.com***********************************//* {{{ php_basename */void php_basename(char *s, size_t len, char *suffix, size_t sufflen, char **p_ret, size_t *p_len){    char *ret = NULL, *c, *comp, *cend;    size_t inc_len, cnt;    int state;    c = comp = cend = s;    cnt = len;    state = 0;    while (cnt > 0) {        inc_len = 1;        if (*c == '/' || *c == '\\') {            if (state == 1) {                state = 0;                cend = c;            }        } else {            if (state == 0) {                comp = c;                state = 1;            }        }        c += inc_len;        cnt -= inc_len;    }    if (state == 1) {        cend = c;    }    if (suffix != NULL && sufflen < (size_t)(cend - comp) &&            memcmp(cend - sufflen, suffix, sufflen) == 0) {        cend -= sufflen;    }    len = cend - comp;    if (p_ret) {        ret = malloc(len + 1);        memcpy(ret, comp, len);        ret[len] = '\0';        *p_ret = ret;    }    if (p_len) {        *p_len = len;    }}/* }}} *//* {{{ proto string basename(string path [, string suffix])   Returns the filename component of the path */char *basename(char *string, char *suffix){    char  *ret;    int   string_len = strlen(string), suffix_len = strlen(suffix);    size_t ret_len;    php_basename(string, string_len, suffix, suffix_len, &ret, &ret_len);    return ret;}/* }}} */int main(void){    char *path = "/home/httpd/html/index.php";    char *file = basename(path, "");    printf("%s\n", file);    free(file);    file = basename(path, ".php");    printf("%s\n", file);    free(file);    return 0;}

 

原文链接:http://demon.tw/programming/c-php-basename.html

 

原创粉丝点击