関数 | |
char * | fgets_slash (char *s2, int maxlen, XFILE *f) |
char * | file_pload (char *syscmd, size_t *size) |
char * | fd_load (int fd, size_t *psize, size_t maxsize) |
char * | file_load (const char *fname, size_t *size, size_t maxsize) |
BOOL | unmap_file (void *start, size_t size) |
void * | map_file (char *fname, size_t size) |
static char ** | file_lines_parse (char *p, size_t size, int *numlines) |
char ** | file_lines_load (const char *fname, int *numlines, size_t maxsize) |
char ** | fd_lines_load (int fd, int *numlines, size_t maxsize) |
char ** | file_lines_pload (char *syscmd, int *numlines) |
void | file_lines_free (char **lines) |
void | file_lines_slashcont (char **lines) |
BOOL | file_save (const char *fname, void *packet, size_t length) |
char* fgets_slash | ( | char * | s2, | |
int | maxlen, | |||
XFILE * | f | |||
) |
util_file.c の 33 行で定義されています。
参照元 aix_cache_reload()・complete_sync()・getlmhostsent()・initialise_wins()・map_username()・pcap_cache_reload().
00034 { 00035 char *s=s2; 00036 int len = 0; 00037 int c; 00038 BOOL start_of_line = True; 00039 00040 if (x_feof(f)) { 00041 return(NULL); 00042 } 00043 00044 if (maxlen <2) { 00045 return(NULL); 00046 } 00047 00048 if (!s2) { 00049 maxlen = MIN(maxlen,8); 00050 s = (char *)SMB_MALLOC(maxlen); 00051 } 00052 00053 if (!s) { 00054 return(NULL); 00055 } 00056 00057 *s = 0; 00058 00059 while (len < maxlen-1) { 00060 c = x_getc(f); 00061 switch (c) { 00062 case '\r': 00063 break; 00064 case '\n': 00065 while (len > 0 && s[len-1] == ' ') { 00066 s[--len] = 0; 00067 } 00068 if (len > 0 && s[len-1] == '\\') { 00069 s[--len] = 0; 00070 start_of_line = True; 00071 break; 00072 } 00073 return(s); 00074 case EOF: 00075 if (len <= 0 && !s2) { 00076 SAFE_FREE(s); 00077 } 00078 return(len>0?s:NULL); 00079 case ' ': 00080 if (start_of_line) { 00081 break; 00082 } 00083 default: 00084 start_of_line = False; 00085 s[len++] = c; 00086 s[len] = 0; 00087 } 00088 00089 if (!s2 && len > maxlen-3) { 00090 maxlen *= 2; 00091 s = (char *)SMB_REALLOC(s,maxlen); 00092 if (!s) { 00093 DEBUG(0,("fgets_slash: failed to expand buffer!\n")); 00094 return(NULL); 00095 } 00096 } 00097 } 00098 return(s); 00099 }
char* file_pload | ( | char * | syscmd, | |
size_t * | size | |||
) |
util_file.c の 105 行で定義されています。
参照先 buf・fd・sys_pclose()・sys_popen()・total.
参照元 file_lines_pload().
00106 { 00107 int fd, n; 00108 char *p; 00109 pstring buf; 00110 size_t total; 00111 00112 fd = sys_popen(syscmd); 00113 if (fd == -1) { 00114 return NULL; 00115 } 00116 00117 p = NULL; 00118 total = 0; 00119 00120 while ((n = read(fd, buf, sizeof(buf))) > 0) { 00121 p = (char *)SMB_REALLOC(p, total + n + 1); 00122 if (!p) { 00123 DEBUG(0,("file_pload: failed to expand buffer!\n")); 00124 close(fd); 00125 return NULL; 00126 } 00127 memcpy(p+total, buf, n); 00128 total += n; 00129 } 00130 00131 if (p) { 00132 p[total] = 0; 00133 } 00134 00135 /* FIXME: Perhaps ought to check that the command completed 00136 * successfully (returned 0); if not the data may be 00137 * truncated. */ 00138 sys_pclose(fd); 00139 00140 if (size) { 00141 *size = total; 00142 } 00143 00144 return p; 00145 }
char* fd_load | ( | int | fd, | |
size_t * | psize, | |||
size_t | maxsize | |||
) |
util_file.c の 152 行で定義されています。
参照先 size・sys_fstat().
参照元 fd_lines_load()・file_load().
00153 { 00154 SMB_STRUCT_STAT sbuf; 00155 size_t size; 00156 char *p; 00157 00158 if (sys_fstat(fd, &sbuf) != 0) { 00159 return NULL; 00160 } 00161 00162 size = sbuf.st_size; 00163 if (maxsize) { 00164 size = MIN(size, maxsize); 00165 } 00166 00167 p = (char *)SMB_MALLOC(size+1); 00168 if (!p) { 00169 return NULL; 00170 } 00171 00172 if (read(fd, p, size) != size) { 00173 SAFE_FREE(p); 00174 return NULL; 00175 } 00176 p[size] = 0; 00177 00178 if (psize) { 00179 *psize = size; 00180 } 00181 00182 return p; 00183 }
char* file_load | ( | const char * | fname, | |
size_t * | size, | |||
size_t | maxsize | |||
) |
util_file.c の 189 行で定義されています。
参照元 file_lines_load()・map_file()・OpenConfFile().
00190 { 00191 int fd; 00192 char *p; 00193 00194 if (!fname || !*fname) { 00195 return NULL; 00196 } 00197 00198 fd = open(fname,O_RDONLY); 00199 if (fd == -1) { 00200 return NULL; 00201 } 00202 00203 p = fd_load(fd, size, maxsize); 00204 close(fd); 00205 return p; 00206 }
BOOL unmap_file | ( | void * | start, | |
size_t | size | |||
) |
util_file.c の 212 行で定義されています。
参照先 errno・strerror().
参照元 gfree_case_tables().
00213 { 00214 #ifdef HAVE_MMAP 00215 if ( munmap( start, size ) != 0 ) { 00216 DEBUG( 1, ("map_file: Failed to unmap address %p " 00217 "of size %u - %s\n", 00218 start, (unsigned int)size, strerror(errno) )); 00219 return False; 00220 } 00221 return True; 00222 #else 00223 SAFE_FREE( start ); 00224 return True; 00225 #endif 00226 }
void* map_file | ( | char * | fname, | |
size_t | size | |||
) |
util_file.c の 232 行で定義されています。
参照先 errno・fd・file_load()・strerror().
参照元 init_valid_table()・load_case_tables().
00233 { 00234 size_t s2 = 0; 00235 void *p = NULL; 00236 #ifdef HAVE_MMAP 00237 int fd; 00238 fd = open(fname, O_RDONLY, 0); 00239 if (fd == -1) { 00240 DEBUG(2,("map_file: Failed to load %s - %s\n", fname, strerror(errno))); 00241 return NULL; 00242 } 00243 p = mmap(NULL, size, PROT_READ, MAP_SHARED|MAP_FILE, fd, 0); 00244 close(fd); 00245 if (p == MAP_FAILED) { 00246 DEBUG(1,("map_file: Failed to mmap %s - %s\n", fname, strerror(errno))); 00247 return NULL; 00248 } 00249 #endif 00250 if (!p) { 00251 p = file_load(fname, &s2, 0); 00252 if (!p) { 00253 return NULL; 00254 } 00255 if (s2 != size) { 00256 DEBUG(1,("map_file: incorrect size for %s - got %lu expected %lu\n", 00257 fname, (unsigned long)s2, (unsigned long)size)); 00258 SAFE_FREE(p); 00259 return NULL; 00260 } 00261 } 00262 return p; 00263 }
static char** file_lines_parse | ( | char * | p, | |
size_t | size, | |||
int * | numlines | |||
) | [static] |
util_file.c の 269 行で定義されています。
参照元 fd_lines_load()・file_lines_load()・file_lines_pload().
00270 { 00271 int i; 00272 char *s, **ret; 00273 00274 if (!p) { 00275 return NULL; 00276 } 00277 00278 for (s = p, i=0; s < p+size; s++) { 00279 if (s[0] == '\n') i++; 00280 } 00281 00282 ret = SMB_MALLOC_ARRAY(char *, i+2); 00283 if (!ret) { 00284 SAFE_FREE(p); 00285 return NULL; 00286 } 00287 memset(ret, 0, sizeof(ret[0])*(i+2)); 00288 00289 ret[0] = p; 00290 for (s = p, i=0; s < p+size; s++) { 00291 if (s[0] == '\n') { 00292 s[0] = 0; 00293 i++; 00294 ret[i] = s+1; 00295 } 00296 if (s[0] == '\r') { 00297 s[0] = 0; 00298 } 00299 } 00300 00301 /* remove any blank lines at the end */ 00302 while (i > 0 && ret[i-1][0] == 0) { 00303 i--; 00304 } 00305 00306 if (numlines) { 00307 *numlines = i; 00308 } 00309 00310 return ret; 00311 }
char** file_lines_load | ( | const char * | fname, | |
int * | numlines, | |||
size_t | maxsize | |||
) |
util_file.c の 318 行で定義されています。
参照先 file_lines_parse()・file_load()・size.
参照元 get_server_info()・load_msg()・map_to_os2_driver()・read_sid_from_file()・torture_open_connection().
00319 { 00320 char *p; 00321 size_t size = 0; 00322 00323 p = file_load(fname, &size, maxsize); 00324 if (!p) { 00325 return NULL; 00326 } 00327 00328 return file_lines_parse(p, size, numlines); 00329 }
char** fd_lines_load | ( | int | fd, | |
int * | numlines, | |||
size_t | maxsize | |||
) |
util_file.c の 337 行で定義されています。
参照先 fd_load()・file_lines_parse()・size.
参照元 add_printer_hook()・enumports_hook()・generic_queue_get()・info_fn()・map_username()・process_usershare_file().
00338 { 00339 char *p; 00340 size_t size; 00341 00342 p = fd_load(fd, &size, maxsize); 00343 if (!p) { 00344 return NULL; 00345 } 00346 00347 return file_lines_parse(p, size, numlines); 00348 }
char** file_lines_pload | ( | char * | syscmd, | |
int * | numlines | |||
) |
util_file.c の 355 行で定義されています。
参照先 file_lines_parse()・file_pload()・size.
参照元 command_get_quota()・command_set_quota()・sys_disk_free()・sysv_cache_reload().
00356 { 00357 char *p; 00358 size_t size; 00359 00360 p = file_pload(syscmd, &size); 00361 if (!p) { 00362 return NULL; 00363 } 00364 00365 return file_lines_parse(p, size, numlines); 00366 }
void file_lines_free | ( | char ** | lines | ) |
util_file.c の 372 行で定義されています。
参照元 add_printer_hook()・command_get_quota()・command_set_quota()・enumports_level_1()・enumports_level_2()・generic_queue_get()・get_server_info()・info_fn()・load_msg()・map_to_os2_driver()・map_username()・process_usershare_file()・read_sid_from_file()・sys_disk_free()・sysv_cache_reload().
00373 { 00374 if (!lines) { 00375 return; 00376 } 00377 SAFE_FREE(lines[0]); 00378 SAFE_FREE(lines); 00379 }
void file_lines_slashcont | ( | char ** | lines | ) |
util_file.c の 386 行で定義されています。
参照先 len.
00387 { 00388 int i, j; 00389 00390 for (i=0; lines[i];) { 00391 int len = strlen(lines[i]); 00392 if (lines[i][len-1] == '\\') { 00393 lines[i][len-1] = ' '; 00394 if (lines[i+1]) { 00395 char *p = &lines[i][len]; 00396 while (p < lines[i+1]) { 00397 *p++ = ' '; 00398 } 00399 for (j = i+1; lines[j]; j++) { 00400 lines[j] = lines[j+1]; 00401 } 00402 } 00403 } else { 00404 i++; 00405 } 00406 } 00407 }
BOOL file_save | ( | const char * | fname, | |
void * | packet, | |||
size_t | length | |||
) |
util_file.c の 413 行で定義されています。
参照先 fd.
参照元 ads_sasl_spnego_bind()・ads_verify_ticket()・afs_settoken()・cli_session_setup_kerberos()・cli_session_setup_spnego()・ntlmssp_server_auth()・ntlmssp_server_negotiate()・reply_sesssetup_and_X_spnego()・reply_spnego_auth().
00414 { 00415 int fd; 00416 fd = open(fname, O_WRONLY|O_CREAT|O_TRUNC, 0644); 00417 if (fd == -1) { 00418 return False; 00419 } 00420 if (write(fd, packet, length) != (size_t)length) { 00421 return False; 00422 } 00423 close(fd); 00424 return True; 00425 }