@@ -1697,3 +1697,281 @@ JAVA_OBJECT java_lang_String_format___java_lang_String_java_lang_Object_1ARRAY_R
16971697 return out;
16981698
16991699}
1700+
1701+ // java.io.File implementation
1702+
1703+ JAVA_BOOLEAN java_io_File_existsImpl___java_lang_String_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1704+ if (path == JAVA_NULL) return JAVA_FALSE;
1705+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1706+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1707+ BOOL res = [[NSFileManager defaultManager ] fileExistsAtPath: p];
1708+ [pool release ];
1709+ return res;
1710+ }
1711+
1712+ JAVA_BOOLEAN java_io_File_isDirectoryImpl___java_lang_String_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1713+ if (path == JAVA_NULL) return JAVA_FALSE;
1714+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1715+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1716+ BOOL isDir = NO ;
1717+ BOOL exists = [[NSFileManager defaultManager ] fileExistsAtPath: p isDirectory: &isDir];
1718+ [pool release ];
1719+ return exists && isDir;
1720+ }
1721+
1722+ JAVA_BOOLEAN java_io_File_isFileImpl___java_lang_String_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1723+ if (path == JAVA_NULL) return JAVA_FALSE;
1724+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1725+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1726+ BOOL isDir = NO ;
1727+ BOOL exists = [[NSFileManager defaultManager ] fileExistsAtPath: p isDirectory: &isDir];
1728+ [pool release ];
1729+ return exists && !isDir;
1730+ }
1731+
1732+ JAVA_BOOLEAN java_io_File_isHiddenImpl___java_lang_String_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1733+ if (path == JAVA_NULL) return JAVA_FALSE;
1734+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1735+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1736+ BOOL hidden = [[p lastPathComponent ] hasPrefix: @" ." ];
1737+ [pool release ];
1738+ return hidden;
1739+ }
1740+
1741+ JAVA_LONG java_io_File_lastModifiedImpl___java_lang_String_R_long (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1742+ if (path == JAVA_NULL) return 0 ;
1743+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1744+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1745+ NSDictionary *attrs = [[NSFileManager defaultManager ] attributesOfItemAtPath: p error: NULL ];
1746+ JAVA_LONG time = 0 ;
1747+ if (attrs) {
1748+ NSDate *date = [attrs fileModificationDate ];
1749+ time = (JAVA_LONG)([date timeIntervalSince1970 ] * 1000 );
1750+ }
1751+ [pool release ];
1752+ return time;
1753+ }
1754+
1755+ JAVA_LONG java_io_File_lengthImpl___java_lang_String_R_long (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1756+ if (path == JAVA_NULL) return 0 ;
1757+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1758+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1759+ NSDictionary *attrs = [[NSFileManager defaultManager ] attributesOfItemAtPath: p error: NULL ];
1760+ JAVA_LONG len = 0 ;
1761+ if (attrs) {
1762+ len = [attrs fileSize ];
1763+ }
1764+ [pool release ];
1765+ return len;
1766+ }
1767+
1768+ JAVA_BOOLEAN java_io_File_createNewFileImpl___java_lang_String_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1769+ if (path == JAVA_NULL) return JAVA_FALSE;
1770+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1771+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1772+ BOOL res = [[NSFileManager defaultManager ] createFileAtPath: p contents: nil attributes: nil ];
1773+ [pool release ];
1774+ return res;
1775+ }
1776+
1777+ JAVA_BOOLEAN java_io_File_deleteImpl___java_lang_String_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1778+ if (path == JAVA_NULL) return JAVA_FALSE;
1779+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1780+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1781+ BOOL res = [[NSFileManager defaultManager ] removeItemAtPath: p error: NULL ];
1782+ [pool release ];
1783+ return res;
1784+ }
1785+
1786+ JAVA_OBJECT java_io_File_listImpl___java_lang_String_R_java_lang_String_1ARRAY (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1787+ if (path == JAVA_NULL) return JAVA_NULL;
1788+ enteringNativeAllocations ();
1789+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1790+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1791+ NSArray * files = [[NSFileManager defaultManager ] contentsOfDirectoryAtPath: p error: NULL ];
1792+ if (files == nil ) {
1793+ [pool release ];
1794+ finishedNativeAllocations ();
1795+ return JAVA_NULL;
1796+ }
1797+
1798+ JAVA_OBJECT arr = allocArray (threadStateData, [files count ], &class__java_lang_String, sizeof (JAVA_OBJECT), 1 );
1799+
1800+ for (int i=0 ; i<[files count ]; i++) {
1801+ NSString * f = [files objectAtIndex: i];
1802+ JAVA_OBJECT s = fromNSString (CN1_THREAD_STATE_PASS_ARG f);
1803+ CN1_SET_ARRAY_ELEMENT_OBJECT (arr, i, s);
1804+ }
1805+
1806+ [pool release ];
1807+ finishedNativeAllocations ();
1808+ return arr;
1809+ }
1810+
1811+ JAVA_BOOLEAN java_io_File_mkdirImpl___java_lang_String_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1812+ if (path == JAVA_NULL) return JAVA_FALSE;
1813+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1814+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1815+ BOOL res = [[NSFileManager defaultManager ] createDirectoryAtPath: p withIntermediateDirectories: NO attributes: nil error: NULL ];
1816+ [pool release ];
1817+ return res;
1818+ }
1819+
1820+ JAVA_BOOLEAN java_io_File_renameToImpl___java_lang_String_java_lang_String_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path, JAVA_OBJECT dest) {
1821+ if (path == JAVA_NULL || dest == JAVA_NULL) return JAVA_FALSE;
1822+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1823+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1824+ NSString * d = toNSString (CN1_THREAD_STATE_PASS_ARG dest);
1825+ BOOL res = [[NSFileManager defaultManager ] moveItemAtPath: p toPath: d error: NULL ];
1826+ [pool release ];
1827+ return res;
1828+ }
1829+
1830+ JAVA_BOOLEAN java_io_File_setReadOnlyImpl___java_lang_String_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1831+ if (path == JAVA_NULL) return JAVA_FALSE;
1832+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1833+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1834+ NSDictionary * attrs = [NSDictionary dictionaryWithObject: [NSNumber numberWithBool: YES ] forKey: NSFileImmutable ];
1835+ BOOL res = [[NSFileManager defaultManager ] setAttributes: attrs ofItemAtPath: p error: NULL ];
1836+ [pool release ];
1837+ return res;
1838+ }
1839+
1840+ JAVA_BOOLEAN java_io_File_setWritableImpl___java_lang_String_boolean_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path, JAVA_BOOLEAN writable) {
1841+ if (path == JAVA_NULL) return JAVA_FALSE;
1842+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1843+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1844+ // Setting writable usually means checking Immutable flag or Posix permissions
1845+ // Simplistic implementation for Immutable flag:
1846+ NSDictionary * attrs = [NSDictionary dictionaryWithObject: [NSNumber numberWithBool: (!writable)] forKey: NSFileImmutable ];
1847+ BOOL res = [[NSFileManager defaultManager ] setAttributes: attrs ofItemAtPath: p error: NULL ];
1848+ [pool release ];
1849+ return res;
1850+ }
1851+
1852+ JAVA_BOOLEAN java_io_File_setReadableImpl___java_lang_String_boolean_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path, JAVA_BOOLEAN readable) {
1853+ // Implementing setReadable on iOS sandbox is tricky via NSFileManager without POSIX.
1854+ // We'll treat it as success if file exists.
1855+ return java_io_File_existsImpl___java_lang_String_R_boolean (threadStateData, __cn1ThisObject, path);
1856+ }
1857+
1858+ JAVA_BOOLEAN java_io_File_setExecutableImpl___java_lang_String_boolean_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path, JAVA_BOOLEAN executable) {
1859+ // Executable permission is not typically managed this way on iOS documents
1860+ return java_io_File_existsImpl___java_lang_String_R_boolean (threadStateData, __cn1ThisObject, path);
1861+ }
1862+
1863+ JAVA_BOOLEAN java_io_File_canReadImpl___java_lang_String_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1864+ if (path == JAVA_NULL) return JAVA_FALSE;
1865+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1866+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1867+ BOOL res = [[NSFileManager defaultManager ] isReadableFileAtPath: p];
1868+ [pool release ];
1869+ return res;
1870+ }
1871+
1872+ JAVA_BOOLEAN java_io_File_canWriteImpl___java_lang_String_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1873+ if (path == JAVA_NULL) return JAVA_FALSE;
1874+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1875+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1876+ BOOL res = [[NSFileManager defaultManager ] isWritableFileAtPath: p];
1877+ [pool release ];
1878+ return res;
1879+ }
1880+
1881+ JAVA_BOOLEAN java_io_File_canExecuteImpl___java_lang_String_R_boolean (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1882+ if (path == JAVA_NULL) return JAVA_FALSE;
1883+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1884+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1885+ BOOL res = [[NSFileManager defaultManager ] isExecutableFileAtPath: p];
1886+ [pool release ];
1887+ return res;
1888+ }
1889+
1890+ JAVA_LONG java_io_File_getTotalSpaceImpl___java_lang_String_R_long (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1891+ #ifdef CN1_IOS
1892+ return 0 ;
1893+ #else
1894+ if (path == JAVA_NULL) return 0 ;
1895+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1896+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1897+ NSDictionary *attrs = [[NSFileManager defaultManager ] attributesOfFileSystemForPath: p error: NULL ];
1898+ JAVA_LONG size = 0 ;
1899+ if (attrs) {
1900+ size = [[attrs objectForKey: NSFileSystemSize ] longLongValue ];
1901+ }
1902+ [pool release ];
1903+ return size;
1904+ #endif
1905+ }
1906+
1907+ JAVA_LONG java_io_File_getFreeSpaceImpl___java_lang_String_R_long (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1908+ #ifdef CN1_IOS
1909+ return 0 ;
1910+ #else
1911+ if (path == JAVA_NULL) return 0 ;
1912+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1913+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1914+ NSDictionary *attrs = [[NSFileManager defaultManager ] attributesOfFileSystemForPath: p error: NULL ];
1915+ JAVA_LONG size = 0 ;
1916+ if (attrs) {
1917+ size = [[attrs objectForKey: NSFileSystemFreeSize ] longLongValue ];
1918+ }
1919+ [pool release ];
1920+ return size;
1921+ #endif
1922+ }
1923+
1924+ JAVA_LONG java_io_File_getUsableSpaceImpl___java_lang_String_R_long (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1925+ #ifdef CN1_IOS
1926+ return 0 ;
1927+ #else
1928+ if (path == JAVA_NULL) return 0 ;
1929+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1930+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1931+ NSDictionary *attrs = [[NSFileManager defaultManager ] attributesOfFileSystemForPath: p error: NULL ];
1932+ JAVA_LONG size = 0 ;
1933+ if (attrs) {
1934+ size = [[attrs objectForKey: NSFileSystemFreeSize ] longLongValue ]; // Usable ~= Free usually
1935+ }
1936+ [pool release ];
1937+ return size;
1938+ #endif
1939+ }
1940+
1941+ JAVA_OBJECT java_io_File_getAbsolutePathImpl___java_lang_String_R_java_lang_String (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1942+ if (path == JAVA_NULL) return JAVA_NULL;
1943+ enteringNativeAllocations ();
1944+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1945+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1946+
1947+ NSString * absPath;
1948+ if ([p isAbsolutePath ]) {
1949+ absPath = p;
1950+ } else {
1951+ NSString * cwd = [[NSFileManager defaultManager ] currentDirectoryPath ];
1952+ absPath = [cwd stringByAppendingPathComponent: p];
1953+ }
1954+ JAVA_OBJECT res = fromNSString (CN1_THREAD_STATE_PASS_ARG absPath);
1955+ [pool release ];
1956+ finishedNativeAllocations ();
1957+ return res;
1958+ }
1959+
1960+ JAVA_OBJECT java_io_File_getCanonicalPathImpl___java_lang_String_R_java_lang_String (CODENAME_ONE_THREAD_STATE, JAVA_OBJECT __cn1ThisObject, JAVA_OBJECT path) {
1961+ if (path == JAVA_NULL) return JAVA_NULL;
1962+ enteringNativeAllocations ();
1963+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
1964+ NSString * p = toNSString (CN1_THREAD_STATE_PASS_ARG path);
1965+ NSString * absPath;
1966+ if ([p isAbsolutePath ]) {
1967+ absPath = p;
1968+ } else {
1969+ NSString * cwd = [[NSFileManager defaultManager ] currentDirectoryPath ];
1970+ absPath = [cwd stringByAppendingPathComponent: p];
1971+ }
1972+ NSString * canon = [absPath stringByStandardizingPath ];
1973+ JAVA_OBJECT res = fromNSString (CN1_THREAD_STATE_PASS_ARG canon);
1974+ [pool release ];
1975+ finishedNativeAllocations ();
1976+ return res;
1977+ }
0 commit comments