/*****************************************************************************
 * Function:    getdir
 * Description: get the program's directory
 *****************************************************************************/
int getdir(char *argv, char *buf, size_t size)
{
    char *tmp;
    int   len;

    // get relative directory
    tmp = strrchr(argv, '/');
    if(tmp == NULL) {
        return -1;
    }
    len = tmp - argv + 1;
    if(len > size) return -1;
    memcpy(buf, argv, len);
    buf[len] = 0;

    // store original directory
    tmp = (char *)malloc(PATH_MAX);
    if(tmp == NULL) return -1;
    getcwd(tmp, PATH_MAX);
    if(tmp == NULL) {
        free(tmp);
        return -1;
    }
    // get absoulte directory
    if(chdir(buf) < 0) {
        free(tmp);
        return -1;
    }
    getcwd(buf, size);
    if(buf == NULL) {
        free(tmp);
        return -1;
    }
    chdir(tmp);
    free(tmp);

    // add '/'
    len = strlen(buf);
    if(buf[len-1] != '/') {
        buf[len+1] = 0;
        buf[len] = '/';
    }

    return 0;
}

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()