Fix some miscellaneous places that were using raw open() or
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 9 May 1999 00:54:30 +0000 (00:54 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 9 May 1999 00:54:30 +0000 (00:54 +0000)
fopen(), instead of going through fd.c ... naughty naughty.

src/backend/libpq/be-fsstubs.c
src/backend/libpq/crypt.c
src/backend/libpq/hba.c
src/backend/utils/init/miscinit.c

index 591d0a4065a4294bb7e99798c3dd65ad657ae8db..a50d52b1341ca7b13c15f26524c241000da096f5 100644 (file)
@@ -99,7 +99,7 @@ lo_close(int fd)
 {
        MemoryContext currentContext;
 
-       if (fd >= MAX_LOBJ_FDS)
+       if (fd < 0 || fd >= MAX_LOBJ_FDS)
        {
                elog(ERROR, "lo_close: large obj descriptor (%d) out of range", fd);
                return -2;
@@ -131,14 +131,34 @@ lo_close(int fd)
 int
 lo_read(int fd, char *buf, int len)
 {
-       Assert(cookies[fd] != NULL);
+       if (fd < 0 || fd >= MAX_LOBJ_FDS)
+       {
+               elog(ERROR, "lo_read: large obj descriptor (%d) out of range", fd);
+               return -2;
+       }
+       if (cookies[fd] == NULL)
+       {
+               elog(ERROR, "lo_read: invalid large obj descriptor (%d)", fd);
+               return -3;
+       }
+
        return inv_read(cookies[fd], buf, len);
 }
 
 int
 lo_write(int fd, char *buf, int len)
 {
-       Assert(cookies[fd] != NULL);
+       if (fd < 0 || fd >= MAX_LOBJ_FDS)
+       {
+               elog(ERROR, "lo_write: large obj descriptor (%d) out of range", fd);
+               return -2;
+       }
+       if (cookies[fd] == NULL)
+       {
+               elog(ERROR, "lo_write: invalid large obj descriptor (%d)", fd);
+               return -3;
+       }
+
        return inv_write(cookies[fd], buf, len);
 }
 
@@ -149,11 +169,16 @@ lo_lseek(int fd, int offset, int whence)
        MemoryContext currentContext;
        int                     ret;
 
-       if (fd >= MAX_LOBJ_FDS)
+       if (fd < 0 || fd >= MAX_LOBJ_FDS)
        {
-               elog(ERROR, "lo_seek: large obj descriptor (%d) out of range", fd);
+               elog(ERROR, "lo_lseek: large obj descriptor (%d) out of range", fd);
                return -2;
        }
+       if (cookies[fd] == NULL)
+       {
+               elog(ERROR, "lo_lseek: invalid large obj descriptor (%d)", fd);
+               return -3;
+       }
 
        currentContext = MemoryContextSwitchTo((MemoryContext) fscxt);
 
@@ -197,7 +222,7 @@ lo_creat(int mode)
 int
 lo_tell(int fd)
 {
-       if (fd >= MAX_LOBJ_FDS)
+       if (fd < 0 || fd >= MAX_LOBJ_FDS)
        {
                elog(ERROR, "lo_tell: large object descriptor (%d) out of range", fd);
                return -2;
@@ -255,7 +280,7 @@ lowrite(int fd, struct varlena * wbuf)
 Oid
 lo_import(text *filename)
 {
-       int                     fd;
+       File            fd;
        int                     nbytes,
                                tmp;
 
@@ -269,13 +294,13 @@ lo_import(text *filename)
         */
        StrNCpy(fnamebuf, VARDATA(filename), VARSIZE(filename) - VARHDRSZ + 1);
 #ifndef __CYGWIN32__
-       fd = open(fnamebuf, O_RDONLY, 0666);
+       fd = PathNameOpenFile(fnamebuf, O_RDONLY, 0666);
 #else
-       fd = open(fnamebuf, O_RDONLY | O_BINARY, 0666);
+       fd = PathNameOpenFile(fnamebuf, O_RDONLY | O_BINARY, 0666);
 #endif
        if (fd < 0)
        {                                                       /* error */
-               elog(ERROR, "be_lo_import: can't open unix file\"%s\"\n",
+               elog(ERROR, "be_lo_import: can't open unix file \"%s\"\n",
                         fnamebuf);
        }
 
@@ -298,7 +323,7 @@ lo_import(text *filename)
        /*
         * read in from the Unix file and write to the inversion file
         */
-       while ((nbytes = read(fd, buf, BUFSIZE)) > 0)
+       while ((nbytes = FileRead(fd, buf, BUFSIZE)) > 0)
        {
                tmp = inv_write(lobj, buf, nbytes);
                if (tmp < nbytes)
@@ -308,7 +333,7 @@ lo_import(text *filename)
                }
        }
 
-       close(fd);
+       FileClose(fd);
        inv_close(lobj);
 
        return lobjOid;
@@ -321,7 +346,7 @@ lo_import(text *filename)
 int4
 lo_export(Oid lobjId, text *filename)
 {
-       int                     fd;
+       File            fd;
        int                     nbytes,
                                tmp;
 
@@ -331,7 +356,7 @@ lo_export(Oid lobjId, text *filename)
        mode_t          oumask;
 
        /*
-        * create an inversion "object"
+        * open the inversion "object"
         */
        lobj = inv_open(lobjId, INV_READ);
        if (lobj == NULL)
@@ -343,17 +368,17 @@ lo_export(Oid lobjId, text *filename)
        /*
         * open the file to be written to
         */
-       oumask = umask((mode_t) 0);
        StrNCpy(fnamebuf, VARDATA(filename), VARSIZE(filename) - VARHDRSZ + 1);
+       oumask = umask((mode_t) 0);
 #ifndef __CYGWIN32__
-       fd = open(fnamebuf, O_CREAT | O_WRONLY | O_TRUNC, 0666);
+       fd = PathNameOpenFile(fnamebuf, O_CREAT | O_WRONLY | O_TRUNC, 0666);
 #else
-       fd = open(fnamebuf, O_CREAT | O_WRONLY | O_TRUNC | O_BINARY, 0666);
+       fd = PathNameOpenFile(fnamebuf, O_CREAT | O_WRONLY | O_TRUNC | O_BINARY, 0666);
 #endif
        umask(oumask);
        if (fd < 0)
        {                                                       /* error */
-               elog(ERROR, "lo_export: can't open unix file\"%s\"",
+               elog(ERROR, "lo_export: can't open unix file \"%s\"",
                         fnamebuf);
        }
 
@@ -362,7 +387,7 @@ lo_export(Oid lobjId, text *filename)
         */
        while ((nbytes = inv_read(lobj, buf, BUFSIZE)) > 0)
        {
-               tmp = write(fd, buf, nbytes);
+               tmp = FileWrite(fd, buf, nbytes);
                if (tmp < nbytes)
                {
                        elog(ERROR, "lo_export: error while writing \"%s\"",
@@ -371,7 +396,7 @@ lo_export(Oid lobjId, text *filename)
        }
 
        inv_close(lobj);
-       close(fd);
+       FileClose(fd);
 
        return 1;
 }
index 4fdbed9db4818d6a7dd8de831919e15de5dcf3c2..2650a6f74d5eea97808425c5eb00c0e403f2e324 100644 (file)
@@ -174,7 +174,7 @@ crypt_loadpwdfile()
                        pwd_cache = (char **) realloc((void *) pwd_cache, sizeof(char *) * (pwd_cache_count + 1));
                        pwd_cache[pwd_cache_count++] = pstrdup(buffer);
                }
-               fclose(pwd_file);
+               FreeFile(pwd_file);
 
                /*
                 * Now sort the entries in the cache for faster searching later.
index 0f1411b7dff5c26befaf6638844c783f9f0d1ff4..49b858bfcc7e3fa26d446dcd6cf0d87780d3a504 100644 (file)
@@ -966,9 +966,9 @@ GetCharSetByHost(char *TableName, int host, const char *DataDir)
        map_file = (char *) palloc(bufsize);
        snprintf(map_file, bufsize, "%s/%s", DataDir, CHARSET_FILE);
 #ifndef __CYGWIN32__
-       file = fopen(map_file, "r");
+       file = AllocateFile(map_file, "r");
 #else
-       file = fopen(map_file, "rb");
+       file = AllocateFile(map_file, "rb");
 #endif
        if (file == NULL)
        {
@@ -1049,7 +1049,7 @@ GetCharSetByHost(char *TableName, int host, const char *DataDir)
                        }
                }
        }
-       fclose(file);
+       FreeFile(file);
        pfree(map_file);
 
        for (i = 0; i < ChIndex; i++)
index facfee69caadfab6f28cf53fa1327849b4d0521d..f39fbf2f4f3365091a04f881c758f1aca3e7d28a 100644 (file)
@@ -339,9 +339,9 @@ SetCharSet()
                                                                        strlen(p) + 2) * sizeof(char));
                sprintf(map_file, "%s/%s", DataDir, p);
 #ifndef __CYGWIN32__
-               file = fopen(map_file, "r");
+               file = AllocateFile(map_file, "r");
 #else
-               file = fopen(map_file, "rb");
+               file = AllocateFile(map_file, "rb");
 #endif
                if (file == NULL)
                        return;
@@ -376,7 +376,7 @@ SetCharSet()
                                }
                        }
                }
-               fclose(file);
+               FreeFile(file);
                free(map_file);
        }
 }