You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by rb...@apache.org on 2001/09/24 08:35:22 UTC

cvs commit: apr/file_io/unix mktemp.c

rbb         01/09/23 23:35:22

  Modified:    .        apr.dsp
               file_io/unix mktemp.c
  Log:
  Use the mktemp.c file from unix on Windows as well.  This requires
  making it use APR functions.  This compiles cleanly, but I can't
  easily test it on Windows.  I will check it out on Unix and test it
  there in a few seconds.
  
  Revision  Changes    Path
  1.85      +4 -0      apr/apr.dsp
  
  Index: apr.dsp
  ===================================================================
  RCS file: /home/cvs/apr/apr.dsp,v
  retrieving revision 1.84
  retrieving revision 1.85
  diff -u -r1.84 -r1.85
  --- apr.dsp	2001/09/17 17:31:35	1.84
  +++ apr.dsp	2001/09/24 06:35:22	1.85
  @@ -101,6 +101,10 @@
   # End Source File
   # Begin Source File
   
  +SOURCE=.\file_io\unix\mktemp.c
  +# End Source File
  +# Begin Source File
  +
   SOURCE=.\file_io\unix\fileacc.c
   # End Source File
   # Begin Source File
  
  
  
  1.8       +37 -27    apr/file_io/unix/mktemp.c
  
  Index: mktemp.c
  ===================================================================
  RCS file: /home/cvs/apr/file_io/unix/mktemp.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- mktemp.c	2001/09/24 05:41:56	1.7
  +++ mktemp.c	2001/09/24 06:35:22	1.8
  @@ -41,17 +41,19 @@
   #ifndef __warn_references
   #define __warn_references(a,b) 
   #endif
  -#ifdef  SVR4
  +#if defined(SVR4) || defined(WIN32)
  +#ifdef SVR4
   #include <inttypes.h>
  +#endif
   #define arc4random() rand()
   #define seedrandom(a) srand(a)
   #else
  +#ifdef APR_HAS_STDINT_H
   #include <stdint.h>
  +#endif
   #define arc4random() random()
   #define seedrandom(a) srandom(a)
   #endif
  -#define _open(a,b,c) open(a,b,c)
  -
   
   #include <sys/types.h>
   #include <sys/stat.h>
  @@ -64,15 +66,16 @@
   
   static const unsigned char padchar[] =
   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  -static uint32_t randseed=0;
  +static apr_uint32_t randseed=0;
   
  -static int gettemp(char *path, register int *doopen, int domkdir, int slen)
  +static int gettemp(char *path, apr_file_t *doopen, int domkdir, int slen,
  +                   apr_pool_t *p)
   {
   	register char *start, *trv, *suffp;
   	char *pad;
  -	struct stat sbuf;
  -	int rval;
  -	uint32_t randnum;
  +	apr_finfo_t sbuf;
  +    apr_status_t rv;
  +	apr_uint32_t randnum;
   
   	if (doopen && domkdir) {
   		errno = EINVAL;
  @@ -109,11 +112,11 @@
   				break;
   			if (*trv == '/') {
   				*trv = '\0';
  -				rval = stat(path, &sbuf);
  +				rv = apr_stat(&sbuf, path, APR_FINFO_TYPE, p);
   				*trv = '/';
  -				if (rval != 0)
  +				if (rv != APR_SUCCESS)
   					return(0);
  -				if (!S_ISDIR(sbuf.st_mode)) {
  +				if (sbuf.filetype != APR_DIR) {
   					errno = ENOTDIR;
   					return(0);
   				}
  @@ -125,18 +128,18 @@
   	for (;;) {
   		errno = 0;
   		if (doopen) {
  -			if ((*doopen =
  -			    _open(path, O_CREAT|O_EXCL|O_RDWR, 0600)) >= 0)
  +			if ((rv = apr_file_open(&doopen, path, APR_CREATE|APR_EXCL|APR_READ|APR_WRITE, 
  +                                    0600, p)) == APR_SUCCESS)
   				return(1);
   			if (errno != EEXIST)
   				return(0);
   		} else if (domkdir) {
  -			if (mkdir(path, 0700) == 0)
  +			if (apr_dir_make(path, 0700, p) == 0)
   				return(1);
   			if (errno != EEXIST)
   				return(0);
  -		} else if (lstat(path, &sbuf))
  -			return(errno == ENOENT ? 1 : 0);
  +		} else if ((rv = apr_lstat(&sbuf, path, APR_FINFO_TYPE, p)) != APR_SUCCESS)
  +			return(rv == ENOENT ? 1 : 0);
   
   		/* If we have a collision, cycle through the space of filenames */
   		for (trv = start;;) {
  @@ -162,37 +165,44 @@
   #if APR_HAVE_UNISTD_H
   #include <unistd.h> /* for mkstemp() - FreeBSD */
   #endif
  +#endif /* !defined(HAVE_MKSTEMP) */
   
  -apr_status_t apr_file_mktemp(apr_file_t **fp, char *template, apr_pool_t *p)
  +APR_DECLARE(apr_status_t) apr_file_mktemp(apr_file_t **fp, char *template, apr_pool_t *p)
   {
  -    int fd;
   #ifndef HAVE_MKSTEMP
       int rv;
  +#else
  +    int fd;
   #endif
   
  +#ifndef HAVE_MKSTEMP
  +    rv = gettemp(template, (*fp), 0, 0, p);
  +    if (rv == 0) {
  +        return errno;
  +    }
  +#else
       (*fp) = apr_pcalloc(p, sizeof(**fp));
       (*fp)->cntxt = p;
       (*fp)->timeout = -1;
       (*fp)->blocking = BLK_ON;
       (*fp)->flags = APR_READ | APR_WRITE | APR_EXCL | APR_DELONCLOSE;
   
  -#ifndef HAVE_MKSTEMP
  -    rv = gettemp(path, &fd, 0, 0);
  -    if (rv == 0) {
  -        return errno;
  -    }
  -#else
       fd = mkstemp(template);
       if (fd == -1) {
           return errno;
       }
  -#endif
       (*fp)->fname = apr_pstrdup(p, template);
       (*fp)->filedes = fd;
  -    unlink((*fp)->fname);
  +
  +#endif
  +    apr_file_remove((*fp)->fname, p);
  +#ifdef WIN32
  +    apr_pool_cleanup_register((*fp)->cntxt, (void *)(*fp),
  +                              file_cleanup, file_cleanup);
  +#else
       apr_pool_cleanup_register((*fp)->cntxt, (void *)(*fp),
                                 apr_unix_file_cleanup, apr_unix_file_cleanup);
  +#endif
       return APR_SUCCESS;
   }
   
  -#endif /* !defined(HAVE_MKSTEMP) */
  
  
  

Re: cvs commit: apr/file_io/unix mktemp.c

Posted by Greg Stein <gs...@lyra.org>.
On Mon, Sep 24, 2001 at 01:20:09PM -0700, Ryan Bloom wrote:
> On Monday 24 September 2001 01:19 pm, Greg Stein wrote:
> > On Mon, Sep 24, 2001 at 06:44:08AM -0700, Ryan Bloom wrote:
> > > On Monday 24 September 2001 12:41 am, Greg Stein wrote:
> > >...
> > >
> > > > Those perms are incorrect. The APR function takes different perms than
> > > > the Unix functions. That should be APR_UREAD|APR_UWRITE.
> > >
> > >...
> > > They didn't used to be different.  Okay.  I'll fix this today.
> >
> > They've had those values since you first checked them in, way back August
> > of 1999.
> >
> > (boy, the annotate feature in ViewCVS is useful...)
> 
> Yeah, but the values that I checked in are the same as the Unix values.

Um, yah. That was what my comment was all about. When you converted the
mkdir() to apr_dir_make(), the perms also had to change.

I meant APR_U* and friends have always been hex-based rather than
octal-based ever since your first checkin.

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/

Re: cvs commit: apr/file_io/unix mktemp.c

Posted by Ryan Bloom <rb...@covalent.net>.
On Monday 24 September 2001 01:19 pm, Greg Stein wrote:
> On Mon, Sep 24, 2001 at 06:44:08AM -0700, Ryan Bloom wrote:
> > On Monday 24 September 2001 12:41 am, Greg Stein wrote:
> >...
> >
> > > Those perms are incorrect. The APR function takes different perms than
> > > the Unix functions. That should be APR_UREAD|APR_UWRITE.
> >
> >...
> > They didn't used to be different.  Okay.  I'll fix this today.
>
> They've had those values since you first checked them in, way back August
> of 1999.
>
> (boy, the annotate feature in ViewCVS is useful...)

Yeah, but the values that I checked in are the same as the Unix values.

Ryan

______________________________________________________________
Ryan Bloom				rbb@apache.org
Covalent Technologies			rbb@covalent.net
--------------------------------------------------------------

Re: cvs commit: apr/file_io/unix mktemp.c

Posted by Greg Stein <gs...@lyra.org>.
On Mon, Sep 24, 2001 at 06:44:08AM -0700, Ryan Bloom wrote:
> On Monday 24 September 2001 12:41 am, Greg Stein wrote:
>...
> > Those perms are incorrect. The APR function takes different perms than the
> > Unix functions. That should be APR_UREAD|APR_UWRITE.
>...
> They didn't used to be different.  Okay.  I'll fix this today.

They've had those values since you first checked them in, way back August of
1999.

(boy, the annotate feature in ViewCVS is useful...)

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/

Re: cvs commit: apr/file_io/unix mktemp.c

Posted by Ryan Bloom <rb...@covalent.net>.
On Monday 24 September 2001 12:41 am, Greg Stein wrote:
> On Mon, Sep 24, 2001 at 06:35:22AM -0000, rbb@apache.org wrote:
> > rbb         01/09/23 23:35:22
> >
> >   Modified:    .        apr.dsp
> >                file_io/unix mktemp.c
> >   Log:
> >   Use the mktemp.c file from unix on Windows as well.  This requires
> >   making it use APR functions.  This compiles cleanly, but I can't
> >   easily test it on Windows.  I will check it out on Unix and test it
> >   there in a few seconds.
> >...
> >   @@ -125,18 +128,18 @@
> >    	for (;;) {
> >    		errno = 0;
> >    		if (doopen) {
> >   -			if ((*doopen =
> >   -			    _open(path, O_CREAT|O_EXCL|O_RDWR, 0600)) >= 0)
> >   +			if ((rv = apr_file_open(&doopen, path,
> > APR_CREATE|APR_EXCL|APR_READ|APR_WRITE, +                                
> >    0600, p)) == APR_SUCCESS)
>
> Those perms are incorrect. The APR function takes different perms than the
> Unix functions. That should be APR_UREAD|APR_UWRITE.
>
> >    				return(1);
> >    			if (errno != EEXIST)
> >    				return(0);
> >    		} else if (domkdir) {
> >   -			if (mkdir(path, 0700) == 0)
> >   +			if (apr_dir_make(path, 0700, p) == 0)
>
> Similar problem here.

They didn't used to be different.  Okay.  I'll fix this today.

Ryan

______________________________________________________________
Ryan Bloom				rbb@apache.org
Covalent Technologies			rbb@covalent.net
--------------------------------------------------------------

Re: cvs commit: apr/file_io/unix mktemp.c

Posted by Greg Stein <gs...@lyra.org>.
On Mon, Sep 24, 2001 at 06:35:22AM -0000, rbb@apache.org wrote:
> rbb         01/09/23 23:35:22
> 
>   Modified:    .        apr.dsp
>                file_io/unix mktemp.c
>   Log:
>   Use the mktemp.c file from unix on Windows as well.  This requires
>   making it use APR functions.  This compiles cleanly, but I can't
>   easily test it on Windows.  I will check it out on Unix and test it
>   there in a few seconds.
>...
>   @@ -125,18 +128,18 @@
>    	for (;;) {
>    		errno = 0;
>    		if (doopen) {
>   -			if ((*doopen =
>   -			    _open(path, O_CREAT|O_EXCL|O_RDWR, 0600)) >= 0)
>   +			if ((rv = apr_file_open(&doopen, path, APR_CREATE|APR_EXCL|APR_READ|APR_WRITE,
>   +                                    0600, p)) == APR_SUCCESS)

Those perms are incorrect. The APR function takes different perms than the
Unix functions. That should be APR_UREAD|APR_UWRITE.

>    				return(1);
>    			if (errno != EEXIST)
>    				return(0);
>    		} else if (domkdir) {
>   -			if (mkdir(path, 0700) == 0)
>   +			if (apr_dir_make(path, 0700, p) == 0)

Similar problem here.

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/