代码在上面,函数功能是为路径名动态分配内存,请高手帮忙解释一上

代码在下面,函数功能是为路径名动态分配内存,请高手帮忙解释一下
代码在下面,函数功能是为路径名动态分配内存,请高手帮忙解释一下
 #include "apue.h"
 #include <errno.h>
 #include <limits.h>
 
#ifdef PATH_MAX
 static int pathmax=PATH_MAX;
 #else
 static int pathmax=0;
 #endif
 
#define SUSV3 200112L
 static long posix_version=0;
 #define PATH_MAX_GUESS 1024
 
char *path_alloc(int *sizep)
 {
 char *ptr;
 int size;
 if(posix_version==0)
     posix_version=sysconf(_SC_VERSION);
 
if(pathmax==0){
    errno=0;
 if((pathmax=pathconf("/",_PC_PATH_MAX))<0){//这里要pathconf函数返回值小于0,才执行下面的语句啊,如果小于0,表示出错返回,那么errno的值一定改变了,就不能设置下面的pathmax了,怎么回事????????????????????
       if(errno==0)
         pathmax=PATH_MAX_GUESS;
       else
         err_sys("pathconf error for _PC_PATH_MAX");
                                            }
        else{
          pathmax++;
            }
              }
        if(posix_version<SUSV3)
            size=pathmax+1;
        else
            size=pathmax;
 
   if((ptr=malloc(size))==NULL)
      err_sys("malloc error pathname");
   if(sizep!=NULL)
      *sizep=size;

      return ptr;
 }
 

------解决方案--------------------
FPATHCONF
Section: Linux Programmer's Manual (3 )
Updated: 1993-04-04 
--------------------------------------------
  
NAME
fpathconf, pathconf - get configuration values for files   
SYNOPSIS
#include <unistd.h>

long fpathconf(int filedes, int name);
long pathconf(char *path, int name);

  
DESCRIPTION
fpathconf() gets a value for the configuration option name for the open file descriptor filedes. 
pathconf() gets a value for configuration option name for the file name path. 

The corresponding macros defined in <unistd.h> are minimum values; if an application wants to take advantage of values which may change, a call to fpathconf() or pathconf() can be made, which may yield more liberal results. 

Setting name equal to one of the following constants returns the following configuration options: