/[jscoverage]/trunk/js/jsfile.cpp
ViewVC logotype

Diff of /trunk/js/jsfile.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 332 by siliconforks, Thu Oct 23 19:03:33 2008 UTC revision 507 by siliconforks, Sun Jan 10 07:23:34 2010 UTC
# Line 1  Line 1 
1  /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-  /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2   * vim: set ts=8 sw=4 et tw=78:   * vim: set ts=8 sw=4 et tw=78:
3   *   *
4   * ***** BEGIN LICENSE BLOCK *****   * ***** BEGIN LICENSE BLOCK *****
# Line 43  Line 43 
43   */   */
44  #if JS_HAS_FILE_OBJECT  #if JS_HAS_FILE_OBJECT
45    
 #include "jsstddef.h"  
46  #include "jsfile.h"  #include "jsfile.h"
47    #include "jsstdint.h"
48    
49  /* ----------------- Platform-specific includes and defines ----------------- */  /* ----------------- Platform-specific includes and defines ----------------- */
50  #if defined(XP_WIN) || defined(XP_OS2)  #if defined(XP_WIN) || defined(XP_OS2)
# Line 57  Line 57 
57  #   define CURRENT_DIR          "c:\\"  #   define CURRENT_DIR          "c:\\"
58  #   define POPEN                _popen  #   define POPEN                _popen
59  #   define PCLOSE               _pclose  #   define PCLOSE               _pclose
60    #elif defined(SYMBIAN)
61    #   include <strings.h>
62    #   include <stdio.h>
63    #   include <stdlib.h>
64    #   include <unistd.h>
65    #   include <limits.h>
66    #   define FILESEPARATOR        '\\'
67    #   define FILESEPARATOR2       '/'
68    #   define CURRENT_DIR          "c:\\"
69    #   define POPEN                popen
70    #   define PCLOSE               pclose
71  #elif defined(XP_UNIX) || defined(XP_BEOS)  #elif defined(XP_UNIX) || defined(XP_BEOS)
72  #   include <strings.h>  #   include <strings.h>
73  #   include <stdio.h>  #   include <stdio.h>
74  #   include <stdlib.h>  #   include <stdlib.h>
75  #   include <unistd.h>  #   include <unistd.h>
76    #   include <limits.h>
77  #   define FILESEPARATOR        '/'  #   define FILESEPARATOR        '/'
78  #   define FILESEPARATOR2       '\0'  #   define FILESEPARATOR2       '\0'
79  #   define CURRENT_DIR          "/"  #   define CURRENT_DIR          "/"
# Line 105  Line 117 
117  #define utfstring               "binary"  #define utfstring               "binary"
118  #define unicodestring           "unicode"  #define unicodestring           "unicode"
119    
120    #ifdef PATH_MAX
121    #define MAX_PATH_LENGTH         PATH_MAX
122    #else
123  #define MAX_PATH_LENGTH         1024  #define MAX_PATH_LENGTH         1024
124    #endif
125  #define MODE_SIZE               256  #define MODE_SIZE               256
126  #define NUMBER_SIZE             32  #define NUMBER_SIZE             32
127  #define MAX_LINE_LENGTH         256  #define MAX_LINE_LENGTH         256
# Line 259  Line 275 
275  static JSBool  static JSBool
276  js_isAbsolute(const char *name)  js_isAbsolute(const char *name)
277  {  {
278  #if defined(XP_WIN) || defined(XP_OS2)  #if defined(XP_WIN) || defined(XP_OS2) || defined(SYMBIAN)
279      return *name && name[1] == ':';      return *name && name[1] == ':';
280  #else  #else
281      return (name[0]      return (name[0]
# Line 280  Line 296 
296  js_combinePath(JSContext *cx, const char *base, const char *name)  js_combinePath(JSContext *cx, const char *base, const char *name)
297  {  {
298      int len = strlen(base);      int len = strlen(base);
299      char* result = JS_malloc(cx, len + strlen(name) + 2);      char* result = cx->malloc(len + strlen(name) + 2);
300    
301      if (!result)      if (!result)
302          return NULL;          return NULL;
# Line 304  Line 320 
320    
321      index = strlen(pathname)-1;      index = strlen(pathname)-1;
322    
323      /* Chop off trailing seperators. */      /* Chop off trailing separators. */
324      while (index > 0 && (pathname[index]==FILESEPARATOR ||      while (index > 0 && (pathname[index]==FILESEPARATOR ||
325                           pathname[index]==FILESEPARATOR2)) {                           pathname[index]==FILESEPARATOR2)) {
326          --index;          --index;
# Line 319  Line 335 
335      }      }
336    
337      /* Allocate and copy. */      /* Allocate and copy. */
338      result = JS_malloc(cx, aux - index + 1);      result = cx->malloc(aux - index + 1);
339      if (!result)      if (!result)
340          return NULL;          return NULL;
341      strncpy(result, pathname + index + 1, aux - index);      strncpy(result, pathname + index + 1, aux - index);
# Line 350  Line 366 
366    
367      if (cp < pathname && end != pathname) {      if (cp < pathname && end != pathname) {
368          /* There were just /s, return the root. */          /* There were just /s, return the root. */
369          result = JS_malloc(cx, 1 + 1); /* The separator + trailing NUL. */          result = cx->malloc(1 + 1); /* The separator + trailing NUL. */
370          result[0] = FILESEPARATOR;          result[0] = FILESEPARATOR;
371          result[1] = '\0';          result[1] = '\0';
372          return result;          return result;
# Line 372  Line 388 
388          }          }
389    
390          pathsize = end - pathname + 1;          pathsize = end - pathname + 1;
391          result = JS_malloc(cx, pathsize + 1);          result = cx->malloc(pathsize + 1);
392          if (!result)          if (!result)
393              return NULL;              return NULL;
394    
# Line 385  Line 401 
401    
402      /* Return everything up to and including the seperator. */      /* Return everything up to and including the seperator. */
403      pathsize = cp - pathname + 1;      pathsize = cp - pathname + 1;
404      result = JS_malloc(cx, pathsize + 1);      result = cx->malloc(pathsize + 1);
405      if (!result)      if (!result)
406          return NULL;          return NULL;
407    
# Line 446  Line 462 
462      while (j >= 0 && path[j] == ' ')      while (j >= 0 && path[j] == ' ')
463          j--;          j--;
464    
465      tmp = JS_malloc(cx, j-i+2);      tmp = cx->malloc(j-i+2);
466      if (!tmp)      if (!tmp)
467          return NULL;          return NULL;
468    
# Line 462  Line 478 
478      /* file:// support. */      /* file:// support. */
479      if (!strncmp(path, URL_PREFIX, strlen(URL_PREFIX))) {      if (!strncmp(path, URL_PREFIX, strlen(URL_PREFIX))) {
480          tmp = js_canonicalPath(cx, path + strlen(URL_PREFIX));          tmp = js_canonicalPath(cx, path + strlen(URL_PREFIX));
481          JS_free(cx, path);          cx->free(path);
482          return tmp;          return tmp;
483      }      }
484    
# Line 470  Line 486 
486          tmp = js_absolutePath(cx, path);          tmp = js_absolutePath(cx, path);
487          if (!tmp)          if (!tmp)
488              return NULL;              return NULL;
489          JS_free(cx, path);          cx->free(path);
490          path = tmp;          path = tmp;
491      }      }
492    
# Line 489  Line 505 
505                  back--;                  back--;
506              } else {              } else {
507                  tmp = result;                  tmp = result;
508                  result = JS_malloc(cx, strlen(base) + 1 + strlen(tmp) + 1);                  result = cx->malloc(strlen(base) + 1 + strlen(tmp) + 1);
509                  if (!result)                  if (!result)
510                      goto out;                      goto out;
511    
# Line 500  Line 516 
516                      result[c + 1] = '\0';                      result[c + 1] = '\0';
517                      strcat(result, tmp);                      strcat(result, tmp);
518                  }                  }
519                  JS_free(cx, tmp);                  cx->free(tmp);
520              }              }
521          }          }
522          JS_free(cx, current);          cx->free(current);
523          JS_free(cx, base);          cx->free(base);
524          current = dir;          current = dir;
525          base =  js_fileBaseName(cx, current);          base =  js_fileBaseName(cx, current);
526          dir = js_fileDirectoryName(cx, current);          dir = js_fileDirectoryName(cx, current);
527      }      }
528    
529      tmp = result;      tmp = result;
530      result = JS_malloc(cx, strlen(dir)+1+strlen(tmp)+1);      result = cx->malloc(strlen(dir) + 1 + strlen(tmp) + 1);
531      if (!result)      if (!result)
532          goto out;          goto out;
533    
# Line 527  Line 543 
543    
544  out:  out:
545      if (tmp)      if (tmp)
546          JS_free(cx, tmp);          cx->free(tmp);
547      if (dir)      if (dir)
548          JS_free(cx, dir);          cx->free(dir);
549      if (base)      if (base)
550          JS_free(cx, base);          cx->free(base);
551      if (current)      if (current)
552          JS_free(cx, current);          cx->free(current);
553    
554      return result;      return result;
555  }  }
# Line 737  Line 753 
753              break;              break;
754          current = comma + 1;          current = comma + 1;
755      }      }
756      JS_free(cx, options);      cx->free(options);
757      return found;      return found;
758  }  }
759    
# Line 822  Line 838 
838    
839      switch (mode) {      switch (mode) {
840        case ASCII:        case ASCII:
841          aux = (unsigned char*)JS_malloc(cx, len);          aux = (unsigned char*)cx->malloc(len);
842          if (!aux)          if (!aux)
843              return 0;              return 0;
844    
845          count = js_BufferedRead(file, aux, len);          count = js_BufferedRead(file, aux, len);
846          if (count == -1) {          if (count == -1) {
847              JS_free(cx, aux);              cx->free(aux);
848              return 0;              return 0;
849          }          }
850    
851          for (i = 0; i < len; i++)          for (i = 0; i < len; i++)
852              buf[i] = (jschar)aux[i];              buf[i] = (jschar)aux[i];
853    
854          JS_free(cx, aux);          cx->free(aux);
855          break;          break;
856    
857        case UTF8:        case UTF8:
# Line 961  Line 977 
977    
978      switch (mode) {      switch (mode) {
979        case ASCII:        case ASCII:
980          aux = (unsigned char*)JS_malloc(cx, len);          aux = (unsigned char*)cx->malloc(len);
981          if (!aux)          if (!aux)
982              return 0;              return 0;
983    
# Line 973  Line 989 
989                  : fwrite(aux, 1, len, file->nativehandle);                  : fwrite(aux, 1, len, file->nativehandle);
990    
991          if (count==-1) {          if (count==-1) {
992              JS_free(cx, aux);              cx->free(aux);
993              return 0;              return 0;
994          }          }
995    
996          JS_free(cx, aux);          cx->free(aux);
997          break;          break;
998    
999        case UTF8:        case UTF8:
1000          utfbuf = (unsigned char*)JS_malloc(cx, len*3);          utfbuf = (unsigned char*)cx->malloc(len*3);
1001          if (!utfbuf)  return 0;          if (!utfbuf)  return 0;
1002          i = 0;          i = 0;
1003          for (count = 0;count<len;count++) {          for (count = 0;count<len;count++) {
1004              j = one_ucs2_to_utf8_char(utfbuf+i, utfbuf+len*3, buf[count]);              j = one_ucs2_to_utf8_char(utfbuf+i, utfbuf+len*3, buf[count]);
1005              if (j==-1) {              if (j==-1) {
1006                  JS_free(cx, utfbuf);                  cx->free(utfbuf);
1007                  return 0;                  return 0;
1008              }              }
1009              i+=j;              i+=j;
# Line 997  Line 1013 
1013              : fwrite(utfbuf, 1, i, file->nativehandle);              : fwrite(utfbuf, 1, i, file->nativehandle);
1014    
1015          if (j<i) {          if (j<i) {
1016              JS_free(cx, utfbuf);              cx->free(utfbuf);
1017              return 0;              return 0;
1018          }          }
1019          JS_free(cx, utfbuf);          cx->free(utfbuf);
1020          break;          break;
1021    
1022        case UCS2:        case UCS2:
# Line 1163  Line 1179 
1179      } else {      } else {
1180          JSObject *obj = js_NewFileObject(cx, str);          JSObject *obj = js_NewFileObject(cx, str);
1181          if (!obj) {          if (!obj) {
1182              JS_free(cx, str);              cx->free(str);
1183              return JS_FALSE;              return JS_FALSE;
1184          }          }
1185          *resultp = OBJECT_TO_JSVAL(obj);          *resultp = OBJECT_TO_JSVAL(obj);
1186      }      }
1187    
1188      JS_free(cx, str);      cx->free(str);
1189      return JS_TRUE;      return JS_TRUE;
1190  }  }
1191    
# Line 1190  Line 1206 
1206    
1207      str = JS_NewString(cx, name, strlen(name));      str = JS_NewString(cx, name, strlen(name));
1208      if (!str) {      if (!str) {
1209          JS_free(cx, name);          cx->free(name);
1210          return JS_FALSE;          return JS_FALSE;
1211      }      }
1212    
# Line 1337  Line 1353 
1353                  pipemode[i++] = '\0';                  pipemode[i++] = '\0';
1354                  file->nativehandle = POPEN(&file->path[1], pipemode);                  file->nativehandle = POPEN(&file->path[1], pipemode);
1355              } else if(file->path[len-1] == PIPE_SYMBOL) {              } else if(file->path[len-1] == PIPE_SYMBOL) {
1356                  char *command = JS_malloc(cx, len);                  char *command = cx->malloc(len);
1357    
1358                  strncpy(command, file->path, len-1);                  strncpy(command, file->path, len-1);
1359                  command[len-1] = '\0';                  command[len-1] = '\0';
# Line 1348  Line 1364 
1364  #endif  #endif
1365                  pipemode[i++] = '\0';                  pipemode[i++] = '\0';
1366                  file->nativehandle = POPEN(command, pipemode);                  file->nativehandle = POPEN(command, pipemode);
1367                  JS_free(cx, command);                  cx->free(command);
1368              }              }
1369              /* set the flags */              /* set the flags */
1370              file->isNative = JS_TRUE;              file->isNative = JS_TRUE;
# Line 1361  Line 1377 
1377      }      }
1378    
1379      js_ResetBuffers(file);      js_ResetBuffers(file);
1380      JS_free(cx, mode);      cx->free(mode);
1381      mode = NULL;      mode = NULL;
1382    
1383      /* Set the open flag and return result */      /* Set the open flag and return result */
# Line 1380  Line 1396 
1396    
1397  out:  out:
1398      if(mode)      if(mode)
1399          JS_free(cx, mode);          cx->free(mode);
1400      return JS_FALSE;      return JS_FALSE;
1401  }  }
1402    
# Line 1468  Line 1484 
1484      fileInitiallyOpen = file->isOpen;      fileInitiallyOpen = file->isOpen;
1485      JSFILE_CHECK_READ;      JSFILE_CHECK_READ;
1486    
1487      dest = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));      JSString *str = JS_ValueToString(cx, argv[0]);
1488        if (!str)
1489            goto out;
1490    
1491        dest = JS_GetStringBytes(str);
1492    
1493      /* make sure we are not reading a file open for writing */      /* make sure we are not reading a file open for writing */
1494      if (file->isOpen && !js_canRead(cx, file)) {      if (file->isOpen && !js_canRead(cx, file)) {
# Line 1495  Line 1515 
1515          goto out;          goto out;
1516      }      }
1517    
1518      buffer = JS_malloc(cx, size);      buffer = cx->malloc(size);
1519    
1520      count = INT_TO_JSVAL(PR_Read(file->handle, buffer, size));      count = INT_TO_JSVAL(PR_Read(file->handle, buffer, size));
1521    
1522      /* reading panic */      /* reading panic */
1523      if (count!=size) {      if (count!=size) {
1524          JS_free(cx, buffer);          cx->free(buffer);
1525          JS_ReportErrorNumber(cx, JSFile_GetErrorMessage, NULL,          JS_ReportErrorNumber(cx, JSFile_GetErrorMessage, NULL,
1526                JSFILEMSG_COPY_READ_ERROR, file->path);                JSFILEMSG_COPY_READ_ERROR, file->path);
1527          goto out;          goto out;
# Line 1511  Line 1531 
1531    
1532      /* writing panic */      /* writing panic */
1533      if (count!=size) {      if (count!=size) {
1534          JS_free(cx, buffer);          cx->free(buffer);
1535          JS_ReportErrorNumber(cx, JSFile_GetErrorMessage, NULL,          JS_ReportErrorNumber(cx, JSFile_GetErrorMessage, NULL,
1536                JSFILEMSG_COPY_WRITE_ERROR, file->path);                JSFILEMSG_COPY_WRITE_ERROR, file->path);
1537          goto out;          goto out;
1538      }      }
1539    
1540      JS_free(cx, buffer);      cx->free(buffer);
1541    
1542          if(!fileInitiallyOpen){          if(!fileInitiallyOpen){
1543                  if(!file_close(cx, obj, 0, NULL, rval)) goto out;                  if(!file_close(cx, obj, 0, NULL, rval)) goto out;
# Line 1557  Line 1577 
1577      JSFILE_CHECK_NATIVE("renameTo");      JSFILE_CHECK_NATIVE("renameTo");
1578      JSFILE_CHECK_CLOSED("renameTo");      JSFILE_CHECK_CLOSED("renameTo");
1579    
1580      dest = RESOLVE_PATH(cx, JS_GetStringBytes(JS_ValueToString(cx, argv[0])));      JSString *str = JS_ValueToString(cx, argv[0]);
1581        if (!str)
1582            goto out;
1583    
1584        dest = RESOLVE_PATH(cx, JS_GetStringBytes(str));
1585    
1586      if (PR_Rename(file->path, dest)==PR_SUCCESS){      if (PR_Rename(file->path, dest)==PR_SUCCESS){
1587          /* copy the new filename */          /* copy the new filename */
1588          JS_free(cx, file->path);          cx->free(file->path);
1589          file->path = dest;          file->path = dest;
1590          *rval = JSVAL_TRUE;          *rval = JSVAL_TRUE;
1591          return JS_TRUE;          return JS_TRUE;
# Line 1713  Line 1737 
1737    
1738      /* want = (want>262144)?262144:want; * arbitrary size limitation */      /* want = (want>262144)?262144:want; * arbitrary size limitation */
1739    
1740      buf = JS_malloc(cx, want*sizeof buf[0]);      buf = cx->malloc(want*sizeof buf[0]);
1741      if (!buf)  goto out;      if (!buf)  goto out;
1742    
1743      count =  js_FileRead(cx, file, buf, want, file->type);      count =  js_FileRead(cx, file, buf, want, file->type);
1744      if (count>0) {      if (count>0) {
1745          str = JS_NewUCStringCopyN(cx, buf, count);          str = JS_NewUCStringCopyN(cx, buf, count);
1746          *rval = STRING_TO_JSVAL(str);          *rval = STRING_TO_JSVAL(str);
1747          JS_free(cx, buf);          cx->free(buf);
1748          return JS_TRUE;          return JS_TRUE;
1749      } else {      } else {
1750          JS_free(cx, buf);          cx->free(buf);
1751          goto out;          goto out;
1752      }      }
1753  out:  out:
# Line 1744  Line 1768 
1768      SECURITY_CHECK(cx, NULL, "readln", file);      SECURITY_CHECK(cx, NULL, "readln", file);
1769      JSFILE_CHECK_READ;      JSFILE_CHECK_READ;
1770    
1771      buf = JS_malloc(cx, MAX_LINE_LENGTH * sizeof data);      buf = cx->malloc(MAX_LINE_LENGTH * sizeof data);
1772      if (!buf)      if (!buf)
1773          return JS_FALSE;          return JS_FALSE;
1774    
# Line 1776  Line 1800 
1800    
1801            default:            default:
1802              if (--room < 0) {              if (--room < 0) {
1803                  tmp = JS_realloc(cx, buf,                  tmp = cx->realloc(buf, (offset + MAX_LINE_LENGTH) * sizeof data);
                                  (offset + MAX_LINE_LENGTH) * sizeof data);  
1804                  if (!tmp)                  if (!tmp)
1805                      goto out;                      goto out;
1806    
# Line 1798  Line 1821 
1821    
1822  done:  done:
1823      buf[offset] = 0;      buf[offset] = 0;
1824      tmp = JS_realloc(cx, buf, (offset + 1) * sizeof data);      tmp = cx->realloc(buf, (offset + 1) * sizeof data);
1825      if (!tmp)      if (!tmp)
1826          goto out;          goto out;
1827    
# Line 1811  Line 1834 
1834    
1835  out:  out:
1836      if (buf)      if (buf)
1837          JS_free(cx, buf);          cx->free(buf);
1838    
1839      return JS_FALSE;      return JS_FALSE;
1840  }  }
# Line 1964  Line 1987 
1987          filePath = js_combinePath(cx, file->path, (char*)entry->name);          filePath = js_combinePath(cx, file->path, (char*)entry->name);
1988    
1989          eachFile = js_NewFileObject(cx, filePath);          eachFile = js_NewFileObject(cx, filePath);
1990          JS_free(cx, filePath);          cx->free(filePath);
1991          if (!eachFile){          if (!eachFile){
1992              JS_ReportWarning(cx, "File %s cannot be retrieved", filePath);              JS_ReportWarning(cx, "File %s cannot be retrieved", filePath);
1993              continue;              continue;
# Line 2001  Line 2024 
2024          char        *dir = js_fileDirectoryName(cx, file->path);          char        *dir = js_fileDirectoryName(cx, file->path);
2025          JSObject    *dirObj = js_NewFileObject(cx, dir);          JSObject    *dirObj = js_NewFileObject(cx, dir);
2026    
2027          JS_free(cx, dir);          cx->free(dir);
2028    
2029          /* call file_mkdir with the right set of parameters if needed */          /* call file_mkdir with the right set of parameters if needed */
2030          if (file_mkdir(cx, dirObj, argc, argv, rval))          if (file_mkdir(cx, dirObj, argc, argv, rval))
# Line 2009  Line 2032 
2032                  else                  else
2033              goto out;              goto out;
2034      }else{      }else{
2035          char *dirName = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));          JSString *str = JS_ValueToString(cx, argv[0]);
2036            if (!str)
2037                goto out;
2038    
2039            char *dirName = JS_GetStringBytes(str);
2040          char *fullName;          char *fullName;
2041    
2042          fullName = js_combinePath(cx, file->path, dirName);          fullName = js_combinePath(cx, file->path, dirName);
2043          if (PR_MkDir(fullName, 0755)==PR_SUCCESS){          if (PR_MkDir(fullName, 0755)==PR_SUCCESS){
2044              *rval = JSVAL_TRUE;              *rval = JSVAL_TRUE;
2045              JS_free(cx, fullName);              cx->free(fullName);
2046              return JS_TRUE;              return JS_TRUE;
2047          }else{          }else{
2048              JS_ReportErrorNumber(cx, JSFile_GetErrorMessage, NULL,              JS_ReportErrorNumber(cx, JSFile_GetErrorMessage, NULL,
2049                  JSFILEMSG_OP_FAILED, "mkdir", fullName);                  JSFILEMSG_OP_FAILED, "mkdir", fullName);
2050              JS_free(cx, fullName);              cx->free(fullName);
2051              goto out;              goto out;
2052          }          }
2053      }      }
# Line 2061  Line 2088 
2088          return JS_FALSE;          return JS_FALSE;
2089      str = js_NewString(cx, urlChars, len);      str = js_NewString(cx, urlChars, len);
2090      if (!str) {      if (!str) {
2091          JS_free(cx, urlChars);          cx->free(urlChars);
2092          return JS_FALSE;          return JS_FALSE;
2093      }      }
2094      *rval = STRING_TO_JSVAL(str);      *rval = STRING_TO_JSVAL(str);
# Line 2088  Line 2115 
2115          }          }
2116    
2117          if (file->path)          if (file->path)
2118              JS_free(cx, file->path);              cx->free(file->path);
2119    
2120          JS_free(cx, file);          cx->free(file);
2121      }      }
2122  }  }
2123    
# Line 2102  Line 2129 
2129  {  {
2130      JSFile *file;      JSFile *file;
2131    
2132      file = JS_malloc(cx, sizeof *file);      file = cx->malloc(sizeof *file);
2133      if (!file)      if (!file)
2134          return NULL;          return NULL;
2135      memset(file, 0 , sizeof *file);      memset(file, 0 , sizeof *file);
# Line 2114  Line 2141 
2141      if (!JS_SetPrivate(cx, obj, file)) {      if (!JS_SetPrivate(cx, obj, file)) {
2142          JS_ReportErrorNumber(cx, JSFile_GetErrorMessage, NULL,          JS_ReportErrorNumber(cx, JSFile_GetErrorMessage, NULL,
2143                               JSFILEMSG_CANNOT_SET_PRIVATE_FILE, file->path);                               JSFILEMSG_CANNOT_SET_PRIVATE_FILE, file->path);
2144          JS_free(cx, file);          cx->free(file);
2145          return NULL;          return NULL;
2146      }      }
2147    
# Line 2160  Line 2187 
2187    
2188      /* free result of RESOLVE_PATH from file_init. */      /* free result of RESOLVE_PATH from file_init. */
2189      JS_ASSERT(file->path != NULL);      JS_ASSERT(file->path != NULL);
2190      JS_free(cx, file->path);      cx->free(file->path);
2191    
2192      file->path = strdup(filename);      file->path = strdup(filename);
2193      file->isOpen = open;      file->isOpen = open;
# Line 2181  Line 2208 
2208      JSString *str;      JSString *str;
2209      JSFile   *file;      JSFile   *file;
2210    
2211      if (!(cx->fp->flags & JSFRAME_CONSTRUCTING)) {      if (!JS_IsConstructing(cx)) {
2212          /* Replace obj with a new File object. */          /* Replace obj with a new File object. */
2213          obj = JS_NewObject(cx, &js_FileClass, NULL, NULL);          obj = JS_NewObject(cx, &js_FileClass, NULL, NULL);
2214          if (!obj)          if (!obj)
# Line 2383  Line 2410 
2410      case FILE_MODE:      case FILE_MODE:
2411          SECURITY_CHECK(cx, NULL, "mode", file);          SECURITY_CHECK(cx, NULL, "mode", file);
2412          JSFILE_CHECK_OPEN("mode");          JSFILE_CHECK_OPEN("mode");
2413          bytes = JS_malloc(cx, MODE_SIZE);          bytes = cx->malloc(MODE_SIZE);
2414          bytes[0] = '\0';          bytes[0] = '\0';
2415          flag = JS_FALSE;          flag = JS_FALSE;
2416    
# Line 2423  Line 2450 
2450              flag = JS_TRUE;              flag = JS_TRUE;
2451          }          }
2452          *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, bytes));          *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, bytes));
2453          JS_free(cx, bytes);          cx->free(bytes);
2454          break;          break;
2455      case FILE_CREATED:      case FILE_CREATED:
2456          SECURITY_CHECK(cx, NULL, "creationTime", file);          SECURITY_CHECK(cx, NULL, "creationTime", file);
# Line 2559  Line 2586 
2586                      bytes = js_combinePath(cx, file->path, prop_name);                      bytes = js_combinePath(cx, file->path, prop_name);
2587                      *vp = OBJECT_TO_JSVAL(js_NewFileObject(cx, bytes));                      *vp = OBJECT_TO_JSVAL(js_NewFileObject(cx, bytes));
2588                      PR_CloseDir(dir);                      PR_CloseDir(dir);
2589                      JS_free(cx, bytes);                      cx->free(bytes);
2590                      return !JSVAL_IS_NULL(*vp);                      return !JSVAL_IS_NULL(*vp);
2591                  }                  }
2592              }              }
# Line 2655  Line 2682 
2682          JSObject *rhsObject;          JSObject *rhsObject;
2683          char     *path;          char     *path;
2684    
2685          path      = JS_GetStringBytes(JS_ValueToString(cx, *vp));          JSString *str = JS_ValueToString(cx, *vp);
2686            if (!str)
2687                return JS_FALSE;
2688    
2689            path      = JS_GetStringBytes(str);
2690          rhsObject = js_NewFileObject(cx, path);          rhsObject = js_NewFileObject(cx, path);
2691          if (!rhsObject)          if (!rhsObject)
2692              return JS_FALSE;              return JS_FALSE;
# Line 2701  Line 2732 
2732          /* Define CURRENTDIR property. We are doing this to get a          /* Define CURRENTDIR property. We are doing this to get a
2733          slash at the end of the current dir */          slash at the end of the current dir */
2734      afile = js_NewFileObject(cx, CURRENT_DIR);      afile = js_NewFileObject(cx, CURRENT_DIR);
2735      currentdir =  JS_malloc(cx, MAX_PATH_LENGTH);      currentdir = cx->malloc(MAX_PATH_LENGTH);
2736      currentdir =  getcwd(currentdir, MAX_PATH_LENGTH);      currentdir = getcwd(currentdir, MAX_PATH_LENGTH);
2737      afile = js_NewFileObject(cx, currentdir);      afile = js_NewFileObject(cx, currentdir);
2738      JS_free(cx, currentdir);      cx->free(currentdir);
2739      vp = OBJECT_TO_JSVAL(afile);      vp = OBJECT_TO_JSVAL(afile);
2740      JS_DefinePropertyWithTinyId(cx, ctor, CURRENTDIR_PROPERTY, 0, vp,      JS_DefinePropertyWithTinyId(cx, ctor, CURRENTDIR_PROPERTY, 0, vp,
2741                  JS_PropertyStub, file_currentDirSetter,                  JS_PropertyStub, file_currentDirSetter,

Legend:
Removed from v.332  
changed lines
  Added in v.507

  ViewVC Help
Powered by ViewVC 1.1.24