00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <stdio.h>
00027 #include <stdlib.h>
00028 #include <stdbool.h>
00029 #include <stdarg.h>
00030 #include <string.h>
00031 #include <unistd.h>
00032 #include <errno.h>
00033 #include <sys/file.h>
00034 #include "qDecoder.h"
00035 #include "qInternal.h"
00036
00037
00038 char _q_x2c(char hex_up, char hex_low) {
00039 char digit;
00040
00041 digit = 16 * (hex_up >= 'A' ? ((hex_up & 0xdf) - 'A') + 10 : (hex_up - '0'));
00042 digit += (hex_low >= 'A' ? ((hex_low & 0xdf) - 'A') + 10 : (hex_low - '0'));
00043
00044 return digit;
00045 }
00046
00047 char *_q_makeword(char *str, char stop) {
00048 char *word;
00049 int len, i;
00050
00051 for (len = 0; ((str[len] != stop) && (str[len])); len++);
00052 word = (char *)malloc(sizeof(char) * (len + 1));
00053
00054 for (i = 0; i < len; i++) word[i] = str[i];
00055 word[i] = '\0';
00056
00057 if (str[len])len++;
00058 for (i = len; str[i]; i++) str[i - len] = str[i];
00059 str[i - len] = '\0';
00060
00061 return word;
00062 }
00063
00064
00065 char *_q_fgets(char *str, int size, FILE *stream) {
00066 int c;
00067 char *ptr;
00068
00069 for (ptr = str; size > 1; size--) {
00070 c = fgetc(stream);
00071 if (c == EOF) break;
00072 *ptr++ = (char)c;
00073 if (c == '\n') break;
00074 }
00075
00076 *ptr = '\0';
00077 if (strlen(str) == 0) return NULL;
00078
00079 return str;
00080 }
00081
00082 ssize_t _q_writef(int fd, char *format, ...) {
00083 char buf[MAX_LINEBUF];
00084 va_list arglist;
00085
00086 va_start(arglist, format);
00087 vsnprintf(buf, sizeof(buf), format, arglist);
00088 va_end(arglist);
00089
00090 while(true) {
00091 int status = qSocketWaitWritable(fd, 1000);
00092 if(status == 0) continue;
00093 else if(status < 0) return -1;
00094 break;
00095 }
00096
00097 return write(fd, buf, strlen(buf));
00098 }
00099
00100 ssize_t _q_write(int fd, const void *buf, size_t nbytes) {
00101 if(nbytes == 0) return 0;
00102
00103 ssize_t sent = 0;
00104
00105 while(sent < nbytes) {
00106 int status = qSocketWaitWritable(fd, 1000);
00107 if(status == 0) continue;
00108 else if(status < 0) break;
00109
00110 ssize_t wsize = write(fd, buf+sent, nbytes-sent);
00111 if(wsize <= 0) break;
00112 sent += wsize;
00113 }
00114
00115 if(sent > 0) return sent;
00116 return -1;
00117 }
00118
00119
00120 int _q_unlink(const char *pathname) {
00121 #ifdef _WIN32
00122 return _unlink(pathname);
00123 #endif
00124 return unlink(pathname);
00125 }