Ejemplo n.º 1
0
void android_printf(int level, char *format, ...)
{
	va_list ap;
	va_start(ap, format);
	vsprintf(android_printf_buf, format, ap);
	va_end(ap);
	if( level == MSG_MSGDUMP)  xlog_printf(ANDROID_LOG_VERBOSE, "wpa_supplicant", "%s", android_printf_buf);
	else if( level ==  MSG_DEBUG)	xlog_printf(ANDROID_LOG_DEBUG, "wpa_supplicant", "%s", android_printf_buf);
	else if( level ==  MSG_INFO)	xlog_printf(ANDROID_LOG_INFO, "wpa_supplicant", "%s", android_printf_buf);
	else if( level ==  MSG_WARNING)	xlog_printf(ANDROID_LOG_WARN, "wpa_supplicant", "%s", android_printf_buf);
	else xlog_printf(ANDROID_LOG_ERROR, "wpa_supplicant", "%s", android_printf_buf);
}
Ejemplo n.º 2
0
void android_printf(int level, char *format, ...)
{
	va_list ap;
	char *buf;
	const int buflen=2048;
	int cnt=0;
	
	buf = os_malloc(buflen);
	if(buf == NULL)
	{
		xlog_printf(ANDROID_LOG_ERROR, "wpa_supplicant", "android_printf : Failed to allocate massage buffer");
		return;
	}
	va_start(ap, format);
	cnt = vsnprintf(buf, buflen-sizeof(char), format, ap);
	va_end(ap);
	if(cnt < 0 )
	{
		xlog_printf(ANDROID_LOG_ERROR, "wpa_supplicant", "android_printf : Log information is too long");
		return;
	}
	if( level == MSG_MSGDUMP)  xlog_printf(ANDROID_LOG_VERBOSE, "wpa_supplicant", "%s", buf);
	else if( level ==  MSG_DEBUG)	xlog_printf(ANDROID_LOG_DEBUG, "wpa_supplicant", "%s", buf);
	else if( level ==  MSG_INFO)	xlog_printf(ANDROID_LOG_INFO, "wpa_supplicant", "%s", buf);
	else if( level ==  MSG_WARNING)	xlog_printf(ANDROID_LOG_WARN, "wpa_supplicant", "%s", buf);
	else xlog_printf(ANDROID_LOG_ERROR, "wpa_supplicant", "%s", buf);
	os_free(buf);
}
Ejemplo n.º 3
0
void DirectVolume::handleDiskChanged(const char *devpath, NetlinkEvent *evt) {
    int major = atoi(evt->findParam("MAJOR"));
    int minor = atoi(evt->findParam("MINOR"));
    char nodepath[255];
    int fd = 0;

    if ((major != mDiskMajor) || (minor != mDiskMinor)) {
        return;
    }

    SLOGI("Volume %s disk has changed", getLabel());
    const char *tmp = evt->findParam("NPARTS");
    if (tmp) {
        mDiskNumParts = atoi(tmp);
    } else {
        SLOGW("Kernel block uevent missing 'NPARTS'");
        mDiskNumParts = 1;
    }

    /* int partmask = 0;
    int i;
    for (i = 1; i <= mDiskNumParts; i++) {
        partmask |= (1 << i);
    }
    mPendingPartMap = partmask; */
    mPendingPartNum = mDiskNumParts;
    for (int i = 0; i < MAX_PARTITIONS; i++)
        mPartMinors[i] = -1;

    if (getState() != Volume::State_Formatting) {
        if(evt->findParam("DISK_MEDIA_CHANGE")) {
            xlog_printf(ANDROID_LOG_INFO, LOG_TAG, "UsbPatch: disk change with DISK_MEDIA_CHANGE");
            snprintf(nodepath, sizeof(nodepath), "/dev/block/vold/%d:%d", major, minor);
            xlog_printf(ANDROID_LOG_INFO, LOG_TAG, "UsbPatch: Check device node (%s)existence in (%s)!", nodepath, __func__);

            if (-1 == (fd = open(nodepath, O_RDONLY, 0644)) ) {
                xlog_printf(ANDROID_LOG_WARN, LOG_TAG, "UsbPatch: Node Path (%s) open fail, do unmount, mDiskNumParts=%d!", nodepath, mDiskNumParts);
                unmountVol(true, false);
            } else {
                xlog_printf(ANDROID_LOG_INFO, LOG_TAG, "UsbPatch: Node Path (%s) open success with mDiskNumParts=(%d)!", nodepath, mDiskNumParts);
                close(fd);
            }
        } else {
            if (mDiskNumParts == 0) {
                xlog_printf(ANDROID_LOG_INFO, LOG_TAG, "UsbPatch: possible no partition media inserted, do mount first, mDiskNumParts=%d", mDiskNumParts);
                if(getState() == Volume::State_Idle) {
                    if(mountVol() != 0) {
                        mRetryMount = true;
                    }
                } else {
                    mRetryMount = true;
                    setState(Volume::State_Idle);
                }
            } else {
                xlog_printf(ANDROID_LOG_INFO, LOG_TAG, "UsbPatch: possible need next PartitionAdd uevent comes");
                setState(Volume::State_Pending);
            }
        }
    }
}
Ejemplo n.º 4
0
int
checkfilesys(const char *fname)
{
	int dosfs;
	struct bootblock boot;
	struct fatEntry *fat = NULL;
	int i;
	int mod = 0;
        int quiet = 0;
        int skip_fat_compare = 0;

	rdonly = alwaysno;
	if (!quiet)
		printf("** %s", fname);

	dosfs = open(fname, rdonly ? O_RDONLY : O_RDWR, 0);
	if (dosfs < 0 && !rdonly) {
		xlog_printf(ANDROID_LOG_INFO, FSCK_XLOG_TAG, "dosfs < 0 && !rdonly");
		dosfs = open(fname, O_RDONLY, 0);
		if (dosfs >= 0)
			pwarn(" (NO WRITE)\n");
		else if (!quiet)
			printf("\n");
		rdonly = 1;
	} else if (!quiet)
		printf("\n");

	if (dosfs < 0) {
		perror("Can't open");
		printf("%s() : Cannot open %s\n", __func__, fname) ;
		return 8;
	}

	if (readboot(dosfs, &boot) == FSFATAL) {
		close(dosfs);
		printf("\n");
		return 8;
	}

	if (skipclean && preen && checkdirty(dosfs, &boot)) {
		printf("%s: ", fname);
		printf("FILESYSTEM CLEAN; SKIPPING CHECKS\n");
		close(dosfs);
		return 0;
	}

        if (((boot.FATsecs * boot.BytesPerSec) / 1024) > FAT_COMPARE_MAX_KB) {
			xlog_printf(ANDROID_LOG_INFO, FSCK_XLOG_TAG, " - ((boot.FATsecs * boot.BytesPerSec) / 1024) = %d > FAT_COMPARE_MAX_KB(%d)", 
				((boot.FATsecs * boot.BytesPerSec) / 1024), 
				FAT_COMPARE_MAX_KB
			);		
			xlog_printf(ANDROID_LOG_INFO, FSCK_XLOG_TAG, " - Skip FAT compare!") ;
            skip_fat_compare = 1;
        }

	start_count(&fsck_p1_time) ;
	if (!quiet)  {
                if (skip_fat_compare) 
                        printf("** Phase 1 - Read FAT (compare skipped)\n");
		else if (boot.ValidFat < 0)
			printf("** Phase 1 - Read and Compare FATs\n");
		else
			printf("** Phase 1 - Read FAT\n");
	}

	mod |= readfat(dosfs, &boot, boot.ValidFat >= 0 ? boot.ValidFat : 0, &fat);
	if (mod & FSERROR) {
		printf("FSERROR after readfat()\n");
	}
	if (mod & FSFATAL) {
		printf("\nFatal error during readfat()\n");
		close(dosfs);
		return 8;
	}

	if (!skip_fat_compare && boot.ValidFat < 0)
		for (i = 1; i < (int)boot.FATs; i++) {
			struct fatEntry *currentFat;

			mod |= readfat(dosfs, &boot, i, &currentFat);

			if (mod & FSFATAL) {
				printf("Fatal error during readfat() for comparison\n");
				free(fat);
				(void)close(dosfs);
				return 8;
			}

			mod |= comparefat(&boot, fat, currentFat, i);
			free(currentFat);
			if (mod & FSFATAL) {
				printf("Fatal error during FAT comparison\n");
				free(fat);
				(void)close(dosfs);
				return 8;
			}
		}
	end_count("Phase#1", &fsck_p1_time) ;

	start_count(&fsck_p2_time) ;
	if (!quiet)
		printf("** Phase 2 - Check Cluster Chains\n");

	mod |= checkfat(&boot, fat);
	if (mod & FSERROR) {
		printf("FSERROR after checkfat()\n");
	}
	if (mod & FSFATAL) {
		printf("Fatal error during FAT check\n");
		free(fat);
		(void)close(dosfs);
		return 8;
	}
	end_count("Phase#2", &fsck_p2_time) ;
	
	/* delay writing FATs */
	start_count(&fsck_p3_time) ;
	if (!quiet)
		printf("** Phase 3 - Checking Directories\n");

	mod |= resetDosDirSection(&boot, fat);
	if (mod & FSERROR) {
		printf("FSERROR after resetDosDirSection()\n");
	}
	if (mod & FSFATAL) {
		printf("Fatal error during resetDosDirSection()\n");
		free(fat);
		close(dosfs);
		return 8;
	}
	/* delay writing FATs */

	mod |= handleDirTree(dosfs, &boot, fat);
	if (mod & FSERROR) {
		printf("FSERROR after handleDirTree()\n");
		/* try to recovery again */
		mod &= ~FSERROR;
		mod |= handleDirTree(dosfs, &boot, fat);
	}
	if (mod & FSFATAL) {
		printf("Fatal error during handleDirTree()\n");
		finishDosDirSection();
		free(fat);
		close(dosfs);
		return 8;
	}
	end_count("Phase#3", &fsck_p3_time) ;

	start_count(&fsck_p4_time) ;
	if (!quiet)
		printf("** Phase 4 - Checking for Lost Files\n");

	mod |= checklost(dosfs, &boot, fat);
	if (mod & FSERROR) {
		printf("FSERROR after checklost()\n");
	}
	if (mod & FSFATAL) {
		printf("Fatal error during checklost()\n");
		finishDosDirSection();
		free(fat);
		(void)close(dosfs);
		return 8;
	}
	end_count("Phase#4", &fsck_p4_time) ;

	/* now write the FATs */
	if (mod & FSFATMOD) {
		if (ask(1, "Update FATs")) {
			mod |= writefat(dosfs, &boot, fat, mod & FSFIXFAT);
			if (mod & FSFATAL) {
				printf("Fatal error during writefat()\n");
				finishDosDirSection();
				free(fat);
				(void)close(dosfs);
				return 8;
			}
		} else
			mod |= FSERROR;
	}

	if (boot.NumBad)
		pwarn("%d files, %d free (%d clusters), %d bad (%d clusters)\n",
		      boot.NumFiles,
		      boot.NumFree * boot.ClusterSize / 1024, boot.NumFree,
		      boot.NumBad * boot.ClusterSize / 1024, boot.NumBad);
	else
		pwarn("%d files, %d free (%d clusters)\n",
		      boot.NumFiles,
		      boot.NumFree * boot.ClusterSize / 1024, boot.NumFree);

	if (mod && (mod & FSERROR) == 0) {
		if (mod & FSDIRTY) {
			if (ask(1, "MARK FILE SYSTEM CLEAN") == 0)
				mod &= ~FSDIRTY;

			if (mod & FSDIRTY) {
				pwarn("MARKING FILE SYSTEM CLEAN\n");
				mod |= writefat(dosfs, &boot, fat, 1);
			} else {
				pwarn("\n***** FILE SYSTEM IS LEFT MARKED AS DIRTY *****\n");
				mod |= FSERROR; /* file system not clean */
			}
		}
	}

	finishDosDirSection();
	free(fat);
	(void)close(dosfs);

	if (mod & FSFATAL) {
		pwarn("\n***** FSFATAL *****\n");
		return 8;
	}
	if (mod & FSERROR) {
		pwarn("\n***** FSERROR *****\n");
		return 8;
	}
	if (mod) {
		pwarn("\n***** FILE SYSTEM WAS MODIFIED *****\n");
		return 4; 
	}

	return 0;
}