123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /*
- Copyright (c) 2012, Simon Howard
- Permission to use, copy, modify, and/or distribute this software
- for any purpose with or without fee is hereby granted, provided
- that the above copyright notice and this permission notice appear
- in all copies.
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
- #ifndef LHASA_LHA_ARCH_H
- #define LHASA_LHA_ARCH_H
- #include <stdio.h>
- #include <stdarg.h>
- #include <stdint.h>
- #define LHA_ARCH_UNIX 1
- #define LHA_ARCH_WINDOWS 2
- #ifdef _WIN32
- #define LHA_ARCH LHA_ARCH_WINDOWS
- #else
- #define LHA_ARCH LHA_ARCH_UNIX
- #endif
- typedef enum {
- LHA_FILE_NONE,
- LHA_FILE_FILE,
- LHA_FILE_DIRECTORY,
- LHA_FILE_ERROR,
- } LHAFileType;
- /**
- * Cross-platform version of vasprintf().
- *
- * @param result Pointer to a variable to store the resulting string.
- * @param fmt Format string.
- * @param args Additional arguments for printf().
- * @return Number of characters in resulting string, or -1 if
- * an error occurred in generating the string.
- */
- int lha_arch_vasprintf(char **result, char *fmt, va_list args);
- /**
- * Change the mode of the specified FILE handle to be binary mode.
- *
- * @param handle The FILE handle.
- */
- void lha_arch_set_binary(FILE *handle);
- /**
- * Create a directory.
- *
- * @param path Path to the directory to create.
- * @param unix_perms Unix permissions for the directory to create.
- * @return Non-zero if the directory was created successfully.
- */
- int lha_arch_mkdir(char *path, unsigned int unix_perms);
- /**
- * Change the Unix ownership of the specified file or directory.
- * If this is not a Unix system, do nothing.
- *
- * @param filename Path to the file or directory.
- * @param unix_uid The UID to set.
- * @param unix_gid The GID to set.
- * @return Non-zero if set successfully.
- */
- int lha_arch_chown(char *filename, int unix_uid, int unix_gid);
- /**
- * Change the Unix permissions on the specified file or directory.
- *
- * @param filename Path to the file or directory.
- * @param unix_perms The permissions to set.
- * @return Non-zero if set successfully.
- */
- int lha_arch_chmod(char *filename, int unix_perms);
- /**
- * Set the file creation / modification time on the specified file or
- * directory.
- *
- * @param filename Path to the file or directory.
- * @param timestamp The Unix timestamp to set.
- * @return Non-zero if set successfully.
- */
- int lha_arch_utime(char *filename, unsigned int timestamp);
- /**
- * Set the file creation, modification and access times for the
- * specified file or directory, using 64-bit Windows timestamps.
- *
- * @param filename Path to the file or directory.
- * @param creation_time 64-bit Windows FILETIME value for the
- * creation time of the file.
- * @param modification_time Modification time of the file.
- * @param access_time Last access time of the file.
- * @return Non-zero if set successfully.
- */
- int lha_arch_set_windows_timestamps(char *filename,
- uint64_t creation_time,
- uint64_t modification_time,
- uint64_t access_time);
- /**
- * Open a new file for writing.
- *
- * @param filename Path to the file or directory.
- * @param unix_uid Unix UID to set for the new file, or -1 to not set.
- * @param unix_gid Unix GID to set for the new file, or -1 to not set.
- * @param unix_perms Unix permissions to set for the new file, or -1 to not
- * set.
- * @return Standard C file handle.
- */
- FILE *lha_arch_fopen(char *filename, int unix_uid,
- int unix_gid, int unix_perms);
- /**
- * Query whether the specified file exists.
- *
- * @param filename Path to the file.
- * @return The type of file.
- */
- LHAFileType lha_arch_exists(char *filename);
- /**
- * Create a symbolic link.
- *
- * If a file already exists at the location of the link to be created, it is
- * overwritten.
- *
- * @param path Path to the symbolic link to create.
- * @param target Target for the symbolic link.
- * @return Non-zero for success.
- */
- int lha_arch_symlink(char *path, char *target);
- #endif /* ifndef LHASA_LHA_ARCH_H */
|